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