1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_stoc.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "com/sun/star/beans/XPropertySet.hpp"
28*b1cdbd2cSJim Jagielski #include "com/sun/star/container/XHierarchicalNameAccess.hpp"
29*b1cdbd2cSJim Jagielski #include "com/sun/star/lang/XMain.hpp"
30*b1cdbd2cSJim Jagielski #include "com/sun/star/lang/XSingleComponentFactory.hpp"
31*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XCompoundTypeDescription.hpp"
32*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XInterfaceAttributeTypeDescription2.hpp"
33*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XInterfaceMemberTypeDescription.hpp"
34*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XInterfaceMethodTypeDescription.hpp"
35*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XInterfaceTypeDescription2.hpp"
36*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XPublished.hpp"
37*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XServiceTypeDescription2.hpp"
38*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XSingletonTypeDescription2.hpp"
39*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XStructTypeDescription.hpp"
40*b1cdbd2cSJim Jagielski #include "com/sun/star/reflection/XTypeDescription.hpp"
41*b1cdbd2cSJim Jagielski #include "com/sun/star/registry/InvalidRegistryException.hpp"
42*b1cdbd2cSJim Jagielski #include "com/sun/star/registry/XRegistryKey.hpp"
43*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Any.hxx"
44*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Exception.hpp"
45*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Reference.hxx"
46*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/RuntimeException.hpp"
47*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/Sequence.hxx"
48*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/TypeClass.hpp"
49*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/XComponentContext.hpp"
50*b1cdbd2cSJim Jagielski #include "com/sun/star/uno/XInterface.hpp"
51*b1cdbd2cSJim Jagielski #include "cppuhelper/factory.hxx"
52*b1cdbd2cSJim Jagielski #include "cppuhelper/implbase1.hxx"
53*b1cdbd2cSJim Jagielski #include "cppuhelper/weak.hxx"
54*b1cdbd2cSJim Jagielski #include "rtl/textenc.h"
55*b1cdbd2cSJim Jagielski #include "rtl/ustring.h"
56*b1cdbd2cSJim Jagielski #include "rtl/ustring.hxx"
57*b1cdbd2cSJim Jagielski #include "sal/types.h"
58*b1cdbd2cSJim Jagielski #include "uno/environment.h"
59*b1cdbd2cSJim Jagielski #include "uno/lbnames.h"
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski #include /*MSVC trouble: <cstdlib>*/ <stdlib.h>
62*b1cdbd2cSJim Jagielski #include <iostream>
63*b1cdbd2cSJim Jagielski #include <ostream>
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski namespace css = com::sun::star;
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski namespace {
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski class Service: public cppu::WeakImplHelper1< css::lang::XMain > {
70*b1cdbd2cSJim Jagielski public:
71*b1cdbd2cSJim Jagielski     virtual sal_Int32 SAL_CALL
72*b1cdbd2cSJim Jagielski     run(css::uno::Sequence< rtl::OUString > const & arguments)
73*b1cdbd2cSJim Jagielski         throw (css::uno::RuntimeException);
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski     static rtl::OUString getImplementationName();
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski     static css::uno::Sequence< rtl::OUString > getSupportedServiceNames();
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski     static css::uno::Reference< css::uno::XInterface > SAL_CALL createInstance(
80*b1cdbd2cSJim Jagielski         css::uno::Reference< css::uno::XComponentContext > const & context)
81*b1cdbd2cSJim Jagielski         throw (css::uno::Exception);
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski private:
Service(css::uno::Reference<css::uno::XComponentContext> const & context)84*b1cdbd2cSJim Jagielski     explicit Service(
85*b1cdbd2cSJim Jagielski         css::uno::Reference< css::uno::XComponentContext > const & context):
86*b1cdbd2cSJim Jagielski         m_context(context)
87*b1cdbd2cSJim Jagielski     {}
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski     css::uno::Reference< css::uno::XComponentContext > m_context;
90*b1cdbd2cSJim Jagielski };
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski }
93*b1cdbd2cSJim Jagielski 
94*b1cdbd2cSJim Jagielski namespace {
95*b1cdbd2cSJim Jagielski 
operator <<(std::ostream & out,rtl::OUString const & value)96*b1cdbd2cSJim Jagielski std::ostream & operator <<(std::ostream & out, rtl::OUString const & value) {
97*b1cdbd2cSJim Jagielski     return out << rtl::OUStringToOString(value, RTL_TEXTENCODING_UTF8).getStr();
98*b1cdbd2cSJim Jagielski }
99*b1cdbd2cSJim Jagielski 
assertTrue(bool argument)100*b1cdbd2cSJim Jagielski void assertTrue(bool argument) {
101*b1cdbd2cSJim Jagielski     if (!argument) {
102*b1cdbd2cSJim Jagielski         std::cerr
103*b1cdbd2cSJim Jagielski             << "assertTrue(" << argument << ") failed" << std::endl;
104*b1cdbd2cSJim Jagielski         /*MSVC trouble: std::*/abort();
105*b1cdbd2cSJim Jagielski     }
106*b1cdbd2cSJim Jagielski }
107*b1cdbd2cSJim Jagielski 
assertFalse(bool argument)108*b1cdbd2cSJim Jagielski void assertFalse(bool argument) {
109*b1cdbd2cSJim Jagielski     if (argument) {
110*b1cdbd2cSJim Jagielski         std::cerr
111*b1cdbd2cSJim Jagielski             << "assertFalse(" << argument << ") failed" << std::endl;
112*b1cdbd2cSJim Jagielski         /*MSVC trouble: std::*/abort();
113*b1cdbd2cSJim Jagielski     }
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski 
assertEqual(T const & value,T const & argument)116*b1cdbd2cSJim Jagielski template< typename T > void assertEqual(T const & value, T const & argument) {
117*b1cdbd2cSJim Jagielski     if (argument != value) {
118*b1cdbd2cSJim Jagielski         std::cerr
119*b1cdbd2cSJim Jagielski             << "assertEqual(" << value << ", " << argument << ") failed"
120*b1cdbd2cSJim Jagielski             << std::endl;
121*b1cdbd2cSJim Jagielski         /*MSVC trouble: std::*/abort();
122*b1cdbd2cSJim Jagielski     }
123*b1cdbd2cSJim Jagielski }
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski }
126*b1cdbd2cSJim Jagielski 
run(css::uno::Sequence<rtl::OUString> const &)127*b1cdbd2cSJim Jagielski sal_Int32 Service::run(css::uno::Sequence< rtl::OUString > const &)
128*b1cdbd2cSJim Jagielski     throw (css::uno::RuntimeException)
129*b1cdbd2cSJim Jagielski {
130*b1cdbd2cSJim Jagielski     css::uno::Reference< css::lang::XMultiComponentFactory > factory(
131*b1cdbd2cSJim Jagielski         m_context->getServiceManager());
132*b1cdbd2cSJim Jagielski     assertTrue(factory.is());
133*b1cdbd2cSJim Jagielski     css::uno::Sequence< css::uno::Any > args(1);
134*b1cdbd2cSJim Jagielski     args[0] = css::uno::Reference< css::beans::XPropertySet >(
135*b1cdbd2cSJim Jagielski         factory, css::uno::UNO_QUERY_THROW)->getPropertyValue(
136*b1cdbd2cSJim Jagielski             rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Registry")));
137*b1cdbd2cSJim Jagielski     css::uno::Reference< css::container::XHierarchicalNameAccess > provider(
138*b1cdbd2cSJim Jagielski         factory->createInstanceWithArgumentsAndContext(
139*b1cdbd2cSJim Jagielski             rtl::OUString(
140*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
141*b1cdbd2cSJim Jagielski                     "com.sun.star.comp.stoc.RegistryTypeDescriptionProvider")),
142*b1cdbd2cSJim Jagielski             args, m_context),
143*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski     // The following assumes that interface members are sorted by increasing
146*b1cdbd2cSJim Jagielski     // values of XInterfaceMemberTypeDescription.getPosition, the exceptions
147*b1cdbd2cSJim Jagielski     // of interface attributes and interface methods, the constructors of
148*b1cdbd2cSJim Jagielski     // services, and the exceptions of service constructors are sorted as given
149*b1cdbd2cSJim Jagielski     // in the UNOIDL source code:
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski     assertEqual< bool >(
152*b1cdbd2cSJim Jagielski         false,
153*b1cdbd2cSJim Jagielski         provider->hasByHierarchicalName(
154*b1cdbd2cSJim Jagielski             rtl::OUString(
155*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM("[][]boolean"))));
156*b1cdbd2cSJim Jagielski     assertEqual< bool >(
157*b1cdbd2cSJim Jagielski         false,
158*b1cdbd2cSJim Jagielski         provider->hasByHierarchicalName(
159*b1cdbd2cSJim Jagielski             rtl::OUString(
160*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
161*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Struct3<boolean,boolean>"))));
162*b1cdbd2cSJim Jagielski     assertEqual< bool >(
163*b1cdbd2cSJim Jagielski         false,
164*b1cdbd2cSJim Jagielski         provider->hasByHierarchicalName(
165*b1cdbd2cSJim Jagielski             rtl::OUString(
166*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
167*b1cdbd2cSJim Jagielski                     "com.sun.star.uno.XComponentContext::getValueByName"))));
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XCompoundTypeDescription > exception;
170*b1cdbd2cSJim Jagielski     exception
171*b1cdbd2cSJim Jagielski         = css::uno::Reference< css::reflection::XCompoundTypeDescription >(
172*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
173*b1cdbd2cSJim Jagielski                 rtl::OUString(
174*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception"))),
175*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
176*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_EXCEPTION, exception->getTypeClass());
177*b1cdbd2cSJim Jagielski     assertEqual(
178*b1cdbd2cSJim Jagielski         rtl::OUString(
179*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception")),
180*b1cdbd2cSJim Jagielski         exception->getName());
181*b1cdbd2cSJim Jagielski     assertFalse(exception->getBaseType().is());
182*b1cdbd2cSJim Jagielski     exception
183*b1cdbd2cSJim Jagielski         = css::uno::Reference< css::reflection::XCompoundTypeDescription >(
184*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
185*b1cdbd2cSJim Jagielski                 rtl::OUString(
186*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
187*b1cdbd2cSJim Jagielski                         "com.sun.star.uno.RuntimeException"))),
188*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
189*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_EXCEPTION, exception->getTypeClass());
190*b1cdbd2cSJim Jagielski     assertEqual(
191*b1cdbd2cSJim Jagielski         rtl::OUString(
192*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.RuntimeException")),
193*b1cdbd2cSJim Jagielski         exception->getName());
194*b1cdbd2cSJim Jagielski     assertEqual(
195*b1cdbd2cSJim Jagielski         rtl::OUString(
196*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception")),
197*b1cdbd2cSJim Jagielski         exception->getBaseType()->getName());
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XStructTypeDescription > structure;
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski     structure = css::uno::Reference< css::reflection::XStructTypeDescription >(
202*b1cdbd2cSJim Jagielski         provider->getByHierarchicalName(
203*b1cdbd2cSJim Jagielski             rtl::OUString(
204*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
205*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Struct2"))),
206*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
207*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_STRUCT, structure->getTypeClass());
208*b1cdbd2cSJim Jagielski     assertEqual(
209*b1cdbd2cSJim Jagielski         rtl::OUString(
210*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Struct2")),
211*b1cdbd2cSJim Jagielski         structure->getName());
212*b1cdbd2cSJim Jagielski     assertFalse(structure->getBaseType().is());
213*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, structure->getMemberTypes().getLength());
214*b1cdbd2cSJim Jagielski     assertEqual(
215*b1cdbd2cSJim Jagielski         rtl::OUString(
216*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Struct1")),
217*b1cdbd2cSJim Jagielski         structure->getMemberTypes()[0]->getName());
218*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, structure->getMemberNames().getLength());
219*b1cdbd2cSJim Jagielski     assertEqual(
220*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("s1")),
221*b1cdbd2cSJim Jagielski         structure->getMemberNames()[0]);
222*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, structure->getTypeParameters().getLength());
223*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, structure->getTypeArguments().getLength());
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski     structure = css::uno::Reference< css::reflection::XStructTypeDescription >(
226*b1cdbd2cSJim Jagielski         provider->getByHierarchicalName(
227*b1cdbd2cSJim Jagielski             rtl::OUString(
228*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
229*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Struct3"))),
230*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
231*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_STRUCT, structure->getTypeClass());
232*b1cdbd2cSJim Jagielski     assertEqual(
233*b1cdbd2cSJim Jagielski         rtl::OUString(
234*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Struct3")),
235*b1cdbd2cSJim Jagielski         structure->getName());
236*b1cdbd2cSJim Jagielski     assertFalse(structure->getBaseType().is());
237*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, structure->getMemberTypes().getLength());
238*b1cdbd2cSJim Jagielski     assertEqual(
239*b1cdbd2cSJim Jagielski         css::uno::TypeClass_UNKNOWN,
240*b1cdbd2cSJim Jagielski         structure->getMemberTypes()[0]->getTypeClass());
241*b1cdbd2cSJim Jagielski     assertEqual(
242*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("U")),
243*b1cdbd2cSJim Jagielski         structure->getMemberTypes()[0]->getName());
244*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, structure->getMemberNames().getLength());
245*b1cdbd2cSJim Jagielski     assertEqual(
246*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("s2")),
247*b1cdbd2cSJim Jagielski         structure->getMemberNames()[0]);
248*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(2, structure->getTypeParameters().getLength());
249*b1cdbd2cSJim Jagielski     assertEqual(
250*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("T")),
251*b1cdbd2cSJim Jagielski         structure->getTypeParameters()[0]);
252*b1cdbd2cSJim Jagielski     assertEqual(
253*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("U")),
254*b1cdbd2cSJim Jagielski         structure->getTypeParameters()[1]);
255*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, structure->getTypeArguments().getLength());
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski     structure = css::uno::Reference< css::reflection::XStructTypeDescription >(
258*b1cdbd2cSJim Jagielski         provider->getByHierarchicalName(
259*b1cdbd2cSJim Jagielski             rtl::OUString(
260*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
261*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Struct4"))),
262*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
263*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_STRUCT, structure->getTypeClass());
264*b1cdbd2cSJim Jagielski     assertEqual(
265*b1cdbd2cSJim Jagielski         rtl::OUString(
266*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Struct4")),
267*b1cdbd2cSJim Jagielski         structure->getName());
268*b1cdbd2cSJim Jagielski     assertEqual(
269*b1cdbd2cSJim Jagielski         rtl::OUString(
270*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Struct2")),
271*b1cdbd2cSJim Jagielski         structure->getBaseType()->getName());
272*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, structure->getMemberTypes().getLength());
273*b1cdbd2cSJim Jagielski     assertEqual(
274*b1cdbd2cSJim Jagielski         rtl::OUString(
275*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM(
276*b1cdbd2cSJim Jagielski                 "test.registrytdprovider.Struct3<"
277*b1cdbd2cSJim Jagielski                 "test.registrytdprovider.Struct2,"
278*b1cdbd2cSJim Jagielski                 "test.registrytdprovider.Struct3<boolean,any>>")),
279*b1cdbd2cSJim Jagielski         structure->getMemberTypes()[0]->getName());
280*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, structure->getMemberNames().getLength());
281*b1cdbd2cSJim Jagielski     assertEqual(
282*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("s2")),
283*b1cdbd2cSJim Jagielski         structure->getMemberNames()[0]);
284*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, structure->getTypeParameters().getLength());
285*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, structure->getTypeArguments().getLength());
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XInterfaceTypeDescription2 >
288*b1cdbd2cSJim Jagielski         interface;
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski     interface
291*b1cdbd2cSJim Jagielski         = css::uno::Reference< css::reflection::XInterfaceTypeDescription2 >(
292*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
293*b1cdbd2cSJim Jagielski                 rtl::OUString(
294*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
295*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.XTest1"))),
296*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
297*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_INTERFACE, interface->getTypeClass());
298*b1cdbd2cSJim Jagielski     assertEqual(
299*b1cdbd2cSJim Jagielski         rtl::OUString(
300*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1")),
301*b1cdbd2cSJim Jagielski         interface->getName());
302*b1cdbd2cSJim Jagielski     css::uno::Sequence<
303*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription > > bases(
304*b1cdbd2cSJim Jagielski             interface->getBaseTypes());
305*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, bases.getLength());
306*b1cdbd2cSJim Jagielski     assertEqual(
307*b1cdbd2cSJim Jagielski         rtl::OUString(
308*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.XInterface")),
309*b1cdbd2cSJim Jagielski         bases[0]->getName());
310*b1cdbd2cSJim Jagielski     css::uno::Sequence<
311*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription > >
312*b1cdbd2cSJim Jagielski             optionalBases(interface->getOptionalBaseTypes());
313*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, optionalBases.getLength());
314*b1cdbd2cSJim Jagielski     assertEqual(
315*b1cdbd2cSJim Jagielski         rtl::OUString(
316*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XBase")),
317*b1cdbd2cSJim Jagielski         optionalBases[0]->getName());
318*b1cdbd2cSJim Jagielski     css::uno::Sequence<
319*b1cdbd2cSJim Jagielski         css::uno::Reference<
320*b1cdbd2cSJim Jagielski             css::reflection::XInterfaceMemberTypeDescription > > members(
321*b1cdbd2cSJim Jagielski                 interface->getMembers());
322*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(5, members.getLength());
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XInterfaceAttributeTypeDescription2 >
325*b1cdbd2cSJim Jagielski         attribute;
326*b1cdbd2cSJim Jagielski     css::uno::Sequence<
327*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XCompoundTypeDescription > >
328*b1cdbd2cSJim Jagielski             getExceptions;
329*b1cdbd2cSJim Jagielski     css::uno::Sequence<
330*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XCompoundTypeDescription > >
331*b1cdbd2cSJim Jagielski             setExceptions;
332*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XInterfaceMethodTypeDescription >
333*b1cdbd2cSJim Jagielski         method;
334*b1cdbd2cSJim Jagielski 
335*b1cdbd2cSJim Jagielski     attribute = css::uno::Reference<
336*b1cdbd2cSJim Jagielski         css::reflection::XInterfaceAttributeTypeDescription2 >(
337*b1cdbd2cSJim Jagielski             members[0], css::uno::UNO_QUERY_THROW);
338*b1cdbd2cSJim Jagielski     assertEqual(
339*b1cdbd2cSJim Jagielski         css::uno::TypeClass_INTERFACE_ATTRIBUTE, attribute->getTypeClass());
340*b1cdbd2cSJim Jagielski     assertEqual(
341*b1cdbd2cSJim Jagielski         rtl::OUString(
342*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1::a1")),
343*b1cdbd2cSJim Jagielski         attribute->getName());
344*b1cdbd2cSJim Jagielski     assertEqual(
345*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a1")),
346*b1cdbd2cSJim Jagielski         attribute->getMemberName());
347*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(3, attribute->getPosition());
348*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, attribute->isReadOnly());
349*b1cdbd2cSJim Jagielski     assertEqual(
350*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("short")),
351*b1cdbd2cSJim Jagielski         attribute->getType()->getName());
352*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, attribute->isBound());
353*b1cdbd2cSJim Jagielski     getExceptions = attribute->getGetExceptions();
354*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, getExceptions.getLength());
355*b1cdbd2cSJim Jagielski     setExceptions = attribute->getSetExceptions();
356*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, setExceptions.getLength());
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski     attribute = css::uno::Reference<
359*b1cdbd2cSJim Jagielski         css::reflection::XInterfaceAttributeTypeDescription2 >(
360*b1cdbd2cSJim Jagielski             members[1], css::uno::UNO_QUERY_THROW);
361*b1cdbd2cSJim Jagielski     assertEqual(
362*b1cdbd2cSJim Jagielski         css::uno::TypeClass_INTERFACE_ATTRIBUTE, attribute->getTypeClass());
363*b1cdbd2cSJim Jagielski     assertEqual(
364*b1cdbd2cSJim Jagielski         rtl::OUString(
365*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1::a2")),
366*b1cdbd2cSJim Jagielski         attribute->getName());
367*b1cdbd2cSJim Jagielski     assertEqual(
368*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a2")),
369*b1cdbd2cSJim Jagielski         attribute->getMemberName());
370*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(4, attribute->getPosition());
371*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, attribute->isReadOnly());
372*b1cdbd2cSJim Jagielski     assertEqual(
373*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("long")),
374*b1cdbd2cSJim Jagielski         attribute->getType()->getName());
375*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, attribute->isBound());
376*b1cdbd2cSJim Jagielski     getExceptions = attribute->getGetExceptions();
377*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(2, getExceptions.getLength());
378*b1cdbd2cSJim Jagielski     assertEqual(
379*b1cdbd2cSJim Jagielski         rtl::OUString(
380*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM(
381*b1cdbd2cSJim Jagielski                 "com.sun.star.lang.WrappedTargetException")),
382*b1cdbd2cSJim Jagielski         getExceptions[0]->getName());
383*b1cdbd2cSJim Jagielski     assertEqual(
384*b1cdbd2cSJim Jagielski         rtl::OUString(
385*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.RuntimeException")),
386*b1cdbd2cSJim Jagielski         getExceptions[1]->getName());
387*b1cdbd2cSJim Jagielski     setExceptions = attribute->getSetExceptions();
388*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(2, setExceptions.getLength());
389*b1cdbd2cSJim Jagielski     assertEqual(
390*b1cdbd2cSJim Jagielski         rtl::OUString(
391*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.Exception")),
392*b1cdbd2cSJim Jagielski         setExceptions[0]->getName());
393*b1cdbd2cSJim Jagielski     assertEqual(
394*b1cdbd2cSJim Jagielski         rtl::OUString(
395*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM(
396*b1cdbd2cSJim Jagielski                 "com.sun.star.lang.WrappedTargetException")),
397*b1cdbd2cSJim Jagielski         setExceptions[1]->getName());
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski     attribute = css::uno::Reference<
400*b1cdbd2cSJim Jagielski         css::reflection::XInterfaceAttributeTypeDescription2 >(
401*b1cdbd2cSJim Jagielski             members[2], css::uno::UNO_QUERY_THROW);
402*b1cdbd2cSJim Jagielski     assertEqual(
403*b1cdbd2cSJim Jagielski         css::uno::TypeClass_INTERFACE_ATTRIBUTE, attribute->getTypeClass());
404*b1cdbd2cSJim Jagielski     assertEqual(
405*b1cdbd2cSJim Jagielski         rtl::OUString(
406*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1::a3")),
407*b1cdbd2cSJim Jagielski         attribute->getName());
408*b1cdbd2cSJim Jagielski     assertEqual(
409*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("a3")),
410*b1cdbd2cSJim Jagielski         attribute->getMemberName());
411*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(5, attribute->getPosition());
412*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, attribute->isReadOnly());
413*b1cdbd2cSJim Jagielski     assertEqual(
414*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("hyper")),
415*b1cdbd2cSJim Jagielski         attribute->getType()->getName());
416*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, attribute->isBound());
417*b1cdbd2cSJim Jagielski     getExceptions = attribute->getGetExceptions();
418*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, getExceptions.getLength());
419*b1cdbd2cSJim Jagielski     assertEqual(
420*b1cdbd2cSJim Jagielski         rtl::OUString(
421*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM(
422*b1cdbd2cSJim Jagielski                 "com.sun.star.lang.WrappedTargetException")),
423*b1cdbd2cSJim Jagielski         getExceptions[0]->getName());
424*b1cdbd2cSJim Jagielski     setExceptions = attribute->getSetExceptions();
425*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, setExceptions.getLength());
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski     method = css::uno::Reference<
428*b1cdbd2cSJim Jagielski         css::reflection::XInterfaceMethodTypeDescription >(
429*b1cdbd2cSJim Jagielski             members[3], css::uno::UNO_QUERY_THROW);
430*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_INTERFACE_METHOD, method->getTypeClass());
431*b1cdbd2cSJim Jagielski     assertEqual(
432*b1cdbd2cSJim Jagielski         rtl::OUString(
433*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1::f1")),
434*b1cdbd2cSJim Jagielski         method->getName());
435*b1cdbd2cSJim Jagielski     assertEqual(
436*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("f1")),
437*b1cdbd2cSJim Jagielski         method->getMemberName());
438*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(6, method->getPosition());
439*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, method->isOneway());
440*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, method->getParameters().getLength());
441*b1cdbd2cSJim Jagielski     assertEqual(
442*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("p")),
443*b1cdbd2cSJim Jagielski         method->getParameters()[0]->getName());
444*b1cdbd2cSJim Jagielski     assertEqual(
445*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any")),
446*b1cdbd2cSJim Jagielski         method->getParameters()[0]->getType()->getName());
447*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, method->getParameters()[0]->isIn());
448*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, method->getParameters()[0]->isOut());
449*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, method->getParameters()[0]->getPosition());
450*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, method->getExceptions().getLength());
451*b1cdbd2cSJim Jagielski     assertEqual(
452*b1cdbd2cSJim Jagielski         rtl::OUString(
453*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.RuntimeException")),
454*b1cdbd2cSJim Jagielski         method->getExceptions()[0]->getName());
455*b1cdbd2cSJim Jagielski 
456*b1cdbd2cSJim Jagielski     method = css::uno::Reference<
457*b1cdbd2cSJim Jagielski         css::reflection::XInterfaceMethodTypeDescription >(
458*b1cdbd2cSJim Jagielski             members[4], css::uno::UNO_QUERY_THROW);
459*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_INTERFACE_METHOD, method->getTypeClass());
460*b1cdbd2cSJim Jagielski     assertEqual(
461*b1cdbd2cSJim Jagielski         rtl::OUString(
462*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1::f2")),
463*b1cdbd2cSJim Jagielski         method->getName());
464*b1cdbd2cSJim Jagielski     assertEqual(
465*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("f2")),
466*b1cdbd2cSJim Jagielski         method->getMemberName());
467*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(7, method->getPosition());
468*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, method->isOneway());
469*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, method->getParameters().getLength());
470*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, method->getExceptions().getLength());
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski     interface
473*b1cdbd2cSJim Jagielski         = css::uno::Reference< css::reflection::XInterfaceTypeDescription2 >(
474*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
475*b1cdbd2cSJim Jagielski                 rtl::OUString(
476*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
477*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.XTest2"))),
478*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
479*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_INTERFACE, interface->getTypeClass());
480*b1cdbd2cSJim Jagielski     assertEqual(
481*b1cdbd2cSJim Jagielski         rtl::OUString(
482*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest2")),
483*b1cdbd2cSJim Jagielski         interface->getName());
484*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, interface->getBaseTypes().getLength());
485*b1cdbd2cSJim Jagielski     assertEqual(
486*b1cdbd2cSJim Jagielski         rtl::OUString(
487*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Typedef2")),
488*b1cdbd2cSJim Jagielski         interface->getBaseTypes()[0]->getName());
489*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, interface->getOptionalBaseTypes().getLength());
490*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, interface->getMembers().getLength());
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XServiceTypeDescription2 > service;
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski     service = css::uno::Reference< css::reflection::XServiceTypeDescription2 >(
495*b1cdbd2cSJim Jagielski         provider->getByHierarchicalName(
496*b1cdbd2cSJim Jagielski             rtl::OUString(
497*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
498*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Service1"))),
499*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
500*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_SERVICE, service->getTypeClass());
501*b1cdbd2cSJim Jagielski     assertEqual(
502*b1cdbd2cSJim Jagielski         rtl::OUString(
503*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Service1")),
504*b1cdbd2cSJim Jagielski         service->getName());
505*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getMandatoryServices().getLength());
506*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getOptionalServices().getLength());
507*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getMandatoryInterfaces().getLength());
508*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getOptionalInterfaces().getLength());
509*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, service->isSingleInterfaceBased());
510*b1cdbd2cSJim Jagielski     assertEqual(
511*b1cdbd2cSJim Jagielski         rtl::OUString(
512*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1")),
513*b1cdbd2cSJim Jagielski         service->getInterface()->getName());
514*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(2, service->getConstructors().getLength());
515*b1cdbd2cSJim Jagielski     assertEqual(
516*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("c1")),
517*b1cdbd2cSJim Jagielski         service->getConstructors()[0]->getName());
518*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(
519*b1cdbd2cSJim Jagielski         0, service->getConstructors()[0]->getParameters().getLength());
520*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(
521*b1cdbd2cSJim Jagielski         0, service->getConstructors()[0]->getExceptions().getLength());
522*b1cdbd2cSJim Jagielski     assertEqual(
523*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("c2")),
524*b1cdbd2cSJim Jagielski         service->getConstructors()[1]->getName());
525*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(
526*b1cdbd2cSJim Jagielski         1, service->getConstructors()[1]->getParameters().getLength());
527*b1cdbd2cSJim Jagielski     assertEqual(
528*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("p")),
529*b1cdbd2cSJim Jagielski         service->getConstructors()[1]->getParameters()[0]->getName());
530*b1cdbd2cSJim Jagielski     assertEqual(
531*b1cdbd2cSJim Jagielski         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("any")),
532*b1cdbd2cSJim Jagielski         (service->getConstructors()[1]->getParameters()[0]->getType()->
533*b1cdbd2cSJim Jagielski          getName()));
534*b1cdbd2cSJim Jagielski     assertEqual< bool >(
535*b1cdbd2cSJim Jagielski         true, service->getConstructors()[1]->getParameters()[0]->isIn());
536*b1cdbd2cSJim Jagielski     assertEqual< bool >(
537*b1cdbd2cSJim Jagielski         false, service->getConstructors()[1]->getParameters()[0]->isOut());
538*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(
539*b1cdbd2cSJim Jagielski         0, service->getConstructors()[1]->getParameters()[0]->getPosition());
540*b1cdbd2cSJim Jagielski     assertEqual< bool >(
541*b1cdbd2cSJim Jagielski         true,
542*b1cdbd2cSJim Jagielski         service->getConstructors()[1]->getParameters()[0]->isRestParameter());
543*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(
544*b1cdbd2cSJim Jagielski         1, service->getConstructors()[1]->getExceptions().getLength());
545*b1cdbd2cSJim Jagielski     assertEqual(
546*b1cdbd2cSJim Jagielski         rtl::OUString(
547*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.RuntimeException")),
548*b1cdbd2cSJim Jagielski         service->getConstructors()[1]->getExceptions()[0]->getName());
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski     service = css::uno::Reference< css::reflection::XServiceTypeDescription2 >(
551*b1cdbd2cSJim Jagielski         provider->getByHierarchicalName(
552*b1cdbd2cSJim Jagielski             rtl::OUString(
553*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
554*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Service2"))),
555*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
556*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_SERVICE, service->getTypeClass());
557*b1cdbd2cSJim Jagielski     assertEqual(
558*b1cdbd2cSJim Jagielski         rtl::OUString(
559*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Service2")),
560*b1cdbd2cSJim Jagielski         service->getName());
561*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getMandatoryServices().getLength());
562*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getOptionalServices().getLength());
563*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, service->getMandatoryInterfaces().getLength());
564*b1cdbd2cSJim Jagielski     assertEqual(
565*b1cdbd2cSJim Jagielski         rtl::OUString(
566*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1")),
567*b1cdbd2cSJim Jagielski         service->getMandatoryInterfaces()[0]->getName());
568*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(1, service->getOptionalInterfaces().getLength());
569*b1cdbd2cSJim Jagielski     assertEqual(
570*b1cdbd2cSJim Jagielski         rtl::OUString(
571*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XBase")),
572*b1cdbd2cSJim Jagielski         service->getOptionalInterfaces()[0]->getName());
573*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, service->isSingleInterfaceBased());
574*b1cdbd2cSJim Jagielski     assertFalse(service->getInterface().is());
575*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getConstructors().getLength());
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski     service = css::uno::Reference< css::reflection::XServiceTypeDescription2 >(
578*b1cdbd2cSJim Jagielski         provider->getByHierarchicalName(
579*b1cdbd2cSJim Jagielski             rtl::OUString(
580*b1cdbd2cSJim Jagielski                 RTL_CONSTASCII_USTRINGPARAM(
581*b1cdbd2cSJim Jagielski                     "test.registrytdprovider.Service3"))),
582*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY_THROW);
583*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_SERVICE, service->getTypeClass());
584*b1cdbd2cSJim Jagielski     assertEqual(
585*b1cdbd2cSJim Jagielski         rtl::OUString(
586*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Service3")),
587*b1cdbd2cSJim Jagielski         service->getName());
588*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getMandatoryServices().getLength());
589*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getOptionalServices().getLength());
590*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getMandatoryInterfaces().getLength());
591*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getOptionalInterfaces().getLength());
592*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, service->isSingleInterfaceBased());
593*b1cdbd2cSJim Jagielski     assertEqual(
594*b1cdbd2cSJim Jagielski         rtl::OUString(
595*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Typedef2")),
596*b1cdbd2cSJim Jagielski         service->getInterface()->getName());
597*b1cdbd2cSJim Jagielski     assertEqual< sal_Int32 >(0, service->getConstructors().getLength());
598*b1cdbd2cSJim Jagielski 
599*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XSingletonTypeDescription2 >
600*b1cdbd2cSJim Jagielski         singleton;
601*b1cdbd2cSJim Jagielski 
602*b1cdbd2cSJim Jagielski     singleton = css::uno::Reference<
603*b1cdbd2cSJim Jagielski         css::reflection::XSingletonTypeDescription2 >(
604*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
605*b1cdbd2cSJim Jagielski                 rtl::OUString(
606*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
607*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Singleton1"))),
608*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
609*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_SINGLETON, singleton->getTypeClass());
610*b1cdbd2cSJim Jagielski     assertEqual(
611*b1cdbd2cSJim Jagielski         rtl::OUString(
612*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Singleton1")),
613*b1cdbd2cSJim Jagielski         singleton->getName());
614*b1cdbd2cSJim Jagielski     assertFalse(singleton->getService().is());
615*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, singleton->isInterfaceBased());
616*b1cdbd2cSJim Jagielski     assertEqual(
617*b1cdbd2cSJim Jagielski         rtl::OUString(
618*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.XTest1")),
619*b1cdbd2cSJim Jagielski         singleton->getInterface()->getName());
620*b1cdbd2cSJim Jagielski 
621*b1cdbd2cSJim Jagielski     singleton = css::uno::Reference<
622*b1cdbd2cSJim Jagielski         css::reflection::XSingletonTypeDescription2 >(
623*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
624*b1cdbd2cSJim Jagielski                 rtl::OUString(
625*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
626*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Singleton2"))),
627*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
628*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_SINGLETON, singleton->getTypeClass());
629*b1cdbd2cSJim Jagielski     assertEqual(
630*b1cdbd2cSJim Jagielski         rtl::OUString(
631*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Singleton2")),
632*b1cdbd2cSJim Jagielski         singleton->getName());
633*b1cdbd2cSJim Jagielski     assertEqual(
634*b1cdbd2cSJim Jagielski         rtl::OUString(
635*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Service1")),
636*b1cdbd2cSJim Jagielski         singleton->getService()->getName());
637*b1cdbd2cSJim Jagielski     assertEqual< bool >(false, singleton->isInterfaceBased());
638*b1cdbd2cSJim Jagielski     assertFalse(singleton->getInterface().is());
639*b1cdbd2cSJim Jagielski 
640*b1cdbd2cSJim Jagielski     singleton = css::uno::Reference<
641*b1cdbd2cSJim Jagielski         css::reflection::XSingletonTypeDescription2 >(
642*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
643*b1cdbd2cSJim Jagielski                 rtl::OUString(
644*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
645*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Singleton3"))),
646*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW);
647*b1cdbd2cSJim Jagielski     assertEqual(css::uno::TypeClass_SINGLETON, singleton->getTypeClass());
648*b1cdbd2cSJim Jagielski     assertEqual(
649*b1cdbd2cSJim Jagielski         rtl::OUString(
650*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Singleton3")),
651*b1cdbd2cSJim Jagielski         singleton->getName());
652*b1cdbd2cSJim Jagielski     assertFalse(singleton->getService().is());
653*b1cdbd2cSJim Jagielski     assertEqual< bool >(true, singleton->isInterfaceBased());
654*b1cdbd2cSJim Jagielski     assertEqual(
655*b1cdbd2cSJim Jagielski         rtl::OUString(
656*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider.Typedef2")),
657*b1cdbd2cSJim Jagielski         singleton->getInterface()->getName());
658*b1cdbd2cSJim Jagielski 
659*b1cdbd2cSJim Jagielski     css::uno::Reference< css::reflection::XPublished > published;
660*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
661*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
662*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
663*b1cdbd2cSJim Jagielski                 rtl::OUString(
664*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
665*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Enum1"))),
666*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
667*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
668*b1cdbd2cSJim Jagielski     assertTrue(published.is());
669*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
670*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
671*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
672*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
673*b1cdbd2cSJim Jagielski                 rtl::OUString(
674*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
675*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Enum2"))),
676*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
677*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
678*b1cdbd2cSJim Jagielski     assertTrue(published.is());
679*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
680*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
681*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
682*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
683*b1cdbd2cSJim Jagielski                 rtl::OUString(
684*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
685*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Struct1"))),
686*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
687*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
688*b1cdbd2cSJim Jagielski     assertTrue(published.is());
689*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
690*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
691*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
692*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
693*b1cdbd2cSJim Jagielski                 rtl::OUString(
694*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
695*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Struct2"))),
696*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
697*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
698*b1cdbd2cSJim Jagielski     assertTrue(published.is());
699*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
700*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
701*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
702*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
703*b1cdbd2cSJim Jagielski                 rtl::OUString(
704*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
705*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Struct3"))),
706*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
707*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
708*b1cdbd2cSJim Jagielski     assertTrue(published.is());
709*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
710*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
711*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XStructTypeDescription >(
712*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
713*b1cdbd2cSJim Jagielski                 rtl::OUString(
714*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
715*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Struct3"))),
716*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW)->getMemberTypes()[0],
717*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
718*b1cdbd2cSJim Jagielski     assertFalse(published.is());
719*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
720*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
721*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
722*b1cdbd2cSJim Jagielski                 rtl::OUString(
723*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
724*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Struct3a"))),
725*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
726*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
727*b1cdbd2cSJim Jagielski     assertTrue(published.is());
728*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
729*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
730*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
731*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
732*b1cdbd2cSJim Jagielski                 rtl::OUString(
733*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
734*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Exception1"))),
735*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
736*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
737*b1cdbd2cSJim Jagielski     assertTrue(published.is());
738*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
739*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
740*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
741*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
742*b1cdbd2cSJim Jagielski                 rtl::OUString(
743*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
744*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Exception2"))),
745*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
746*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
747*b1cdbd2cSJim Jagielski     assertTrue(published.is());
748*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
749*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
750*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
751*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
752*b1cdbd2cSJim Jagielski                 rtl::OUString(
753*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
754*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.XTest1"))),
755*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
756*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
757*b1cdbd2cSJim Jagielski     assertTrue(published.is());
758*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
759*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
760*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
761*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
762*b1cdbd2cSJim Jagielski                 rtl::OUString(
763*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
764*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.XTest2"))),
765*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
766*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
767*b1cdbd2cSJim Jagielski     assertTrue(published.is());
768*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
769*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
770*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
771*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
772*b1cdbd2cSJim Jagielski                 rtl::OUString(
773*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
774*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Typedef1"))),
775*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
776*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
777*b1cdbd2cSJim Jagielski     assertTrue(published.is());
778*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
779*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
780*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
781*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
782*b1cdbd2cSJim Jagielski                 rtl::OUString(
783*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
784*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Typedef2"))),
785*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
786*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
787*b1cdbd2cSJim Jagielski     assertTrue(published.is());
788*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
789*b1cdbd2cSJim Jagielski     //TODO: check constants test.registrytdprovider.Const1 (published),
790*b1cdbd2cSJim Jagielski     // test.registrytdprovider.Const2 (unpublished), and
791*b1cdbd2cSJim Jagielski     // test.registrytdprovider.Consts1.C (no XPublished), which are not
792*b1cdbd2cSJim Jagielski     // accessible via provider->getByHierarchicalName (see #i31428)
793*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
794*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
795*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
796*b1cdbd2cSJim Jagielski                 rtl::OUString(
797*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
798*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Consts1"))),
799*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
800*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
801*b1cdbd2cSJim Jagielski     assertTrue(published.is());
802*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
803*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
804*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
805*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
806*b1cdbd2cSJim Jagielski                 rtl::OUString(
807*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
808*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Consts2"))),
809*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
810*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
811*b1cdbd2cSJim Jagielski     assertTrue(published.is());
812*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
813*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
814*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
815*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
816*b1cdbd2cSJim Jagielski                 rtl::OUString(
817*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM("test.registrytdprovider"))),
818*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
819*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
820*b1cdbd2cSJim Jagielski     assertFalse(published.is());
821*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
822*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
823*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
824*b1cdbd2cSJim Jagielski                 rtl::OUString(
825*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
826*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Service1"))),
827*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
828*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
829*b1cdbd2cSJim Jagielski     assertTrue(published.is());
830*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
831*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
832*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
833*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
834*b1cdbd2cSJim Jagielski                 rtl::OUString(
835*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
836*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Service2"))),
837*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
838*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
839*b1cdbd2cSJim Jagielski     assertTrue(published.is());
840*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
841*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
842*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
843*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
844*b1cdbd2cSJim Jagielski                 rtl::OUString(
845*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
846*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Singleton2"))),
847*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
848*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
849*b1cdbd2cSJim Jagielski     assertTrue(published.is());
850*b1cdbd2cSJim Jagielski     assertTrue(published->isPublished());
851*b1cdbd2cSJim Jagielski     published = css::uno::Reference< css::reflection::XPublished >(
852*b1cdbd2cSJim Jagielski         css::uno::Reference< css::reflection::XTypeDescription >(
853*b1cdbd2cSJim Jagielski             provider->getByHierarchicalName(
854*b1cdbd2cSJim Jagielski                 rtl::OUString(
855*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM(
856*b1cdbd2cSJim Jagielski                         "test.registrytdprovider.Singleton1"))),
857*b1cdbd2cSJim Jagielski             css::uno::UNO_QUERY_THROW),
858*b1cdbd2cSJim Jagielski         css::uno::UNO_QUERY);
859*b1cdbd2cSJim Jagielski     assertTrue(published.is());
860*b1cdbd2cSJim Jagielski     assertFalse(published->isPublished());
861*b1cdbd2cSJim Jagielski 
862*b1cdbd2cSJim Jagielski     return 0;
863*b1cdbd2cSJim Jagielski }
864*b1cdbd2cSJim Jagielski 
getImplementationName()865*b1cdbd2cSJim Jagielski rtl::OUString Service::getImplementationName() {
866*b1cdbd2cSJim Jagielski     return rtl::OUString::createFromAscii("test.registrytdprovider.impl");
867*b1cdbd2cSJim Jagielski }
868*b1cdbd2cSJim Jagielski 
getSupportedServiceNames()869*b1cdbd2cSJim Jagielski css::uno::Sequence< rtl::OUString > Service::getSupportedServiceNames() {
870*b1cdbd2cSJim Jagielski     return css::uno::Sequence< rtl::OUString >();
871*b1cdbd2cSJim Jagielski }
872*b1cdbd2cSJim Jagielski 
createInstance(css::uno::Reference<css::uno::XComponentContext> const & context)873*b1cdbd2cSJim Jagielski css::uno::Reference< css::uno::XInterface > Service::createInstance(
874*b1cdbd2cSJim Jagielski     css::uno::Reference< css::uno::XComponentContext > const & context)
875*b1cdbd2cSJim Jagielski     throw (css::uno::Exception)
876*b1cdbd2cSJim Jagielski {
877*b1cdbd2cSJim Jagielski     return static_cast< cppu::OWeakObject * >(new Service(context));
878*b1cdbd2cSJim Jagielski }
879*b1cdbd2cSJim Jagielski 
component_getImplementationEnvironment(char const ** envTypeName,uno_Environment **)880*b1cdbd2cSJim Jagielski extern "C" void SAL_CALL component_getImplementationEnvironment(
881*b1cdbd2cSJim Jagielski     char const ** envTypeName, uno_Environment **)
882*b1cdbd2cSJim Jagielski {
883*b1cdbd2cSJim Jagielski     if (envTypeName != 0) {
884*b1cdbd2cSJim Jagielski         *envTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
885*b1cdbd2cSJim Jagielski     }
886*b1cdbd2cSJim Jagielski }
887*b1cdbd2cSJim Jagielski 
component_getFactory(char const * implName,void * serviceManager,void *)888*b1cdbd2cSJim Jagielski extern "C" void * SAL_CALL component_getFactory(char const * implName,
889*b1cdbd2cSJim Jagielski                                                 void * serviceManager, void *) {
890*b1cdbd2cSJim Jagielski     void * p = 0;
891*b1cdbd2cSJim Jagielski     if (serviceManager != 0) {
892*b1cdbd2cSJim Jagielski         css::uno::Reference< css::lang::XSingleComponentFactory > f;
893*b1cdbd2cSJim Jagielski         if (Service::getImplementationName().equalsAscii(implName)) {
894*b1cdbd2cSJim Jagielski             f = cppu::createSingleComponentFactory(
895*b1cdbd2cSJim Jagielski                 &Service::createInstance, Service::getImplementationName(),
896*b1cdbd2cSJim Jagielski                 Service::getSupportedServiceNames());
897*b1cdbd2cSJim Jagielski         }
898*b1cdbd2cSJim Jagielski         if (f.is()) {
899*b1cdbd2cSJim Jagielski             f->acquire();
900*b1cdbd2cSJim Jagielski             p = f.get();
901*b1cdbd2cSJim Jagielski         }
902*b1cdbd2cSJim Jagielski     }
903*b1cdbd2cSJim Jagielski     return p;
904*b1cdbd2cSJim Jagielski }
905*b1cdbd2cSJim Jagielski 
906*b1cdbd2cSJim Jagielski namespace {
907*b1cdbd2cSJim Jagielski 
writeInfo(void * registryKey,rtl::OUString const & implementationName,css::uno::Sequence<rtl::OUString> const & serviceNames)908*b1cdbd2cSJim Jagielski bool writeInfo(void * registryKey, rtl::OUString const & implementationName,
909*b1cdbd2cSJim Jagielski                css::uno::Sequence< rtl::OUString > const & serviceNames) {
910*b1cdbd2cSJim Jagielski     rtl::OUString keyName(rtl::OUString::createFromAscii("/"));
911*b1cdbd2cSJim Jagielski     keyName += implementationName;
912*b1cdbd2cSJim Jagielski     keyName += rtl::OUString::createFromAscii("/UNO/SERVICES");
913*b1cdbd2cSJim Jagielski     css::uno::Reference< css::registry::XRegistryKey > key;
914*b1cdbd2cSJim Jagielski     try {
915*b1cdbd2cSJim Jagielski         key = static_cast< css::registry::XRegistryKey * >(registryKey)->
916*b1cdbd2cSJim Jagielski             createKey(keyName);
917*b1cdbd2cSJim Jagielski     } catch (css::registry::InvalidRegistryException &) {}
918*b1cdbd2cSJim Jagielski     if (!key.is()) {
919*b1cdbd2cSJim Jagielski         return false;
920*b1cdbd2cSJim Jagielski     }
921*b1cdbd2cSJim Jagielski     bool success = true;
922*b1cdbd2cSJim Jagielski     for (sal_Int32 i = 0; i < serviceNames.getLength(); ++i) {
923*b1cdbd2cSJim Jagielski         try {
924*b1cdbd2cSJim Jagielski             key->createKey(serviceNames[i]);
925*b1cdbd2cSJim Jagielski         } catch (css::registry::InvalidRegistryException &) {
926*b1cdbd2cSJim Jagielski             success = false;
927*b1cdbd2cSJim Jagielski             break;
928*b1cdbd2cSJim Jagielski         }
929*b1cdbd2cSJim Jagielski     }
930*b1cdbd2cSJim Jagielski     return success;
931*b1cdbd2cSJim Jagielski }
932*b1cdbd2cSJim Jagielski 
933*b1cdbd2cSJim Jagielski }
934*b1cdbd2cSJim Jagielski 
component_writeInfo(void *,void * registryKey)935*b1cdbd2cSJim Jagielski extern "C" sal_Bool SAL_CALL component_writeInfo(void *, void * registryKey) {
936*b1cdbd2cSJim Jagielski     return registryKey
937*b1cdbd2cSJim Jagielski         && writeInfo(registryKey, Service::getImplementationName(),
938*b1cdbd2cSJim Jagielski                      Service::getSupportedServiceNames());
939*b1cdbd2cSJim Jagielski }
940