xref: /AOO41X/main/tools/source/testtoolloader/testtoolloader.cxx (revision 89b56da77b74925c286b3e777681ba8dda16bf41)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_tools.hxx"
26 
27 #include "tools/testtoolloader.hxx"
28 #include <osl/module.h>
29 #include <rtl/logfile.hxx>
30 #include <vos/process.hxx>
31 #include "tools/solar.h"
32 #include "tools/string.hxx"
33 #include "tools/debug.hxx"
34 
35 #include <comphelper/uieventslogger.hxx>
36 
37 using namespace rtl;
38 
39 namespace tools
40 {
41     typedef void ( *pfunc_CreateRemoteControl)();
42     typedef void ( *pfunc_DestroyRemoteControl)();
43 
44     typedef void ( *pfunc_CreateEventLogger)();
45     typedef void ( *pfunc_DestroyEventLogger)();
46 
47 static oslModule    aTestToolModule = 0;
48 // are we to be automated at all?
49 static bool bAutomate = false;
50 static bool bLoggerStarted = false;
51 
52 
GetCommandLineParamCount()53 sal_uInt32 GetCommandLineParamCount()
54 {
55     vos:: OStartupInfo  aStartInfo;
56     return aStartInfo.getCommandArgCount();
57 }
58 
GetCommandLineParam(sal_uInt32 nParam)59 String GetCommandLineParam( sal_uInt32 nParam )
60 {
61     vos:: OStartupInfo  aStartInfo;
62     ::rtl::OUString aParam;
63     vos:: OStartupInfo ::TStartupError eError = aStartInfo.getCommandArg( nParam, aParam );
64     if ( eError == vos:: OStartupInfo ::E_None )
65         return String( aParam );
66     else
67     {
68         DBG_ERROR( "Unable to get CommandLineParam" );
69         return String();
70     }
71 }
72 
thisModule()73 extern "C" { static void SAL_CALL thisModule() {} }
74 
LoadLib()75 void LoadLib()
76 {
77     if ( !aTestToolModule )
78     {
79         aTestToolModule = osl_loadModuleRelative(
80             &thisModule,
81             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(SVLIBRARY("sts"))).pData,
82             SAL_LOADMODULE_GLOBAL );
83     }
84 }
85 
InitTestToolLib()86 void InitTestToolLib()
87 {
88     RTL_LOGFILE_CONTEXT( aLog, "desktop (cd100003) ::InitTestToolLib" );
89 
90     sal_uInt32 i;
91 
92     for ( i = 0 ; i < GetCommandLineParamCount() ; i++ )
93     {
94         if ( GetCommandLineParam( i ).EqualsIgnoreCaseAscii("/enableautomation")
95             || GetCommandLineParam( i ).EqualsIgnoreCaseAscii("-enableautomation"))
96         {
97             bAutomate = true;
98             break;
99         }
100     }
101 
102     if ( bAutomate )
103     {
104         OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "CreateRemoteControl" ));
105 
106         LoadLib();
107         if ( aTestToolModule )
108         {
109             oslGenericFunction pInitFunc = osl_getFunctionSymbol(
110                 aTestToolModule, aFuncName.pData );
111             if ( pInitFunc )
112                 (reinterpret_cast< pfunc_CreateRemoteControl >(pInitFunc))();
113             else
114             {
115                 DBG_ERROR1( "Unable to get Symbol 'CreateRemoteControl' from library %s while loading testtool support.", SVLIBRARY( "sts" ) );
116             }
117         }
118         else
119         {
120             DBG_ERROR1( "Unable to access library %s while loading testtool support.", SVLIBRARY( "sts" ) );
121         }
122     }
123 
124     if ( ::comphelper::UiEventsLogger::isEnabled() )
125     {
126         OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "CreateEventLogger" ));
127 
128         LoadLib();
129         if ( aTestToolModule )
130         {
131             oslGenericFunction pInitFunc = osl_getFunctionSymbol(
132                 aTestToolModule, aFuncName.pData );
133             if ( pInitFunc )
134             {
135                 (reinterpret_cast< pfunc_CreateEventLogger >(pInitFunc))();
136                 bLoggerStarted = sal_True;
137             }
138             else
139             {
140                 DBG_ERROR1( "Unable to get Symbol 'CreateEventLogger' from library %s while loading testtool support.", SVLIBRARY( "sts" ) );
141             }
142         }
143         else
144         {
145             DBG_ERROR1( "Unable to access library %s while loading testtool support.", SVLIBRARY( "sts" ) );
146         }
147     }
148 }
149 
DeInitTestToolLib()150 void DeInitTestToolLib()
151 {
152     if ( aTestToolModule )
153     {
154         if ( bAutomate )
155         {
156             OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "DestroyRemoteControl" ));
157 
158             oslGenericFunction pDeInitFunc = osl_getFunctionSymbol(
159                 aTestToolModule, aFuncName.pData );
160             if ( pDeInitFunc )
161                 (reinterpret_cast< pfunc_DestroyRemoteControl >(pDeInitFunc))();
162         }
163 
164         if ( bLoggerStarted /*::comphelper::UiEventsLogger::isEnabled()*/ )
165         {
166             OUString    aFuncName( RTL_CONSTASCII_USTRINGPARAM( "DestroyEventLogger" ));
167 
168             oslGenericFunction pDeInitFunc = osl_getFunctionSymbol(
169                 aTestToolModule, aFuncName.pData );
170             if ( pDeInitFunc )
171             {
172                 (reinterpret_cast< pfunc_DestroyEventLogger >(pDeInitFunc))();
173                 bLoggerStarted = sal_False;
174             }
175         }
176 
177         osl_unloadModule( aTestToolModule );
178     }
179 }
180 
181 } // namespace tools
182