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_soltools.hxx"
26 #include "tstMgr.hxx"
27 #include <osl/module.hxx>
28 #include <rtl/tres.hxx>
29
30 #ifndef _SOLTOOLS_TESTSHL_TLOG_HXX_
31 #include "tlog.hxx"
32 #endif
33
34 #ifndef _SOLTOOLS_TESTSHL_TUTIL_HXX_
35 #include "tutil.hxx"
36 #endif
37
38 using namespace rtl;
39
40 // <namespace_tstutl>
41 namespace tstutl {
42
43 typedef void* ( tstFunc )( TestResult* );
44 void test_Entry_Impl( ::osl::Module& oMod, TestResult* oRes );
45
46 // <private_members>
47 struct tstMgr::tstMgr_Impl {
48 ::osl::Module m_tstmodule;
49 sal_Bool m_boom;
50 };
51 // </private_members>
52
53 // <method_initialize>
initialize(sal_Char * modName,sal_Bool boom)54 sal_Bool tstMgr::initialize( sal_Char* modName, sal_Bool boom ) {
55
56 ::rtl::OUString tstMod( ::rtl::OUString::createFromAscii( modName ) );
57 pImpl = new tstMgr_Impl;
58 pImpl->m_boom = boom;
59 return ( pImpl->m_tstmodule.load( tstMod ) );
60 } // <method_initialize>
61
62 // <method_test_Entries>
test_Entries(vector<sal_Char * > entries,sal_Char * logName)63 sal_Bool tstMgr::test_Entries( vector< sal_Char* > entries,
64 sal_Char* logName ) {
65
66 sal_Bool bOK = sal_False;
67 if ( ! entries.empty() ) {
68
69 bOK = sal_True;
70 vector< sal_Char* >::iterator iter = entries.begin();
71
72 tLog log( logName );
73 // open testLog
74 log.open();
75 while ( iter != entries.end() ) {
76 if ( *iter[0] != '#' ) {
77 ::rtl::TestResult oRes( *iter, pImpl->m_boom );
78 test_Entry_Impl( pImpl->m_tstmodule, &oRes );
79 bOK &= oRes.getState();
80 log.writeRes( oRes );
81 }
82 iter++;
83 }
84 log.close();
85 }
86 return ( bOK );
87 } // </method_test_Entries>
88
89 // <method_test_Entry>
test_Entry(sal_Char * entry,sal_Char * logName)90 sal_Bool tstMgr::test_Entry( sal_Char* entry, sal_Char* logName ) {
91
92 tLog log( logName );
93 // open testLog
94 log.open();
95 ::rtl::TestResult oRes( entry, pImpl->m_boom );
96 test_Entry_Impl( pImpl->m_tstmodule, &oRes );
97 log.writeRes( oRes, sal_True );
98 log.close();
99 return ( oRes.getState() );
100 } // </method_test_Entry>
101
102 // <method_test_EntriesFromFile>
test_EntriesFromFile(sal_Char * fName,sal_Char * logName)103 sal_Bool tstMgr::test_EntriesFromFile( sal_Char* fName, sal_Char* logName ) {
104
105 sal_Bool bOK = sal_False;
106 vector< sal_Char* > entries;
107
108 if ( getEntriesFromFile( fName, entries ) ) {
109 sal_Bool bOK = test_Entries( entries, logName );
110
111 vector< sal_Char* >::iterator iter = entries.begin();
112 while ( iter != entries.end() ) {
113 if ( *iter ) {
114 delete [] *iter;
115 }
116 iter++;
117 }
118 }
119 else {
120 bOK = test_Entry( fName );
121 }
122 return ( bOK );
123
124 } // </method_test_EntriesFromFile>
125
126 // <method_cleanup>
cleanup()127 void tstMgr::cleanup() {
128 if ( pImpl ) {
129 delete pImpl;
130 }
131 } // </method_cleanup>
132
133
134 // <function_test_Entry_Impl>
test_Entry_Impl(::osl::Module & oMod,::rtl::TestResult * oRes)135 void test_Entry_Impl( ::osl::Module& oMod, ::rtl::TestResult* oRes ) {
136
137 tstFunc* pFunc; // entry pointer
138 ::rtl::OString entryName( "test_" ); // entryname prefix
139
140 // prefix entryname
141 entryName += oRes->getName();
142
143 // get entry pointer
144 pFunc = (tstFunc*) oMod.getSymbol(
145 ::rtl::OUString::createFromAscii( entryName.getStr() ) );
146
147 if ( pFunc ) {
148 // call entry
149 pFunc( oRes );
150 oRes->end();
151 }
152 else {
153 oRes->end("symbol not found");
154 }
155 // return
156 return;
157
158 } // </function_test_Entry_Impl>
159
160 } // </namespace_tstutl>
161