xref: /AOO41X/main/cppuhelper/test/testdefaultbootstrapping.pl (revision 7e90fac2499926267c39e1b60f243e5765a5bf84)
1:
2eval 'exec perl -wS $0 ${1+"$@"}'
3    if 0;
4#**************************************************************
5#
6#  Licensed to the Apache Software Foundation (ASF) under one
7#  or more contributor license agreements.  See the NOTICE file
8#  distributed with this work for additional information
9#  regarding copyright ownership.  The ASF licenses this file
10#  to you under the Apache License, Version 2.0 (the
11#  "License"); you may not use this file except in compliance
12#  with the License.  You may obtain a copy of the License at
13#
14#    http://www.apache.org/licenses/LICENSE-2.0
15#
16#  Unless required by applicable law or agreed to in writing,
17#  software distributed under the License is distributed on an
18#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19#  KIND, either express or implied.  See the License for the
20#  specific language governing permissions and limitations
21#  under the License.
22#
23#**************************************************************
24
25
26
27#
28# deliver.pl - copy from module output tree to solver
29#
30
31my $progname = "testdefaultbootstrapping";
32my $defExeExt;
33
34if ($ENV{GUI} eq "WNT") {
35    %services = (
36                 'com.sun.star.uno.NamingService'               => 'namingservice.uno.dll',
37                 'com.sun.star.reflection.CoreReflection'       => 'reflection.uno.dll',
38                 'com.sun.star.script.InvocationAdapterFactory' => 'invocadapt.uno.dll',
39                 );
40
41    $defExeExt = ".exe";
42
43}
44else {
45    %services = (
46                 'com.sun.star.uno.NamingService'               => 'namingservice.uno.so',
47                 'com.sun.star.reflection.CoreReflection'       => 'reflection.uno.so',
48                 'com.sun.star.script.InvocationAdapterFactory' => 'invocadapt.uno.so'
49                 );
50
51    $defExeExt = "";
52}
53
54sub extendProgName($) {
55    my $_extension = shift;
56    my $_result;
57
58    if ($ENV{GUI} eq "WNT") {
59        $_result = $progname . $_extension;
60    }
61    else {
62        $_result = $ENV{PWD} . "/" . $progname . $_extension;
63    }
64
65    return $_result;
66}
67
68
69sub rmDefRDB() {
70    unlink $progname . "_services.rdb";
71}
72
73
74sub unregisterService($){
75    my $service_name = shift;
76
77    my $rdb_name = $service_name . '.rdb';
78
79    unlink $rdb_name;
80
81    return 1;
82}
83
84sub testForServices($$$) {
85    my $_services = shift;
86    my $_pars     = shift;
87    my $_testexe  = shift;
88
89
90#   my $_rc = system 'echo', $_testexe, @{$_services}, $_pars;
91    my $_rc = system $_testexe, @{$_services}, $_pars;
92
93    return $_rc >> 8;
94}
95
96
97sub registerService($$){
98    my $service_lib  = shift;
99    my $rdb_name = shift;
100
101#   system 'echo', "regcomp -register -r " . $rdb_name . " -c $service_lib";
102    my $rc = system "regcomp -register -r " . $rdb_name . " -c $service_lib";
103
104
105    return ! ( $rc >> 8 );
106}
107
108
109
110my $state = 1;
111my @allservices;
112my $allservices_rdbs="";
113my $rc;
114my $comment;
115my $testexe;
116
117
118sub registerServices() {
119    use Cwd;
120
121    # ensure that services can not be instantiated
122    foreach $service ( keys %services ) {
123        # ensure that the current service is not reachable
124        unregisterService($service);
125        $rc = !testForServices([$service], "", $testexe);
126        if(!$rc) {
127            $comment = $comment . "\tcouldn't unregister service " . $service . "\n";
128            $state = 0;
129        }
130
131
132        # register the service and ensure that it is reachable
133        $rc = registerService($services{$service}, $service . '.rdb');
134        if(!$rc) {
135            $comment = $comment . "\tcouldn't register service " . $service . "\n";
136            $state = 0;
137        }
138
139        $rc = testForServices([$service], "-env:UNO_SERVICES=" . $service . ".rdb", $testexe);
140        if(!$rc) {
141            $comment = $comment . "\tcouldn't reach service " . $service . "\n";
142            $state = 0;
143        }
144
145        # memorize all services
146        if (length($allservices_rdbs)) {
147            $allservices_rdbs = $allservices_rdbs . " ";
148        }
149        $allservices_rdbs = $allservices_rdbs . "file://" . getcwd() . "/" . $service . ".rdb";
150        push @allservices, $service;
151    }
152}
153
154sub testIndirection() {
155    #test indirection
156    $rc = testForServices(['com.sun.star.uno.NamingService'], '-env:UNO_SERVICES=${testrc:Tests:TestKey1}', $testexe);
157    if (!$rc) {
158        $comment = $comment . "\tindirection test not passed\n";
159        $state = 0;
160    }
161}
162
163
164sub testBeneathExe() {
165    my $service = 'com.sun.star.reflection.CoreReflection';
166    my $_testexe;
167
168    my @_exes = (extendProgName(".exe"),
169                 extendProgName(".Exe"),
170                 extendProgName(".bin"),
171                 extendProgName(".Bin"));
172
173    foreach $_testexe ( @_exes ) {
174        #test rdb found beneath executable
175        registerService($services{$service}, $progname . "_services.rdb");
176        my $_rc = testForServices([$service], "", $_testexe);
177        if (!$_rc) {
178            $comment = $comment . "\tbeneath executable test not passed: " . $_testexe . "\n";
179            $state = 0;
180        }
181    }
182}
183
184sub testBeneathLib_rdb() {
185    my $_service = 'com.sun.star.uno.NamingService';
186
187    use UNO;
188
189    my $_rdb_name;
190
191    if ($ENV{GUI} eq "WNT") {
192        $_rdb_name = "UNO" . "_services.rdb";
193    }
194    else {
195        $_rdb_name = "../lib/UNO" . "_services.rdb";
196    }
197
198    registerService($services{$_service}, $_rdb_name);
199    my $_rc = UNO::tryService($_service);
200    if (!$_rc) {
201        $comment = $comment . "\tbeneath lib test not passed\n";
202        $state = 0;
203    }
204    unlink $_rdb_name;
205}
206
207sub testBeneathLib_rc() {
208    my $_service = 'com.sun.star.uno.NamingService';
209
210    use UNO;
211
212    my $_rc_name;
213
214    if ($ENV{GUI} eq "WNT") {
215        $_rc_name = "UNO.ini";
216    }
217    else {
218        $_rc_name = "../lib/UNOrc";
219    }
220
221    my $_rdb_name = "../lib/test.rdb";
222
223    my $_handle;
224    open $_handle, ">" . $_rc_name;
225    print $_handle "UNO_SERVICES=" . $_rdb_name . "\n";
226    close $_handle;
227
228    registerService($services{$_service}, $_rdb_name);
229    my $_rc = UNO::tryService($_service);
230    if (!$_rc) {
231        $comment = $comment . "\tbeneath lib rc test not passed\n";
232        $state = 0;
233    }
234    unlink $_rdb_name;
235    unlink $_rc_name;
236}
237
238sub testAllAvailable() {
239    # test that all services are reachable through different rdbs
240    # change the directory to ensure, that all paths become expanded
241    chdir "..";
242
243    $rc = testForServices(\@allservices, "-env:UNO_SERVICES=" . $allservices_rdbs, $testexe);
244    if (!$rc) {
245        $comment = $comment . "\tmulti rdb test not passed\n";
246        $state = 0;
247    }
248}
249
250$testexe = extendProgName($defExeExt);
251
252rmDefRDB();
253registerServices();
254#print "alls:", @allservices, $allservices_rdbs, "\n";
255
256testIndirection();
257testBeneathExe();
258testBeneathLib_rc();
259testBeneathLib_rdb();
260testAllAvailable();
261
262print "**************************\n";
263if($state) {
264    print "****** tests passed ******\n";
265}
266else {
267    print "**** tests NOT passed ****\n";
268    print "Commnent:\n", $comment, "\n";
269}
270print "**************************\n";
271
272
273
274