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