xref: /trunk/main/stoc/test/testregistry.cxx (revision 647a425c)
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_stoc.hxx"
26 
27 #include <stdio.h>
28 #include <stdlib.h>
29 #include <string.h>
30 
31 #include <sal/main.h>
32 #include <osl/module.hxx>
33 #include <osl/diagnose.h>
34 #include <osl/process.h>
35 #include <registry/registry.hxx>
36 
37 
38 #include <com/sun/star/registry/XSimpleRegistry.hpp>
39 #include <com/sun/star/lang/XServiceInfo.hpp>
40 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
41 #include <com/sun/star/beans/XPropertySet.hpp>
42 #include <cppuhelper/factory.hxx>
43 #include <cppuhelper/bootstrap.hxx>
44 #include <cppuhelper/servicefactory.hxx>
45 
46 #include <com/sun/star/lang/XComponent.hpp>
47 
48 #if defined ( UNX )
49 #include <limits.h>
50 #define _MAX_PATH PATH_MAX
51 #endif
52 
53 using namespace com::sun::star;
54 using namespace com::sun::star::uno;
55 using namespace com::sun::star::registry;
56 using namespace com::sun::star::lang;
57 using namespace com::sun::star::beans;
58 using namespace rtl;
59 using namespace osl;
60 
61 #if OSL_DEBUG_LEVEL > 0
62 #define TEST_ENSHURE(c, m)   OSL_ENSURE(c, m)
63 #else
64 #define TEST_ENSHURE(c, m)   OSL_VERIFY(c)
65 #endif
66 
67 namespace stoc_impreg
68 {
69 void SAL_CALL mergeKeys(
70     Reference< registry::XRegistryKey > const & xDest,
71     Reference< registry::XRegistryKey > const & xSource )
72     SAL_THROW( (registry::InvalidRegistryException, registry::MergeConflictException) );
73 }
mergeKeys(Reference<registry::XSimpleRegistry> const & xDest,OUString const & rBaseNode,OUString const & rURL)74 static void mergeKeys(
75     Reference< registry::XSimpleRegistry > const & xDest,
76     OUString const & rBaseNode,
77     OUString const & rURL )
78     SAL_THROW( (registry::InvalidRegistryException, registry::MergeConflictException) )
79 {
80     Reference< registry::XRegistryKey > xDestRoot( xDest->getRootKey() );
81     Reference< registry::XRegistryKey > xDestKey;
82     if (rBaseNode.getLength())
83     {
84         xDestKey = xDestRoot->createKey( rBaseNode );
85         xDestRoot->closeKey();
86     }
87     else
88     {
89         xDestKey = xDestRoot;
90     }
91     Reference< registry::XSimpleRegistry > xSimReg( ::cppu::createSimpleRegistry() );
92     xSimReg->open( rURL, sal_True, sal_False );
93     OSL_ASSERT( xSimReg->isValid() );
94     Reference< registry::XRegistryKey > xSourceKey( xSimReg->getRootKey() );
95     ::stoc_impreg::mergeKeys( xDestKey, xSourceKey );
96     xSourceKey->closeKey();
97     xSimReg->close();
98     xDestKey->closeKey();
99 }
100 
101 
102 OString userRegEnv("STAR_USER_REGISTRY=");
103 
getExePath()104 OUString getExePath()
105 {
106 	OUString 		exe;
107     OSL_VERIFY( osl_getExecutableFile( &exe.pData ) == osl_Process_E_None);
108 #if defined(WIN32) || defined(__OS2__) || defined(WNT)
109 	exe = exe.copy(0, exe.getLength() - 16);
110 #else
111 	exe = exe.copy(0, exe.getLength() - 12);
112 #endif
113 	return exe;
114 }
115 
setStarUserRegistry()116 void setStarUserRegistry()
117 {
118 	Registry *myRegistry = new Registry();
119 
120 	RegistryKey rootKey, rKey, rKey2;
121 
122 	OUString userReg = getExePath();
123 	userReg += OUString::createFromAscii("user.rdb");
124 	if(myRegistry->open(userReg, REG_READWRITE))
125 	{
126 		TEST_ENSHURE(!myRegistry->create(userReg), "setStarUserRegistry error 1");
127 	}
128 
129 	TEST_ENSHURE(!myRegistry->close(), "setStarUserRegistry error 9");
130 	delete myRegistry;
131 
132 	userRegEnv += OUStringToOString(userReg, RTL_TEXTENCODING_ASCII_US);
133 	putenv((char *)userRegEnv.getStr());
134 }
135 
setLinkInDefaultRegistry(const OUString & linkName,const OUString & linkTarget)136 void setLinkInDefaultRegistry(const OUString& linkName, const OUString& linkTarget)
137 {
138 	Registry *myRegistry = new Registry();
139 
140 	RegistryKey rootKey;
141 
142 	OUString appReg = getExePath();
143 	appReg += OUString::createFromAscii("stoctest.rdb");
144 
145 	TEST_ENSHURE(!myRegistry->open(appReg, REG_READWRITE), "setLinkInDefaultRegistry error 1");
146 	TEST_ENSHURE(!myRegistry->openRootKey(rootKey), "setLinkInDefaultRegistry error 2");
147 
148 	TEST_ENSHURE(!rootKey.createLink(linkName, linkTarget), "setLinkInDefaultRegistry error 3");
149 
150 	TEST_ENSHURE(!rootKey.closeKey(),  "setLinkInDefaultRegistry error 4");
151 	TEST_ENSHURE(!myRegistry->close(), "setLinkInDefaultRegistry error 5");
152 
153 	delete myRegistry;
154 }
155 
156 
test_SimpleRegistry(OUString const & testreg,OUString const & testreg2,bool bMergeDifferently=true)157 void test_SimpleRegistry(
158     OUString const & testreg,
159     OUString const & testreg2,
160     bool bMergeDifferently = true )
161 {
162 	Reference<XInterface> xIFace;
163 	Module module;
164 
165 	OUString dllName(
166         RTL_CONSTASCII_USTRINGPARAM("simplereg.uno" SAL_DLLEXTENSION) );
167 
168 	if (module.load(dllName))
169 	{
170 		// try to get provider from module
171 		component_getFactoryFunc pCompFactoryFunc = (component_getFactoryFunc)
172 			module.getFunctionSymbol( OUString::createFromAscii(COMPONENT_GETFACTORY) );
173 
174 		if (pCompFactoryFunc)
175 		{
176 			XSingleServiceFactory * pRet = (XSingleServiceFactory *)
177                 (*pCompFactoryFunc)(
178                     "com.sun.star.comp.stoc.SimpleRegistry", 0, 0 );
179 			if (pRet)
180 			{
181 				xIFace = pRet;
182 				pRet->release();
183 			}
184 		}
185 	}
186 
187 	TEST_ENSHURE( xIFace.is(), "test_SimpleRegistry error1");
188 
189 	Reference<XSingleServiceFactory> xFactory( Reference<XSingleServiceFactory>::query(xIFace) );
190  	xIFace.clear();
191 
192 	TEST_ENSHURE( xFactory.is(), "testloader error11");
193 
194 	Reference<XInterface> xIFace2 = xFactory->createInstance();
195 	xFactory.clear();
196 
197 	TEST_ENSHURE( xIFace2.is(), "testloader error12");
198 
199 	Reference<XServiceInfo> xServInfo( Reference<XServiceInfo>::query(xIFace2) );
200 
201 	TEST_ENSHURE( xServInfo.is(), "test_SimpleRegistry error2");
202 
203 	TEST_ENSHURE( xServInfo->getImplementationName().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.comp.stoc.SimpleRegistry") ), "test_SimpleRegistry error3");
204 	TEST_ENSHURE( xServInfo->supportsService(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry"))), "test_SimpleRegistry error4");
205 	TEST_ENSHURE( xServInfo->getSupportedServiceNames().getLength() == 1, "test_SimpleRegistry error5");
206 	xServInfo.clear();
207 
208 	Reference<XSimpleRegistry> xReg( Reference<XSimpleRegistry>::query(xIFace2) );
209 	xIFace2.clear();
210 
211 	TEST_ENSHURE( xReg.is(), "test_SimpleRegistry error6");
212 
213 	try
214 	{
215 		xReg->open(testreg, sal_False, sal_True);
216 
217 		TEST_ENSHURE( xReg->isValid() != sal_False, "test_SimpleRegistry error 7" );
218 		TEST_ENSHURE( xReg->isReadOnly() == sal_False, "test_SimpleRegistry error 8" );
219 
220 		Reference<XRegistryKey> xRootKey(xReg->getRootKey());
221 		TEST_ENSHURE( xRootKey->isValid(), "test_SimpleRegistry error 9" );
222 
223 		Reference<XRegistryKey> xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstKey") ));
224 
225 		Reference<XRegistryKey> xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstSubKey") ));
226 		xSubKey->setLongValue(123456789);
227 
228 		xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondSubKey") ));
229 		xSubKey->setAsciiValue(OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein acsii value") ));
230 
231 		xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("ThirdSubKey") ));
232 		xSubKey->setStringValue(OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein unicode value") ));
233 
234 		xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FourthSubKey") ));
235 		Sequence<sal_Int8> aSeq((sal_Int8*)"ich bin ein binary value", 25);
236 		xSubKey->setBinaryValue(aSeq);
237 
238 		Sequence<OUString> seqNames = xKey->getKeyNames();
239 		Sequence< Reference<XRegistryKey> > seqKeys = xKey->openKeys();
240 
241 		OUString name;
242 		for (sal_Int32 i=0; i < seqNames.getLength(); i++)
243 		{
244 			name = seqNames.getArray()[i];
245 			xSubKey = seqKeys.getArray()[i];
246 
247 			if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/FirstSubKey") ))
248 			{
249 				TEST_ENSHURE( xSubKey->getLongValue() == 123456789,
250 							"test_SimpleRegistry error 10" );
251 			} else
252 			if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/SecondSubKey") ))
253 			{
254 				TEST_ENSHURE( xSubKey->getAsciiValue() == OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein acsii value") ),
255 							"test_SimpleRegistry error 11" );
256 			} else
257 			if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/ThirdSubKey") ))
258 			{
259 				TEST_ENSHURE( xSubKey->getStringValue() == OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein unicode value") ),
260 							"test_SimpleRegistry error 12" );
261 			} else
262 			if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/FourthSubKey") ))
263 			{
264 				Sequence<sal_Int8> seqByte = xSubKey->getBinaryValue();
265 				TEST_ENSHURE(!strcmp(((const char*)seqByte.getArray()), "ich bin ein binary value"),
266 							"test_SimpleRegistry error 13" );
267 			}
268 
269 			seqKeys.getArray()[i]->closeKey();
270 		}
271 
272 		xKey->closeKey();
273 
274 		xRootKey->deleteKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstKey") ));
275 		xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondFirstKey" )));
276 
277 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondKey") ));
278 		sal_Int32 pLongs[3] = {123, 456, 789};
279 		Sequence<sal_Int32> seqLongs(pLongs, 3);
280 		xKey->setLongListValue(seqLongs);
281 
282 		Sequence<sal_Int32> seqLongs2;
283 		seqLongs2 = xKey->getLongListValue();
284 		TEST_ENSHURE( seqLongs.getLength() == 3, "test_SimpleRegistry error 14" );
285 		TEST_ENSHURE( seqLongs.getArray()[0] == 123, "test_SimpleRegistry error 15" );
286 		TEST_ENSHURE( seqLongs.getArray()[1] == 456, "test_SimpleRegistry error 16" );
287 		TEST_ENSHURE( seqLongs.getArray()[2] == 789, "test_SimpleRegistry error 17" );
288 
289 
290 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("ThirdKey") ));
291 		OUString pAscii[3];
292 		pAscii[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") );
293 		pAscii[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") );
294 		pAscii[2] = OUString( RTL_CONSTASCII_USTRINGPARAM("ich") );
295 
296 		Sequence<OUString> seqAscii(pAscii, 3);
297 		xKey->setAsciiListValue(seqAscii);
298 
299 		Sequence<OUString> seqAscii2;
300 		seqAscii2 = xKey->getAsciiListValue();
301 		TEST_ENSHURE( seqAscii2.getLength() == 3, "test_SimpleRegistry error 18" );
302 		TEST_ENSHURE( seqAscii2.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") ), "test_SimpleRegistry error 19");
303 		TEST_ENSHURE( seqAscii2.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") ), "test_SimpleRegistry error 20");
304 		TEST_ENSHURE( seqAscii2.getArray()[2] == OUString( RTL_CONSTASCII_USTRINGPARAM("ich") ), "test_SimpleRegistry error 21");
305 
306 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FourthKey") ));
307 		OUString pUnicode[3];
308 		pUnicode[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") );
309 		pUnicode[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") );
310 		pUnicode[2] = OUString( RTL_CONSTASCII_USTRINGPARAM("ich als unicode") );
311 
312 		Sequence<OUString> seqUnicode(pUnicode, 3);
313 		xKey->setStringListValue(seqUnicode);
314 
315 		Sequence<OUString> seqUnicode2;
316 		seqUnicode2 = xKey->getStringListValue();
317 		TEST_ENSHURE( seqUnicode2.getLength() == 3, "test_SimpleRegistry error 22" );
318 		TEST_ENSHURE( seqUnicode2.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") ), "test_SimpleRegistry error 23");
319 		TEST_ENSHURE( seqUnicode2.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") ), "test_SimpleRegistry error 24");
320 		TEST_ENSHURE( seqUnicode2.getArray()[2] == OUString( RTL_CONSTASCII_USTRINGPARAM("ich als unicode") ), "test_SimpleRegistry error 25");
321 
322 
323 		xReg->open(testreg2, sal_False, sal_True);
324 		TEST_ENSHURE( xReg->isValid() != sal_False, "test_SimpleRegistry error 25" );
325 		xRootKey = xReg->getRootKey();
326 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("ThirdKey/FirstSubKey/WithSubSubKey") ));
327 		xKey->closeKey();
328 		TEST_ENSHURE(
329             xRootKey->createLink(
330                 OUString( RTL_CONSTASCII_USTRINGPARAM("LinkTest") ),
331                 OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") )),
332             "test_SimpleRegistry error 1212" );
333 		xRootKey->closeKey();
334 		xReg->close();
335 
336 		xReg->open(testreg, sal_False, sal_False);
337 		TEST_ENSHURE( xReg->isValid() != sal_False, "test_SimpleRegistry error 26" );
338 
339         if (bMergeDifferently)
340         {
341             mergeKeys(
342                 xReg,
343                 OUString(),
344                 testreg2 );
345         }
346         else
347         {
348             xReg->mergeKey(OUString(), testreg2);
349         }
350 
351 		xRootKey = xReg->getRootKey();
352         xKey = xRootKey->openKey( OUString( RTL_CONSTASCII_USTRINGPARAM("LinkTest") ) );
353         TEST_ENSHURE(
354             xKey.is() && xKey->isValid() &&
355             xKey->getKeyName().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") ),
356             "test_SimpleRegistry error 1213" );
357         xKey->closeKey();
358         TEST_ENSHURE(
359             xRootKey->getKeyType( OUString( RTL_CONSTASCII_USTRINGPARAM("LinkTest") ) ) ==
360             registry::RegistryKeyType_LINK,
361             "test_SimpleRegistry error 1214" );
362 
363 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstKey/SecondSubKey") ));
364 		TEST_ENSHURE( !xKey.is(), "test_SimpleRegistry error 27" );
365 
366 		// Test Links
367 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FifthKey") ));
368 		xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyFirstLink") ),
369 						 OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey") ));
370 
371 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink") ));
372 		TEST_ENSHURE( xKey->isValid(), "test_SimpleRegistry error 27" );
373 		TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey") ), "test_SimpleRegistry error 28" );
374 
375 		xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ),
376 						 OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ));
377 
378 		TEST_ENSHURE( xKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ))
379 					 == OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ), "test_SimpleRegistry error 29" );
380 
381 		try
382 		{
383 			TEST_ENSHURE( xKey->getResolvedName(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink/BlaBlaBla") ))
384 						 == OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink/BlaBlaBla") ), "test_SimpleRegistry error 30" );
385 		}
386 		catch(InvalidRegistryException&)
387 		{
388 		}
389 
390 		xRootKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ),
391 							 OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/MyThirdLink") ));
392 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SixthKey") ));
393 		xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyThirdLink") ),
394 						 OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ));
395 
396 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/SixthSubKey") ));
397 
398 		try
399 		{
400 			xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
401 		}
402 		catch(InvalidRegistryException&)
403 		{
404 		}
405 
406 		TEST_ENSHURE( xRootKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ))
407 					 == OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ), "test_SimpleRegistry error 31" );
408 
409 		xRootKey->deleteLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
410 
411 		xRootKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ),
412 							 OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") ));
413 
414 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SixthKey") ));
415 		seqNames = xKey->getKeyNames();
416 		seqKeys = xKey->openKeys();
417 
418 		TEST_ENSHURE( seqNames.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/SixthSubKey") ),
419 					  "test_SimpleRegistry error 32" );
420 		TEST_ENSHURE( seqNames.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/MyThirdLink") ),
421 					  "test_SimpleRegistry error 33" );
422 
423 		TEST_ENSHURE( seqKeys.getArray()[0]->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/SixthSubKey") ),
424 					  "test_SimpleRegistry error 34" );
425 		TEST_ENSHURE( seqKeys.getArray()[1]->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") ),
426 					  "test_SimpleRegistry error 35" );
427 
428 		xRootKey->deleteLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ));
429 		xRootKey->closeKey();
430 	}
431 	catch(InvalidRegistryException&)
432 	{
433 		TEST_ENSHURE(0, "exception InvalidRegistryExcption raised while doing test_SimpleRegistry");
434 	}
435 	catch(InvalidValueException&)
436 	{
437 		TEST_ENSHURE(0, "exception InvalidValueExcption raised while doing test_SimpleRegistry()");
438 	}
439 
440 	xReg.clear();
441 
442 	printf("Test SimpleRegistry, OK!\n");
443 }
444 
445 
test_DefaultRegistry(OUString const & testreg,OUString const & testreg2,bool bMergeDifferently=false)446 void test_DefaultRegistry(
447     OUString const & testreg,
448     OUString const & testreg2,
449     bool bMergeDifferently = false )
450 {
451 	// Test NestedRegistry
452 	OUString exePath( getExePath() );
453 	OUString userRdb(exePath);
454 	OUString applicatRdb(exePath);
455 
456 	userRdb += OUString::createFromAscii("user.rdb");
457 	applicatRdb += OUString::createFromAscii("stoctest.rdb");
458 
459 	Reference < XMultiServiceFactory > rSMgr  = ::cppu::createRegistryServiceFactory( userRdb, applicatRdb, sal_False, OUString());
460 																					  //OUString::createFromAscii("//./e:/src596/stoc/wntmsci3/bin") );
461 
462 	Reference< XPropertySet > xPropSet( rSMgr, UNO_QUERY);
463 	TEST_ENSHURE( xPropSet.is(), "test_DefaultRegistry error0");
464 
465 	Any	aPropertyAny( xPropSet->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("Registry")) ) );
466 	TEST_ENSHURE( aPropertyAny.hasValue(), "test_DefaultRegistry error1");
467 
468 	Reference<XSimpleRegistry> xReg;
469 	aPropertyAny >>= xReg;
470 	TEST_ENSHURE( xReg.is(), "test_DefaultRegistry error1a");
471 
472 	Reference<XServiceInfo> xServInfo( Reference<XServiceInfo>::query(xReg) );
473 
474 	TEST_ENSHURE( xServInfo.is(), "test_DefaultRegistry error2");
475 
476 	TEST_ENSHURE( xServInfo->getImplementationName() == OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.NestedRegistry") ), "test_DefualtRegistry error3");
477 	TEST_ENSHURE( xServInfo->supportsService(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.NestedRegistry") )), "test_DefaultRegistry error4");
478 	TEST_ENSHURE( xServInfo->getSupportedServiceNames().getLength() == 1, "test_DefaultRegistry error5");
479 	xServInfo.clear();
480 
481 	TEST_ENSHURE( xReg.is(), "test_DefaultRegistry error6");
482 
483 	try
484 	{
485 		Reference<XRegistryKey> xRootKey(xReg->getRootKey());
486 
487 		Reference<XRegistryKey> xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/UCR/com/sun/star/registry/XSimpleRegistry") ));
488 
489 		TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/UCR/com/sun/star/registry/XSimpleRegistry") ),
490 					 "test_DefaultRegistry error 7" );
491 
492 		if (bMergeDifferently)
493         {
494             mergeKeys(
495                 xReg,
496                 OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ),
497                 testreg );
498         }
499         else
500         {
501             xReg->mergeKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ), testreg );
502         }
503 
504 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test/ThirdKey/FirstSubKey/WithSubSubKey") ));
505 		if (xKey.is())
506 			xKey->setLongValue(123456789);
507 
508 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test/ThirdKey/FirstSubKey") ));
509 		if (xKey.is())
510 		{
511 			xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondSubSubKey") ));
512 
513 			Sequence<OUString> seqNames = xKey->getKeyNames();
514 
515 			TEST_ENSHURE( seqNames.getLength() == 2, "test_DefaultRegistry error 8" );
516 		}
517 
518 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey") ));
519 		if (xKey.is())
520 		{
521 			RegistryValueType valueType = xKey->getValueType();
522 			TEST_ENSHURE( valueType == RegistryValueType_ASCIILIST, "test_DefaultRegistry error 9" );
523 
524 			Sequence<OUString> seqValue = xKey->getAsciiListValue();
525 
526 			TEST_ENSHURE( seqValue.getLength() == 3, "test_DefaultRegistry error 10" );
527 			TEST_ENSHURE( seqValue.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") ),
528 						  "test_DefaultRegistry error 11" );
529 			TEST_ENSHURE( seqValue.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") ),
530 						  "test_DefaultRegistry error 12" );
531 			TEST_ENSHURE( seqValue.getArray()[2] == OUString( RTL_CONSTASCII_USTRINGPARAM("ich") ),
532 						  "test_DefaultRegistry error 13" );
533 
534 			Sequence<sal_Int32> seqLong(3);
535 			seqLong.getArray()[0] = 1234;
536 			seqLong.getArray()[1] = 4567;
537 			seqLong.getArray()[2] = 7890;
538 
539 			xKey->setLongListValue(seqLong);
540 
541 			Sequence<sal_Int32> seqLongValue = xKey->getLongListValue();
542 
543 			TEST_ENSHURE( seqLongValue.getLength() == 3, "test_DefaultRegistry error 14" );
544 			TEST_ENSHURE( seqLongValue.getArray()[0] == 1234, "test_DefaultRegistry error 15" );
545 			TEST_ENSHURE( seqLongValue.getArray()[1] == 4567, "test_DefaultRegistry error 16" );
546 			TEST_ENSHURE( seqLongValue.getArray()[2] == 7890, "test_DefaultRegistry error 17" );
547 		}
548 
549 		// Test Links
550 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey") ));
551 		xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyFirstLink") ),
552 						 OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey") ));
553 
554 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink") ));
555 		TEST_ENSHURE( xKey->isValid(), "test_DefaultRegistry error 18" );
556 		TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey") ),
557 					  "test_DefaultRegistry error 19" );
558 
559 		xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ),
560 						 OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ));
561 
562 		TEST_ENSHURE( xKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ))
563 					 == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ),
564 					  "test_DefaultRegistry error 20" );
565 
566 		try
567 		{
568 			TEST_ENSHURE( xKey->getResolvedName(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink/BlaBlaBla") ))
569 						  == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink/BlaBlaBla") ),
570 						  "test_DefaultRegistry error 21" );
571 		}
572 		catch(InvalidRegistryException&)
573 		{
574 		}
575 
576 		xRootKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ),
577 							 OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/SixthKey/MyThirdLink") ));
578 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/SixthKey") ));
579 		xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyThirdLink") ),
580 						 OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ));
581 
582 		try
583 		{
584 			xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
585 		}
586 		catch(InvalidRegistryException&)
587 		{
588 			printf("test InvalidRegistryExcption OK!\n");
589 		}
590 
591 		TEST_ENSHURE( xRootKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ))
592 					 == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ),
593 					  "test_DefaultRegistry error 22" );
594 
595 		xRootKey->deleteLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
596 
597 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/DefaultLink/SecondSubSubKey") ));
598 		if (xKey.is())
599 		{
600 			TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey/SecondSubSubKey") ), "test_DefaultRegistry error 23" );
601 		}
602 		xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/DefaultLink/ThirdSubSubKey") ));
603 		if (xKey.is())
604 		{
605 			TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey/ThirdSubSubKey") ),
606 						  "test_DefaultRegistry error 24" );
607 		}
608 
609 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ));
610 		TEST_ENSHURE( xKey->isValid(), "test_DefaultRegistry error 25" );
611 
612 		xRootKey->deleteKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ));
613 
614         if (bMergeDifferently)
615         {
616             mergeKeys(
617                 xReg,
618                 OUString( RTL_CONSTASCII_USTRINGPARAM("AllFromTestreg2") ),
619                 testreg2);
620         }
621         else
622         {
623             xReg->mergeKey(OUString( RTL_CONSTASCII_USTRINGPARAM("AllFromTestreg2") ),
624                            testreg2);
625         }
626 
627 		xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/AllFromTestreg2/ThirdKey/FirstSubKey") ));
628 		if (xKey.is())
629 		{
630 			xRootKey->deleteKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/AllFromTestreg2") ));
631 		}
632 
633 	}
634 	catch(InvalidRegistryException&)
635 	{
636 		TEST_ENSHURE(0, "exception InvalidRegistryExcption raised while doing test_DefaultRegistry");
637 	}
638 	catch(InvalidValueException&)
639 	{
640 		TEST_ENSHURE(0, "exception InvalidValueExcption raised while doing test_DefaultRegistry()");
641 	}
642 	try
643     {
644 		xReg->close();
645     }
646 	catch(InvalidRegistryException& e)
647 	{
648         (void)e;
649 		TEST_ENSHURE(0, OUStringToOString(e.Message,RTL_TEXTENCODING_ASCII_US).getStr());
650 	}
651 
652 
653 	xReg.clear();
654 
655 	// shutdown
656 	Reference< ::com::sun::star::lang::XComponent > xComp( rSMgr, UNO_QUERY );
657 	OSL_ENSURE( xComp.is(), "### serivce manager has to implement XComponent!" );
658 	xComp->dispose();
659 
660 	printf("Test DefaultRegistry, OK!\n");
661 }
662 
663 
SAL_IMPLEMENT_MAIN()664 SAL_IMPLEMENT_MAIN()
665 {
666 //	setStarUserRegistry();
667  	setLinkInDefaultRegistry(OUString::createFromAscii("/Test/DefaultLink"),
668  							 OUString::createFromAscii("/Test/FifthKey/MyFirstLink"));
669 
670     OUString reg1( RTL_CONSTASCII_USTRINGPARAM("testreg1.rdb") );
671     OUString reg2( RTL_CONSTASCII_USTRINGPARAM("testreg2.rdb") );
672     OUString areg1( RTL_CONSTASCII_USTRINGPARAM("atestreg1.rdb") );
673     OUString areg2( RTL_CONSTASCII_USTRINGPARAM("atestreg2.rdb") );
674 
675   	test_SimpleRegistry( reg1, reg2 );
676   	test_DefaultRegistry( reg1, reg2 );
677   	test_SimpleRegistry( areg1, areg2, true ); // use different merge
678   	test_DefaultRegistry( areg1, areg2, true );
679 
680     Reference< XSimpleRegistry > xSimReg( ::cppu::createSimpleRegistry() );
681     xSimReg->open( reg1, sal_False, sal_True );
682     xSimReg->destroy();
683     xSimReg->open( reg2, sal_False, sal_True );
684     xSimReg->destroy();
685     xSimReg->open( areg1, sal_False, sal_True );
686     xSimReg->destroy();
687     xSimReg->open( areg2, sal_False, sal_True );
688     xSimReg->destroy();
689 	return(0);
690 }
691 
692 
693