blob: 7c0f85cb556336cb5f91fbe16035c952cfc0713a [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_stoc.hxx"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sal/main.h>
#include <osl/module.hxx>
#include <osl/diagnose.h>
#include <osl/process.h>
#include <registry/registry.hxx>
#include <com/sun/star/registry/XSimpleRegistry.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <cppuhelper/factory.hxx>
#include <cppuhelper/bootstrap.hxx>
#include <cppuhelper/servicefactory.hxx>
#include <com/sun/star/lang/XComponent.hpp>
#if defined ( UNX )
#include <limits.h>
#define _MAX_PATH PATH_MAX
#endif
using namespace com::sun::star;
using namespace com::sun::star::uno;
using namespace com::sun::star::registry;
using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace rtl;
using namespace osl;
#if OSL_DEBUG_LEVEL > 0
#define TEST_ENSHURE(c, m) OSL_ENSURE(c, m)
#else
#define TEST_ENSHURE(c, m) OSL_VERIFY(c)
#endif
namespace stoc_impreg
{
void SAL_CALL mergeKeys(
Reference< registry::XRegistryKey > const & xDest,
Reference< registry::XRegistryKey > const & xSource )
SAL_THROW( (registry::InvalidRegistryException, registry::MergeConflictException) );
}
static void mergeKeys(
Reference< registry::XSimpleRegistry > const & xDest,
OUString const & rBaseNode,
OUString const & rURL )
SAL_THROW( (registry::InvalidRegistryException, registry::MergeConflictException) )
{
Reference< registry::XRegistryKey > xDestRoot( xDest->getRootKey() );
Reference< registry::XRegistryKey > xDestKey;
if (rBaseNode.getLength())
{
xDestKey = xDestRoot->createKey( rBaseNode );
xDestRoot->closeKey();
}
else
{
xDestKey = xDestRoot;
}
Reference< registry::XSimpleRegistry > xSimReg( ::cppu::createSimpleRegistry() );
xSimReg->open( rURL, sal_True, sal_False );
OSL_ASSERT( xSimReg->isValid() );
Reference< registry::XRegistryKey > xSourceKey( xSimReg->getRootKey() );
::stoc_impreg::mergeKeys( xDestKey, xSourceKey );
xSourceKey->closeKey();
xSimReg->close();
xDestKey->closeKey();
}
OString userRegEnv("STAR_USER_REGISTRY=");
OUString getExePath()
{
OUString exe;
OSL_VERIFY( osl_getExecutableFile( &exe.pData ) == osl_Process_E_None);
#if defined(WIN32) || defined(__OS2__) || defined(WNT)
exe = exe.copy(0, exe.getLength() - 16);
#else
exe = exe.copy(0, exe.getLength() - 12);
#endif
return exe;
}
void setStarUserRegistry()
{
Registry *myRegistry = new Registry();
RegistryKey rootKey, rKey, rKey2;
OUString userReg = getExePath();
userReg += OUString::createFromAscii("user.rdb");
if(myRegistry->open(userReg, REG_READWRITE))
{
TEST_ENSHURE(!myRegistry->create(userReg), "setStarUserRegistry error 1");
}
TEST_ENSHURE(!myRegistry->close(), "setStarUserRegistry error 9");
delete myRegistry;
userRegEnv += OUStringToOString(userReg, RTL_TEXTENCODING_ASCII_US);
putenv((char *)userRegEnv.getStr());
}
void setLinkInDefaultRegistry(const OUString& linkName, const OUString& linkTarget)
{
Registry *myRegistry = new Registry();
RegistryKey rootKey;
OUString appReg = getExePath();
appReg += OUString::createFromAscii("stoctest.rdb");
TEST_ENSHURE(!myRegistry->open(appReg, REG_READWRITE), "setLinkInDefaultRegistry error 1");
TEST_ENSHURE(!myRegistry->openRootKey(rootKey), "setLinkInDefaultRegistry error 2");
TEST_ENSHURE(!rootKey.createLink(linkName, linkTarget), "setLinkInDefaultRegistry error 3");
TEST_ENSHURE(!rootKey.closeKey(), "setLinkInDefaultRegistry error 4");
TEST_ENSHURE(!myRegistry->close(), "setLinkInDefaultRegistry error 5");
delete myRegistry;
}
void test_SimpleRegistry(
OUString const & testreg,
OUString const & testreg2,
bool bMergeDifferently = true )
{
Reference<XInterface> xIFace;
Module module;
OUString dllName(
RTL_CONSTASCII_USTRINGPARAM("simplereg.uno" SAL_DLLEXTENSION) );
if (module.load(dllName))
{
// try to get provider from module
component_getFactoryFunc pCompFactoryFunc = (component_getFactoryFunc)
module.getFunctionSymbol( OUString::createFromAscii(COMPONENT_GETFACTORY) );
if (pCompFactoryFunc)
{
XSingleServiceFactory * pRet = (XSingleServiceFactory *)
(*pCompFactoryFunc)(
"com.sun.star.comp.stoc.SimpleRegistry", 0, 0 );
if (pRet)
{
xIFace = pRet;
pRet->release();
}
}
}
TEST_ENSHURE( xIFace.is(), "test_SimpleRegistry error1");
Reference<XSingleServiceFactory> xFactory( Reference<XSingleServiceFactory>::query(xIFace) );
xIFace.clear();
TEST_ENSHURE( xFactory.is(), "testloader error11");
Reference<XInterface> xIFace2 = xFactory->createInstance();
xFactory.clear();
TEST_ENSHURE( xIFace2.is(), "testloader error12");
Reference<XServiceInfo> xServInfo( Reference<XServiceInfo>::query(xIFace2) );
TEST_ENSHURE( xServInfo.is(), "test_SimpleRegistry error2");
TEST_ENSHURE( xServInfo->getImplementationName().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("com.sun.star.comp.stoc.SimpleRegistry") ), "test_SimpleRegistry error3");
TEST_ENSHURE( xServInfo->supportsService(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.SimpleRegistry"))), "test_SimpleRegistry error4");
TEST_ENSHURE( xServInfo->getSupportedServiceNames().getLength() == 1, "test_SimpleRegistry error5");
xServInfo.clear();
Reference<XSimpleRegistry> xReg( Reference<XSimpleRegistry>::query(xIFace2) );
xIFace2.clear();
TEST_ENSHURE( xReg.is(), "test_SimpleRegistry error6");
try
{
xReg->open(testreg, sal_False, sal_True);
TEST_ENSHURE( xReg->isValid() != sal_False, "test_SimpleRegistry error 7" );
TEST_ENSHURE( xReg->isReadOnly() == sal_False, "test_SimpleRegistry error 8" );
Reference<XRegistryKey> xRootKey(xReg->getRootKey());
TEST_ENSHURE( xRootKey->isValid(), "test_SimpleRegistry error 9" );
Reference<XRegistryKey> xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstKey") ));
Reference<XRegistryKey> xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstSubKey") ));
xSubKey->setLongValue(123456789);
xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondSubKey") ));
xSubKey->setAsciiValue(OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein acsii value") ));
xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("ThirdSubKey") ));
xSubKey->setStringValue(OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein unicode value") ));
xSubKey = xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FourthSubKey") ));
Sequence<sal_Int8> aSeq((sal_Int8*)"ich bin ein binary value", 25);
xSubKey->setBinaryValue(aSeq);
Sequence<OUString> seqNames = xKey->getKeyNames();
Sequence< Reference<XRegistryKey> > seqKeys = xKey->openKeys();
OUString name;
for (sal_Int32 i=0; i < seqNames.getLength(); i++)
{
name = seqNames.getArray()[i];
xSubKey = seqKeys.getArray()[i];
if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/FirstSubKey") ))
{
TEST_ENSHURE( xSubKey->getLongValue() == 123456789,
"test_SimpleRegistry error 10" );
} else
if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/SecondSubKey") ))
{
TEST_ENSHURE( xSubKey->getAsciiValue() == OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein acsii value") ),
"test_SimpleRegistry error 11" );
} else
if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/ThirdSubKey") ))
{
TEST_ENSHURE( xSubKey->getStringValue() == OUString( RTL_CONSTASCII_USTRINGPARAM("ich bin ein unicode value") ),
"test_SimpleRegistry error 12" );
} else
if (name == OUString( RTL_CONSTASCII_USTRINGPARAM("/FirstKey/FourthSubKey") ))
{
Sequence<sal_Int8> seqByte = xSubKey->getBinaryValue();
TEST_ENSHURE(!strcmp(((const char*)seqByte.getArray()), "ich bin ein binary value"),
"test_SimpleRegistry error 13" );
}
seqKeys.getArray()[i]->closeKey();
}
xKey->closeKey();
xRootKey->deleteKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstKey") ));
xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondFirstKey" )));
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondKey") ));
sal_Int32 pLongs[3] = {123, 456, 789};
Sequence<sal_Int32> seqLongs(pLongs, 3);
xKey->setLongListValue(seqLongs);
Sequence<sal_Int32> seqLongs2;
seqLongs2 = xKey->getLongListValue();
TEST_ENSHURE( seqLongs.getLength() == 3, "test_SimpleRegistry error 14" );
TEST_ENSHURE( seqLongs.getArray()[0] == 123, "test_SimpleRegistry error 15" );
TEST_ENSHURE( seqLongs.getArray()[1] == 456, "test_SimpleRegistry error 16" );
TEST_ENSHURE( seqLongs.getArray()[2] == 789, "test_SimpleRegistry error 17" );
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("ThirdKey") ));
OUString pAscii[3];
pAscii[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") );
pAscii[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") );
pAscii[2] = OUString( RTL_CONSTASCII_USTRINGPARAM("ich") );
Sequence<OUString> seqAscii(pAscii, 3);
xKey->setAsciiListValue(seqAscii);
Sequence<OUString> seqAscii2;
seqAscii2 = xKey->getAsciiListValue();
TEST_ENSHURE( seqAscii2.getLength() == 3, "test_SimpleRegistry error 18" );
TEST_ENSHURE( seqAscii2.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") ), "test_SimpleRegistry error 19");
TEST_ENSHURE( seqAscii2.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") ), "test_SimpleRegistry error 20");
TEST_ENSHURE( seqAscii2.getArray()[2] == OUString( RTL_CONSTASCII_USTRINGPARAM("ich") ), "test_SimpleRegistry error 21");
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FourthKey") ));
OUString pUnicode[3];
pUnicode[0] = OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") );
pUnicode[1] = OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") );
pUnicode[2] = OUString( RTL_CONSTASCII_USTRINGPARAM("ich als unicode") );
Sequence<OUString> seqUnicode(pUnicode, 3);
xKey->setStringListValue(seqUnicode);
Sequence<OUString> seqUnicode2;
seqUnicode2 = xKey->getStringListValue();
TEST_ENSHURE( seqUnicode2.getLength() == 3, "test_SimpleRegistry error 22" );
TEST_ENSHURE( seqUnicode2.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") ), "test_SimpleRegistry error 23");
TEST_ENSHURE( seqUnicode2.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") ), "test_SimpleRegistry error 24");
TEST_ENSHURE( seqUnicode2.getArray()[2] == OUString( RTL_CONSTASCII_USTRINGPARAM("ich als unicode") ), "test_SimpleRegistry error 25");
xReg->open(testreg2, sal_False, sal_True);
TEST_ENSHURE( xReg->isValid() != sal_False, "test_SimpleRegistry error 25" );
xRootKey = xReg->getRootKey();
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("ThirdKey/FirstSubKey/WithSubSubKey") ));
xKey->closeKey();
TEST_ENSHURE(
xRootKey->createLink(
OUString( RTL_CONSTASCII_USTRINGPARAM("LinkTest") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") )),
"test_SimpleRegistry error 1212" );
xRootKey->closeKey();
xReg->close();
xReg->open(testreg, sal_False, sal_False);
TEST_ENSHURE( xReg->isValid() != sal_False, "test_SimpleRegistry error 26" );
if (bMergeDifferently)
{
mergeKeys(
xReg,
OUString(),
testreg2 );
}
else
{
xReg->mergeKey(OUString(), testreg2);
}
xRootKey = xReg->getRootKey();
xKey = xRootKey->openKey( OUString( RTL_CONSTASCII_USTRINGPARAM("LinkTest") ) );
TEST_ENSHURE(
xKey.is() && xKey->isValid() &&
xKey->getKeyName().equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") ),
"test_SimpleRegistry error 1213" );
xKey->closeKey();
TEST_ENSHURE(
xRootKey->getKeyType( OUString( RTL_CONSTASCII_USTRINGPARAM("LinkTest") ) ) ==
registry::RegistryKeyType_LINK,
"test_SimpleRegistry error 1214" );
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FirstKey/SecondSubKey") ));
TEST_ENSHURE( !xKey.is(), "test_SimpleRegistry error 27" );
// Test Links
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("FifthKey") ));
xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyFirstLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey") ));
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink") ));
TEST_ENSHURE( xKey->isValid(), "test_SimpleRegistry error 27" );
TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey") ), "test_SimpleRegistry error 28" );
xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ));
TEST_ENSHURE( xKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ))
== OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ), "test_SimpleRegistry error 29" );
try
{
TEST_ENSHURE( xKey->getResolvedName(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink/BlaBlaBla") ))
== OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink/BlaBlaBla") ), "test_SimpleRegistry error 30" );
}
catch(InvalidRegistryException&)
{
}
xRootKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/MyThirdLink") ));
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SixthKey") ));
xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyThirdLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ));
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/SixthSubKey") ));
try
{
xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
}
catch(InvalidRegistryException&)
{
}
TEST_ENSHURE( xRootKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ))
== OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ), "test_SimpleRegistry error 31" );
xRootKey->deleteLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
xRootKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") ));
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SixthKey") ));
seqNames = xKey->getKeyNames();
seqKeys = xKey->openKeys();
TEST_ENSHURE( seqNames.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/SixthSubKey") ),
"test_SimpleRegistry error 32" );
TEST_ENSHURE( seqNames.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/MyThirdLink") ),
"test_SimpleRegistry error 33" );
TEST_ENSHURE( seqKeys.getArray()[0]->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/SixthKey/SixthSubKey") ),
"test_SimpleRegistry error 34" );
TEST_ENSHURE( seqKeys.getArray()[1]->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/ThirdKey/FirstSubKey/WithSubSubKey") ),
"test_SimpleRegistry error 35" );
xRootKey->deleteLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/FourthKey/MySecondLink") ));
xRootKey->closeKey();
}
catch(InvalidRegistryException&)
{
TEST_ENSHURE(0, "exception InvalidRegistryExcption raised while doing test_SimpleRegistry");
}
catch(InvalidValueException&)
{
TEST_ENSHURE(0, "exception InvalidValueExcption raised while doing test_SimpleRegistry()");
}
xReg.clear();
printf("Test SimpleRegistry, OK!\n");
}
void test_DefaultRegistry(
OUString const & testreg,
OUString const & testreg2,
bool bMergeDifferently = false )
{
// Test NestedRegistry
OUString exePath( getExePath() );
OUString userRdb(exePath);
OUString applicatRdb(exePath);
userRdb += OUString::createFromAscii("user.rdb");
applicatRdb += OUString::createFromAscii("stoctest.rdb");
Reference < XMultiServiceFactory > rSMgr = ::cppu::createRegistryServiceFactory( userRdb, applicatRdb, sal_False, OUString());
//OUString::createFromAscii("//./e:/src596/stoc/wntmsci3/bin") );
Reference< XPropertySet > xPropSet( rSMgr, UNO_QUERY);
TEST_ENSHURE( xPropSet.is(), "test_DefaultRegistry error0");
Any aPropertyAny( xPropSet->getPropertyValue( OUString(RTL_CONSTASCII_USTRINGPARAM("Registry")) ) );
TEST_ENSHURE( aPropertyAny.hasValue(), "test_DefaultRegistry error1");
Reference<XSimpleRegistry> xReg;
aPropertyAny >>= xReg;
TEST_ENSHURE( xReg.is(), "test_DefaultRegistry error1a");
Reference<XServiceInfo> xServInfo( Reference<XServiceInfo>::query(xReg) );
TEST_ENSHURE( xServInfo.is(), "test_DefaultRegistry error2");
TEST_ENSHURE( xServInfo->getImplementationName() == OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.NestedRegistry") ), "test_DefualtRegistry error3");
TEST_ENSHURE( xServInfo->supportsService(OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.registry.NestedRegistry") )), "test_DefaultRegistry error4");
TEST_ENSHURE( xServInfo->getSupportedServiceNames().getLength() == 1, "test_DefaultRegistry error5");
xServInfo.clear();
TEST_ENSHURE( xReg.is(), "test_DefaultRegistry error6");
try
{
Reference<XRegistryKey> xRootKey(xReg->getRootKey());
Reference<XRegistryKey> xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/UCR/com/sun/star/registry/XSimpleRegistry") ));
TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/UCR/com/sun/star/registry/XSimpleRegistry") ),
"test_DefaultRegistry error 7" );
if (bMergeDifferently)
{
mergeKeys(
xReg,
OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ),
testreg );
}
else
{
xReg->mergeKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ), testreg );
}
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test/ThirdKey/FirstSubKey/WithSubSubKey") ));
if (xKey.is())
xKey->setLongValue(123456789);
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test/ThirdKey/FirstSubKey") ));
if (xKey.is())
{
xKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("SecondSubSubKey") ));
Sequence<OUString> seqNames = xKey->getKeyNames();
TEST_ENSHURE( seqNames.getLength() == 2, "test_DefaultRegistry error 8" );
}
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey") ));
if (xKey.is())
{
RegistryValueType valueType = xKey->getValueType();
TEST_ENSHURE( valueType == RegistryValueType_ASCIILIST, "test_DefaultRegistry error 9" );
Sequence<OUString> seqValue = xKey->getAsciiListValue();
TEST_ENSHURE( seqValue.getLength() == 3, "test_DefaultRegistry error 10" );
TEST_ENSHURE( seqValue.getArray()[0] == OUString( RTL_CONSTASCII_USTRINGPARAM("Hallo") ),
"test_DefaultRegistry error 11" );
TEST_ENSHURE( seqValue.getArray()[1] == OUString( RTL_CONSTASCII_USTRINGPARAM("jetzt komm") ),
"test_DefaultRegistry error 12" );
TEST_ENSHURE( seqValue.getArray()[2] == OUString( RTL_CONSTASCII_USTRINGPARAM("ich") ),
"test_DefaultRegistry error 13" );
Sequence<sal_Int32> seqLong(3);
seqLong.getArray()[0] = 1234;
seqLong.getArray()[1] = 4567;
seqLong.getArray()[2] = 7890;
xKey->setLongListValue(seqLong);
Sequence<sal_Int32> seqLongValue = xKey->getLongListValue();
TEST_ENSHURE( seqLongValue.getLength() == 3, "test_DefaultRegistry error 14" );
TEST_ENSHURE( seqLongValue.getArray()[0] == 1234, "test_DefaultRegistry error 15" );
TEST_ENSHURE( seqLongValue.getArray()[1] == 4567, "test_DefaultRegistry error 16" );
TEST_ENSHURE( seqLongValue.getArray()[2] == 7890, "test_DefaultRegistry error 17" );
}
// Test Links
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey") ));
xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyFirstLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey") ));
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink") ));
TEST_ENSHURE( xKey->isValid(), "test_DefaultRegistry error 18" );
TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey") ),
"test_DefaultRegistry error 19" );
xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ));
TEST_ENSHURE( xKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink") ))
== OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ),
"test_DefaultRegistry error 20" );
try
{
TEST_ENSHURE( xKey->getResolvedName(OUString( RTL_CONSTASCII_USTRINGPARAM("/WithSubSubKey/MyFourthLink/BlaBlaBla") ))
== OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink/BlaBlaBla") ),
"test_DefaultRegistry error 21" );
}
catch(InvalidRegistryException&)
{
}
xRootKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/SixthKey/MyThirdLink") ));
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/SixthKey") ));
xKey->createLink(OUString( RTL_CONSTASCII_USTRINGPARAM("MyThirdLink") ),
OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ));
try
{
xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
}
catch(InvalidRegistryException&)
{
printf("test InvalidRegistryExcption OK!\n");
}
TEST_ENSHURE( xRootKey->getLinkTarget(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ))
== OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FourthKey/MySecondLink") ),
"test_DefaultRegistry error 22" );
xRootKey->deleteLink(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/FifthKey/MyFirstLink/WithSubSubKey/MyFourthLink") ));
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/DefaultLink/SecondSubSubKey") ));
if (xKey.is())
{
TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey/SecondSubSubKey") ), "test_DefaultRegistry error 23" );
}
xKey = xRootKey->createKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/DefaultLink/ThirdSubSubKey") ));
if (xKey.is())
{
TEST_ENSHURE( xKey->getKeyName() == OUString( RTL_CONSTASCII_USTRINGPARAM("/Test/ThirdKey/FirstSubKey/ThirdSubSubKey") ),
"test_DefaultRegistry error 24" );
}
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ));
TEST_ENSHURE( xKey->isValid(), "test_DefaultRegistry error 25" );
xRootKey->deleteKey(OUString( RTL_CONSTASCII_USTRINGPARAM("Test") ));
if (bMergeDifferently)
{
mergeKeys(
xReg,
OUString( RTL_CONSTASCII_USTRINGPARAM("AllFromTestreg2") ),
testreg2);
}
else
{
xReg->mergeKey(OUString( RTL_CONSTASCII_USTRINGPARAM("AllFromTestreg2") ),
testreg2);
}
xKey = xRootKey->openKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/AllFromTestreg2/ThirdKey/FirstSubKey") ));
if (xKey.is())
{
xRootKey->deleteKey(OUString( RTL_CONSTASCII_USTRINGPARAM("/AllFromTestreg2") ));
}
}
catch(InvalidRegistryException&)
{
TEST_ENSHURE(0, "exception InvalidRegistryExcption raised while doing test_DefaultRegistry");
}
catch(InvalidValueException&)
{
TEST_ENSHURE(0, "exception InvalidValueExcption raised while doing test_DefaultRegistry()");
}
try
{
xReg->close();
}
catch(InvalidRegistryException& e)
{
(void)e;
TEST_ENSHURE(0, OUStringToOString(e.Message,RTL_TEXTENCODING_ASCII_US).getStr());
}
xReg.clear();
// shutdown
Reference< ::com::sun::star::lang::XComponent > xComp( rSMgr, UNO_QUERY );
OSL_ENSURE( xComp.is(), "### serivce manager has to implement XComponent!" );
xComp->dispose();
printf("Test DefaultRegistry, OK!\n");
}
SAL_IMPLEMENT_MAIN()
{
// setStarUserRegistry();
setLinkInDefaultRegistry(OUString::createFromAscii("/Test/DefaultLink"),
OUString::createFromAscii("/Test/FifthKey/MyFirstLink"));
OUString reg1( RTL_CONSTASCII_USTRINGPARAM("testreg1.rdb") );
OUString reg2( RTL_CONSTASCII_USTRINGPARAM("testreg2.rdb") );
OUString areg1( RTL_CONSTASCII_USTRINGPARAM("atestreg1.rdb") );
OUString areg2( RTL_CONSTASCII_USTRINGPARAM("atestreg2.rdb") );
test_SimpleRegistry( reg1, reg2 );
test_DefaultRegistry( reg1, reg2 );
test_SimpleRegistry( areg1, areg2, true ); // use different merge
test_DefaultRegistry( areg1, areg2, true );
Reference< XSimpleRegistry > xSimReg( ::cppu::createSimpleRegistry() );
xSimReg->open( reg1, sal_False, sal_True );
xSimReg->destroy();
xSimReg->open( reg2, sal_False, sal_True );
xSimReg->destroy();
xSimReg->open( areg1, sal_False, sal_True );
xSimReg->destroy();
xSimReg->open( areg2, sal_False, sal_True );
xSimReg->destroy();
return(0);
}