xref: /AOO41X/main/sc/source/ui/vba/testvba/testvba.cxx (revision b3f79822e811ac3493b185030a72c3c5a51f32d8)
1*b3f79822SAndrew Rist /**************************************************************
2*b3f79822SAndrew Rist  *
3*b3f79822SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*b3f79822SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*b3f79822SAndrew Rist  * distributed with this work for additional information
6*b3f79822SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*b3f79822SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*b3f79822SAndrew Rist  * "License"); you may not use this file except in compliance
9*b3f79822SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*b3f79822SAndrew Rist  *
11*b3f79822SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*b3f79822SAndrew Rist  *
13*b3f79822SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*b3f79822SAndrew Rist  * software distributed under the License is distributed on an
15*b3f79822SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b3f79822SAndrew Rist  * KIND, either express or implied.  See the License for the
17*b3f79822SAndrew Rist  * specific language governing permissions and limitations
18*b3f79822SAndrew Rist  * under the License.
19*b3f79822SAndrew Rist  *
20*b3f79822SAndrew Rist  *************************************************************/
21*b3f79822SAndrew Rist 
22cdf0e10cSrcweir #include "cppuhelper/bootstrap.hxx"
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include <com/sun/star/beans/Property.hpp>
25cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
26cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySetInfo.hpp>
27cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
28cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp>
29cdf0e10cSrcweir #include <com/sun/star/frame/XComponentLoader.hpp>
30cdf0e10cSrcweir #include <com/sun/star/lang/XMultiComponentFactory.hpp>
31cdf0e10cSrcweir #include <com/sun/star/sheet/XSpreadsheet.hpp>
32cdf0e10cSrcweir #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
33cdf0e10cSrcweir #include <com/sun/star/util/XCloseable.hpp>
34cdf0e10cSrcweir #include <com/sun/star/uno/XComponentContext.hpp>
35cdf0e10cSrcweir #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
36cdf0e10cSrcweir #include <com/sun/star/script/provider/XScriptProviderSupplier.hpp>
37cdf0e10cSrcweir #include <com/sun/star/document/XTypeDetection.hpp>
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #include <tools/urlobj.hxx>
40cdf0e10cSrcweir #include <osl/file.hxx>
41cdf0e10cSrcweir 
42cdf0e10cSrcweir #include <memory>
43cdf0e10cSrcweir #include <iostream>
44cdf0e10cSrcweir 
45cdf0e10cSrcweir using namespace ::com::sun::star;
46cdf0e10cSrcweir using namespace ::com::sun::star::sheet;
47cdf0e10cSrcweir 
48cdf0e10cSrcweir using ::com::sun::star::beans::Property;
49cdf0e10cSrcweir using ::com::sun::star::beans::PropertyValue;
50cdf0e10cSrcweir using ::com::sun::star::beans::XPropertySet;
51cdf0e10cSrcweir using ::com::sun::star::beans::XPropertySetInfo;
52cdf0e10cSrcweir using ::com::sun::star::container::XNameContainer;
53cdf0e10cSrcweir using ::com::sun::star::lang::XComponent;
54cdf0e10cSrcweir using ::com::sun::star::lang::XMultiComponentFactory;
55cdf0e10cSrcweir using ::com::sun::star::frame::XComponentLoader;
56cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
57cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
58cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY;
59cdf0e10cSrcweir using ::com::sun::star::uno::UNO_QUERY_THROW;
60cdf0e10cSrcweir using ::com::sun::star::uno::XComponentContext;
61cdf0e10cSrcweir using ::com::sun::star::uno::XInterface;
62cdf0e10cSrcweir using ::com::sun::star::ucb::XSimpleFileAccess;
63cdf0e10cSrcweir using ::com::sun::star::document::XTypeDetection;
64cdf0e10cSrcweir using ::rtl::OUString;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir using ::std::auto_ptr;
67cdf0e10cSrcweir 
68cdf0e10cSrcweir const OUString EXTN = rtl::OUString::createFromAscii(".xls");
69cdf0e10cSrcweir 
convertToURL(const OUString & rPath)70cdf0e10cSrcweir OUString convertToURL( const OUString& rPath )
71cdf0e10cSrcweir {
72cdf0e10cSrcweir         rtl::OUString aURL;
73cdf0e10cSrcweir         INetURLObject aObj;
74cdf0e10cSrcweir         aObj.SetURL( rPath );
75cdf0e10cSrcweir         bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
76cdf0e10cSrcweir         if ( bIsURL )
77cdf0e10cSrcweir                 aURL = rPath;
78cdf0e10cSrcweir         else
79cdf0e10cSrcweir 		{
80cdf0e10cSrcweir                 osl::FileBase::getFileURLFromSystemPath( rPath, aURL );
81cdf0e10cSrcweir 				if ( aURL.equals( rPath ) )
82cdf0e10cSrcweir 					throw uno::RuntimeException( rtl::OUString::createFromAscii( "could'nt convert " ).concat( rPath ).concat( rtl::OUString::createFromAscii( " to a URL, is it a fully qualified path name? " ) ), Reference< uno::XInterface >() );
83cdf0e10cSrcweir 		}
84cdf0e10cSrcweir 		return aURL;
85cdf0e10cSrcweir }
86cdf0e10cSrcweir 
ascii(const sal_Char * cstr)87cdf0e10cSrcweir OUString ascii(const sal_Char* cstr)
88cdf0e10cSrcweir {
89cdf0e10cSrcweir 	return OUString::createFromAscii(cstr);
90cdf0e10cSrcweir }
91cdf0e10cSrcweir 
getStr(const OUString & ou)92cdf0e10cSrcweir const sal_Char* getStr(const OUString& ou)
93cdf0e10cSrcweir {
94cdf0e10cSrcweir     return OUStringToOString(ou, RTL_TEXTENCODING_UTF8).getStr();
95cdf0e10cSrcweir }
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 
usage(const char * pName)98cdf0e10cSrcweir int usage( const char* pName )
99cdf0e10cSrcweir {
100cdf0e10cSrcweir 	std::cerr << "usage: " << pName << "<path to testdocument dir> <output_directory>" << std::endl;
101cdf0e10cSrcweir         return 1;
102cdf0e10cSrcweir 
103cdf0e10cSrcweir }
104cdf0e10cSrcweir 
105cdf0e10cSrcweir class TestVBA
106cdf0e10cSrcweir {
107cdf0e10cSrcweir private:
108cdf0e10cSrcweir 	Reference< XComponentContext >  mxContext;
109cdf0e10cSrcweir 	Reference< XMultiComponentFactory > mxMCF;
110cdf0e10cSrcweir 	Reference< XComponentLoader > mxCompLoader;
111cdf0e10cSrcweir 	Reference< XSimpleFileAccess > mxSFA;
112cdf0e10cSrcweir 	rtl::OUString msOutDirPath;
113cdf0e10cSrcweir protected:
114cdf0e10cSrcweir public:
TestVBA(const Reference<XComponentContext> & _xContext,const Reference<XMultiComponentFactory> & _xMCF,const Reference<XComponentLoader> & _xCompLoader,const rtl::OUString & _outDirPath)115cdf0e10cSrcweir 	TestVBA( const Reference< XComponentContext >&  _xContext,
116cdf0e10cSrcweir 		const Reference< XMultiComponentFactory >& _xMCF,
117cdf0e10cSrcweir 		const Reference< XComponentLoader >& _xCompLoader,
118cdf0e10cSrcweir 		const rtl::OUString& _outDirPath ) : mxContext( _xContext ), mxMCF( _xMCF ),
119cdf0e10cSrcweir mxCompLoader( _xCompLoader ), msOutDirPath( convertToURL( _outDirPath  ) )
120cdf0e10cSrcweir 	{
121cdf0e10cSrcweir 		mxSFA.set( mxMCF->createInstanceWithContext( rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ), mxContext), uno::UNO_QUERY_THROW );
122cdf0e10cSrcweir 	}
123cdf0e10cSrcweir 
getLogLocation()124cdf0e10cSrcweir 	rtl::OUString getLogLocation() throw (  beans::UnknownPropertyException,  lang::IllegalArgumentException, lang::WrappedTargetException,  uno::Exception )
125cdf0e10cSrcweir 	{
126cdf0e10cSrcweir 		rtl::OUString sLogLocation;
127cdf0e10cSrcweir 		Reference< XPropertySet > pathSettings( mxMCF->createInstanceWithContext( rtl::OUString::createFromAscii( "com.sun.star.comp.framework.PathSettings" ), mxContext), uno::UNO_QUERY_THROW );
128cdf0e10cSrcweir 		pathSettings->getPropertyValue( rtl::OUString::createFromAscii( "Work" ) ) >>= sLogLocation;
129cdf0e10cSrcweir 		sLogLocation = sLogLocation.concat( rtl::OUString::createFromAscii( "/" ) ).concat( rtl::OUString::createFromAscii( "HelperAPI-test.log" ) );
130cdf0e10cSrcweir 		return sLogLocation;
131cdf0e10cSrcweir 	}
getLogLocationWithName(OUString fileName)132cdf0e10cSrcweir 	rtl::OUString getLogLocationWithName( OUString fileName ) throw (  beans::UnknownPropertyException,  lang::IllegalArgumentException, lang::WrappedTargetException,  uno::Exception )
133cdf0e10cSrcweir     {
134cdf0e10cSrcweir         printf("%s\n", getenv("HOME") );
135cdf0e10cSrcweir     	printf("file name %s\n", rtl::OUStringToOString( fileName, RTL_TEXTENCODING_UTF8 ).getStr() );
136cdf0e10cSrcweir 		//rtl::OUString sLogLocation( rtl::OUString::createFromAscii( getenv("HOME") ) );
137cdf0e10cSrcweir 		rtl::OUString sLogLocation;
138cdf0e10cSrcweir 		Reference< XPropertySet > pathSettings( mxMCF->createInstanceWithContext( rtl::OUString::createFromAscii( "com.sun.star.comp.framework.PathSettings" ), mxContext), uno::UNO_QUERY_THROW );
139cdf0e10cSrcweir 		pathSettings->getPropertyValue( rtl::OUString::createFromAscii( "Work" ) ) >>= sLogLocation;
140cdf0e10cSrcweir 		sLogLocation = sLogLocation.concat( rtl::OUString::createFromAscii( "/" ) ).concat( fileName.copy ( 0, fileName.lastIndexOf( EXTN )  ) + rtl::OUString::createFromAscii( ".log" ) );
141cdf0e10cSrcweir 		return sLogLocation;
142cdf0e10cSrcweir     }
143cdf0e10cSrcweir 
init()144cdf0e10cSrcweir 	void init()
145cdf0e10cSrcweir 	{
146cdf0e10cSrcweir 		// blow away previous logs?
147cdf0e10cSrcweir 	}
148cdf0e10cSrcweir 
proccessDocument(const rtl::OUString & sUrl)149cdf0e10cSrcweir 	void proccessDocument( const rtl::OUString& sUrl )
150cdf0e10cSrcweir 	{
151cdf0e10cSrcweir 			if ( !mxSFA->isFolder( sUrl ) && sUrl.endsWithIgnoreAsciiCaseAsciiL( ".xls", 4 ) )
152cdf0e10cSrcweir 
153cdf0e10cSrcweir 			{
154cdf0e10cSrcweir 				try
155cdf0e10cSrcweir 				{
156cdf0e10cSrcweir 					OSL_TRACE( "processing %s",  rtl::OUStringToOString( sUrl, RTL_TEXTENCODING_UTF8 ).getStr() );
157cdf0e10cSrcweir 					printf( "processing %s\n",  rtl::OUStringToOString( sUrl, RTL_TEXTENCODING_UTF8 ).getStr() );
158cdf0e10cSrcweir 					// Loading the wanted document
159cdf0e10cSrcweir 					Sequence< PropertyValue > propertyValues(1);
160cdf0e10cSrcweir 					propertyValues[0].Name = rtl::OUString::createFromAscii( "Hidden" );
161cdf0e10cSrcweir 					propertyValues[0].Value <<= sal_False;
162cdf0e10cSrcweir 
163cdf0e10cSrcweir                     rtl::OUString sfileUrl = convertToURL( sUrl );
164cdf0e10cSrcweir 					printf( "try to get xDoc %s\n", rtl::OUStringToOString( sfileUrl, RTL_TEXTENCODING_UTF8 ).getStr() );
165cdf0e10cSrcweir 					Reference< uno::XInterface > xDoc =
166cdf0e10cSrcweir 						mxCompLoader->loadComponentFromURL( sfileUrl, rtl::OUString::createFromAscii( "_blank" ), 0, propertyValues);
167cdf0e10cSrcweir 					printf( "got xDoc\n" );
168cdf0e10cSrcweir 
169cdf0e10cSrcweir 					OUString logFileURL = convertToURL( getLogLocation() );
170cdf0e10cSrcweir 					try
171cdf0e10cSrcweir 					{
172cdf0e10cSrcweir 						Reference< script::provider::XScriptProviderSupplier > xSupplier( xDoc, uno::UNO_QUERY_THROW ) ;
173cdf0e10cSrcweir 						if ( mxSFA->exists( logFileURL ) )
174cdf0e10cSrcweir 							mxSFA->kill( logFileURL );
175cdf0e10cSrcweir 
176cdf0e10cSrcweir 						printf("try to get the ScriptProvider\n");
177cdf0e10cSrcweir 						Reference< script::provider::XScriptProvider > xProv = xSupplier->getScriptProvider();
178cdf0e10cSrcweir 						printf("get the ScriptProvider\n");
179cdf0e10cSrcweir 						printf("try to get the Script\n");
180cdf0e10cSrcweir                         Reference< script::provider::XScript > xScript;
181cdf0e10cSrcweir 						try
182cdf0e10cSrcweir                         {
183cdf0e10cSrcweir 						    xScript = xProv->getScript( rtl::OUString::createFromAscii( "vnd.sun.star.script:Standard.TestMacros.Main?language=Basic&location=document" ));
184cdf0e10cSrcweir                         } catch ( uno::Exception& e )
185cdf0e10cSrcweir                         {
186cdf0e10cSrcweir                             try
187cdf0e10cSrcweir                             {
188cdf0e10cSrcweir 						        xScript = xProv->getScript( rtl::OUString::createFromAscii( "vnd.sun.star.script:Standard.testMacro.Main?language=Basic&location=document" ));
189cdf0e10cSrcweir                             } catch ( uno::Exception& e2 )
190cdf0e10cSrcweir                             {
191cdf0e10cSrcweir 						        xScript = xProv->getScript( rtl::OUString::createFromAscii( "vnd.sun.star.script:Standard.testMain.Main?language=Basic&location=document" ));
192cdf0e10cSrcweir                             }
193cdf0e10cSrcweir                         }
194cdf0e10cSrcweir 						OSL_TRACE("Got script for doc %s", rtl::OUStringToOString( sUrl, RTL_TEXTENCODING_UTF8 ).getStr() );
195cdf0e10cSrcweir 						printf("get the Script\n");
196cdf0e10cSrcweir 						Sequence< uno::Any > aArgs;
197cdf0e10cSrcweir 						Sequence< sal_Int16 > aOutArgsIndex;
198cdf0e10cSrcweir 						Sequence< uno::Any > aOutArgs;
199cdf0e10cSrcweir 
200cdf0e10cSrcweir 						xScript->invoke(aArgs, aOutArgsIndex, aOutArgs);
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 						OUString fileName = sUrl.copy ( sUrl.lastIndexOf( '/' ) );
203cdf0e10cSrcweir 						OUString newLocation = msOutDirPath + fileName.copy ( 0, fileName.lastIndexOf( EXTN )  ) + rtl::OUString::createFromAscii( ".log" );
204cdf0e10cSrcweir                         try
205cdf0e10cSrcweir                         {
206cdf0e10cSrcweir     						printf("move log file\n");
207cdf0e10cSrcweir 	    					mxSFA->move( logFileURL, newLocation );
208cdf0e10cSrcweir 		    				OSL_TRACE("new logfile location is %s ", rtl::OUStringToOString( newLocation, RTL_TEXTENCODING_UTF8 ).getStr() );
209cdf0e10cSrcweir 			    			printf("moved to new location\n");
210cdf0e10cSrcweir                         }
211cdf0e10cSrcweir                         catch ( uno::Exception& e )
212cdf0e10cSrcweir                         {
213cdf0e10cSrcweir                             logFileURL = convertToURL( getLogLocationWithName( fileName ) );
214cdf0e10cSrcweir     						printf("move log file from %s\n", rtl::OUStringToOString( logFileURL, RTL_TEXTENCODING_UTF8 ).getStr() );
215cdf0e10cSrcweir 	    					mxSFA->move( logFileURL, newLocation );
216cdf0e10cSrcweir 		    				OSL_TRACE("new logfile location is %s ", rtl::OUStringToOString( newLocation, RTL_TEXTENCODING_UTF8 ).getStr() );
217cdf0e10cSrcweir 			    			printf("moved to new location\n");
218cdf0e10cSrcweir                         }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir 					}
221cdf0e10cSrcweir 					catch ( uno::Exception& e )
222cdf0e10cSrcweir 					{
223cdf0e10cSrcweir 						std::cerr << "Caught exception " << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() << std::endl;
224cdf0e10cSrcweir 					}
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 					// interface is supported, otherwise use XComponent.dispose
227cdf0e10cSrcweir 					Reference< util::XCloseable > xCloseable ( xDoc, uno::UNO_QUERY );
228cdf0e10cSrcweir 
229cdf0e10cSrcweir 					if ( xCloseable.is() )
230cdf0e10cSrcweir 					{
231cdf0e10cSrcweir 			    		printf("try to close\n");
232cdf0e10cSrcweir                         // will close application. and only run a test case for 3.0
233cdf0e10cSrcweir                         // maybe it is a bug. yes, it is a bug
234cdf0e10cSrcweir                         // if only one frame and model, click a button which related will colse.
235cdf0e10cSrcweir                         // will make a crash. It related with window listener.
236cdf0e10cSrcweir                         // so, for run all test cases, it should not close the document at this moment.
237cdf0e10cSrcweir 						xCloseable->close(sal_False);
238cdf0e10cSrcweir 			    		printf("closed\n");
239cdf0e10cSrcweir 					}
240cdf0e10cSrcweir 					else
241cdf0e10cSrcweir 					{
242cdf0e10cSrcweir 			    		printf("try to dispose\n");
243cdf0e10cSrcweir 						Reference< XComponent > xComp( xDoc, uno::UNO_QUERY_THROW );
244cdf0e10cSrcweir                         // same as close.
245cdf0e10cSrcweir 						xComp->dispose();
246cdf0e10cSrcweir 			    		printf("disposed\n");
247cdf0e10cSrcweir 					}
248cdf0e10cSrcweir 				}
249cdf0e10cSrcweir 				catch( uno::Exception& e )
250cdf0e10cSrcweir 				{
251cdf0e10cSrcweir 					std::cerr << "Caught exception " << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() << std::endl;
252cdf0e10cSrcweir 				}
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 			}
255cdf0e10cSrcweir 		printf("complete processing %s\n", rtl::OUStringToOString( sUrl, RTL_TEXTENCODING_UTF8 ).getStr() );
256cdf0e10cSrcweir 	}
257cdf0e10cSrcweir 
traverse(const rtl::OUString & sFileDirectory)258cdf0e10cSrcweir 	void traverse( const rtl::OUString& sFileDirectory )
259cdf0e10cSrcweir 	{
260cdf0e10cSrcweir 		rtl::OUString sFileDirectoryURL = convertToURL( sFileDirectory );
261cdf0e10cSrcweir 		if ( !mxSFA->isFolder( sFileDirectoryURL) )
262cdf0e10cSrcweir 		{
263cdf0e10cSrcweir 			throw lang::IllegalArgumentException( rtl::OUString::createFromAscii( "not a directory: ").concat( sFileDirectoryURL ), Reference<uno::XInterface>(), 1 );
264cdf0e10cSrcweir 		}
265cdf0e10cSrcweir 		// Getting all files and directories in the current directory
266cdf0e10cSrcweir 		Sequence<OUString> entries = mxSFA->getFolderContents( sFileDirectoryURL, sal_False );
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 		// Iterating for each file and directory
269cdf0e10cSrcweir         printf( "Entries %d\n", (int)entries.getLength() );
270cdf0e10cSrcweir 		for ( sal_Int32 i = 0; i < entries.getLength(); ++i )
271cdf0e10cSrcweir 		{
272cdf0e10cSrcweir             proccessDocument( entries[ i ] );
273cdf0e10cSrcweir 		}
274cdf0e10cSrcweir 	}
275cdf0e10cSrcweir };
276cdf0e10cSrcweir 
tryDispose(Reference<uno::XInterface> xIF,const char * sComp)277cdf0e10cSrcweir void tryDispose( Reference< uno::XInterface > xIF, const char* sComp )
278cdf0e10cSrcweir {
279cdf0e10cSrcweir 	Reference< lang::XComponent > xComponent( xIF, uno::UNO_QUERY );
280cdf0e10cSrcweir 	if ( xComponent.is() )
281cdf0e10cSrcweir 	{
282cdf0e10cSrcweir 		try
283cdf0e10cSrcweir 		{
284cdf0e10cSrcweir 			xComponent->dispose();
285cdf0e10cSrcweir 		}
286cdf0e10cSrcweir 		catch( uno::Exception& e )
287cdf0e10cSrcweir 		{
288cdf0e10cSrcweir 			std::cerr << "tryDispose caught exception " <<rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() << " while disposing " <<  sComp << std::endl;
289cdf0e10cSrcweir 		}
290cdf0e10cSrcweir 	}
291cdf0e10cSrcweir }
main(int argv,char ** argc)292cdf0e10cSrcweir int main( int argv, char** argc )
293cdf0e10cSrcweir {
294cdf0e10cSrcweir 	if ( !( argv > 2 ) )
295cdf0e10cSrcweir 		return usage( argc[0] );
296cdf0e10cSrcweir 	try
297cdf0e10cSrcweir 	{
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 		OSL_TRACE("Attempting to bootstrap normal");
300cdf0e10cSrcweir 		Reference<XComponentContext> xCC = ::cppu::bootstrap();
301cdf0e10cSrcweir 		Reference<XMultiComponentFactory> xFactory = xCC->getServiceManager();
302cdf0e10cSrcweir 		OSL_TRACE("got servicemanager");
303cdf0e10cSrcweir         std::cout << "got servicemanager" << std::endl;
304cdf0e10cSrcweir 		Reference<XInterface> desktop = xFactory->createInstanceWithContext(
305cdf0e10cSrcweir 		ascii("com.sun.star.frame.Desktop"), xCC);
306cdf0e10cSrcweir 		OSL_TRACE("got desktop");
307cdf0e10cSrcweir         std::cout << "got desktop" << std::endl;
308cdf0e10cSrcweir 		Reference<frame::XComponentLoader> xLoader(desktop, UNO_QUERY_THROW);
309cdf0e10cSrcweir 		TestVBA* dTest = new TestVBA( xCC, xFactory, xLoader, ascii( argc[ 2 ] ) );
310cdf0e10cSrcweir         if ( argv == 4 )
311cdf0e10cSrcweir         {
312cdf0e10cSrcweir             std::cout << "before process" << std::endl;
313cdf0e10cSrcweir             dTest->proccessDocument( ascii( argc[ 3 ] ) );
314cdf0e10cSrcweir             std::cout << "after process" << std::endl;
315cdf0e10cSrcweir         }
316cdf0e10cSrcweir         else
317cdf0e10cSrcweir         {
318cdf0e10cSrcweir 		    dTest->traverse( ascii( argc[ 1 ] ) );
319cdf0e10cSrcweir         }
320cdf0e10cSrcweir 		delete dTest;
321cdf0e10cSrcweir //		tryDispose( xLoader, "desktop" );
322cdf0e10cSrcweir //		tryDispose( xCC, "remote context" );
323cdf0e10cSrcweir 
324cdf0e10cSrcweir 	}
325cdf0e10cSrcweir 	catch( uno::Exception& e )
326cdf0e10cSrcweir 	{
327cdf0e10cSrcweir 		std::cerr << "Caught Exception " << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr() << std::endl;
328cdf0e10cSrcweir 	}
329cdf0e10cSrcweir 
330cdf0e10cSrcweir }
331