xref: /trunk/main/tools/source/testtoolloader/testtoolloader.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_tools.hxx"
30 
31 #include "tools/testtoolloader.hxx"
32 #include <osl/module.h>
33 #include <rtl/logfile.hxx>
34 #include <vos/process.hxx>
35 #include "tools/solar.h"
36 #include "tools/string.hxx"
37 #include "tools/debug.hxx"
38 
39 #include <comphelper/uieventslogger.hxx>
40 
41 using namespace rtl;
42 
43 namespace tools
44 {
45     typedef void ( *pfunc_CreateRemoteControl)();
46     typedef void ( *pfunc_DestroyRemoteControl)();
47 
48     typedef void ( *pfunc_CreateEventLogger)();
49     typedef void ( *pfunc_DestroyEventLogger)();
50 
51 static oslModule    aTestToolModule = 0;
52 // are we to be automated at all?
53 static bool bAutomate = false;
54 static bool bLoggerStarted = false;
55 
56 
57 sal_uInt32 GetCommandLineParamCount()
58 {
59     vos:: OStartupInfo  aStartInfo;
60     return aStartInfo.getCommandArgCount();
61 }
62 
63 String GetCommandLineParam( sal_uInt32 nParam )
64 {
65     vos:: OStartupInfo  aStartInfo;
66     ::rtl::OUString aParam;
67     vos:: OStartupInfo ::TStartupError eError = aStartInfo.getCommandArg( nParam, aParam );
68     if ( eError == vos:: OStartupInfo ::E_None )
69         return String( aParam );
70     else
71     {
72         DBG_ERROR( "Unable to get CommandLineParam" );
73         return String();
74     }
75 }
76 
77 extern "C" { static void SAL_CALL thisModule() {} }
78 
79 void LoadLib()
80 {
81     if ( !aTestToolModule )
82     {
83         aTestToolModule = osl_loadModuleRelative(
84             &thisModule,
85             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SVLIBRARY("sts"))).pData,
86             SAL_LOADMODULE_GLOBAL );
87     }
88 }
89 
90 void InitTestToolLib()
91 {
92     RTL_LOGFILE_CONTEXT( aLog, "desktop (cd100003) ::InitTestToolLib" );
93 
94     sal_uInt32 i;
95 
96     for ( i = 0 ; i < GetCommandLineParamCount() ; i++ )
97     {
98         if ( GetCommandLineParam( i ).EqualsIgnoreCaseAscii("/enableautomation")
99             || GetCommandLineParam( i ).EqualsIgnoreCaseAscii("-enableautomation"))
100         {
101             bAutomate = true;
102             break;
103         }
104     }
105 
106     if ( bAutomate )
107     {
108         OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "CreateRemoteControl" ));
109 
110         LoadLib();
111         if ( aTestToolModule )
112         {
113             oslGenericFunction pInitFunc = osl_getFunctionSymbol(
114                 aTestToolModule, aFuncName.pData );
115             if ( pInitFunc )
116                 (reinterpret_cast< pfunc_CreateRemoteControl >(pInitFunc))();
117             else
118             {
119                 DBG_ERROR1( "Unable to get Symbol 'CreateRemoteControl' from library %s while loading testtool support.", SVLIBRARY( "sts" ) );
120             }
121         }
122         else
123         {
124             DBG_ERROR1( "Unable to access library %s while loading testtool support.", SVLIBRARY( "sts" ) );
125         }
126     }
127 
128     if ( ::comphelper::UiEventsLogger::isEnabled() )
129     {
130         OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "CreateEventLogger" ));
131 
132         LoadLib();
133         if ( aTestToolModule )
134         {
135             oslGenericFunction pInitFunc = osl_getFunctionSymbol(
136                 aTestToolModule, aFuncName.pData );
137             if ( pInitFunc )
138             {
139                 (reinterpret_cast< pfunc_CreateEventLogger >(pInitFunc))();
140                 bLoggerStarted = sal_True;
141             }
142             else
143             {
144                 DBG_ERROR1( "Unable to get Symbol 'CreateEventLogger' from library %s while loading testtool support.", SVLIBRARY( "sts" ) );
145             }
146         }
147         else
148         {
149             DBG_ERROR1( "Unable to access library %s while loading testtool support.", SVLIBRARY( "sts" ) );
150         }
151     }
152 }
153 
154 void DeInitTestToolLib()
155 {
156     if ( aTestToolModule )
157     {
158         if ( bAutomate )
159         {
160             OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "DestroyRemoteControl" ));
161 
162             oslGenericFunction pDeInitFunc = osl_getFunctionSymbol(
163                 aTestToolModule, aFuncName.pData );
164             if ( pDeInitFunc )
165                 (reinterpret_cast< pfunc_DestroyRemoteControl >(pDeInitFunc))();
166         }
167 
168         if ( bLoggerStarted /*::comphelper::UiEventsLogger::isEnabled()*/ )
169         {
170             OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "DestroyEventLogger" ));
171 
172             oslGenericFunction pDeInitFunc = osl_getFunctionSymbol(
173                 aTestToolModule, aFuncName.pData );
174             if ( pDeInitFunc )
175             {
176                 (reinterpret_cast< pfunc_DestroyEventLogger >(pDeInitFunc))();
177                 bLoggerStarted = sal_False;
178             }
179         }
180 
181         osl_unloadModule( aTestToolModule );
182     }
183 }
184 
185 } // namespace tools
186