1*2a97ec55SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*2a97ec55SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*2a97ec55SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*2a97ec55SAndrew Rist * distributed with this work for additional information
6*2a97ec55SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*2a97ec55SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*2a97ec55SAndrew Rist * "License"); you may not use this file except in compliance
9*2a97ec55SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*2a97ec55SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*2a97ec55SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*2a97ec55SAndrew Rist * software distributed under the License is distributed on an
15*2a97ec55SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2a97ec55SAndrew Rist * KIND, either express or implied. See the License for the
17*2a97ec55SAndrew Rist * specific language governing permissions and limitations
18*2a97ec55SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*2a97ec55SAndrew Rist *************************************************************/
21*2a97ec55SAndrew Rist
22*2a97ec55SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_extensions.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <stdio.h>
28cdf0e10cSrcweir #include <string.h>
29cdf0e10cSrcweir #include <smart/com/sun/star/test/XSimpleTest.hxx>
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <rtl/wstring.hxx>
32cdf0e10cSrcweir #include <osl/time.h>
33cdf0e10cSrcweir //#include <vos/dynload.hxx>
34cdf0e10cSrcweir //#include <vos/diagnose.hxx>
35cdf0e10cSrcweir #include <usr/weak.hxx>
36cdf0e10cSrcweir #include <tools/string.hxx>
37cdf0e10cSrcweir #include <vos/conditn.hxx>
38cdf0e10cSrcweir
39cdf0e10cSrcweir #include <smart/com/sun/star/io/XOutputStream.hxx>
40cdf0e10cSrcweir #include <smart/com/sun/star/xml/sax/SAXParseException.hxx>
41cdf0e10cSrcweir #include <smart/com/sun/star/xml/sax/XParser.hxx>
42cdf0e10cSrcweir #include <smart/com/sun/star/xml/sax/XExtendedDocumentHandler.hxx>
43cdf0e10cSrcweir
44cdf0e10cSrcweir #include <smart/com/sun/star/lang/XMultiServiceFactory.hxx> // for the multiservice-factories
45cdf0e10cSrcweir #include <usr/factoryhlp.hxx>
46cdf0e10cSrcweir
47cdf0e10cSrcweir #include <usr/reflserv.hxx> // for EXTERN_SERVICE_CALLTYPE
48cdf0e10cSrcweir
49cdf0e10cSrcweir #include "factory.hxx"
50cdf0e10cSrcweir
51cdf0e10cSrcweir using namespace rtl;
52cdf0e10cSrcweir using namespace vos;
53cdf0e10cSrcweir using namespace usr;
54cdf0e10cSrcweir
55cdf0e10cSrcweir
56cdf0e10cSrcweir #define BUILD_ERROR(expr, Message)\
57cdf0e10cSrcweir {\
58cdf0e10cSrcweir m_seqErrors.realloc( m_seqErrors.getLen() + 1 ); \
59cdf0e10cSrcweir m_seqExceptions.realloc( m_seqExceptions.getLen() + 1 ); \
60cdf0e10cSrcweir String str; \
61cdf0e10cSrcweir str += __FILE__;\
62cdf0e10cSrcweir str += " "; \
63cdf0e10cSrcweir str += "(" ; \
64cdf0e10cSrcweir str += __LINE__ ;\
65cdf0e10cSrcweir str += ")\n";\
66cdf0e10cSrcweir str += "[ " ; \
67cdf0e10cSrcweir str += #expr; \
68cdf0e10cSrcweir str += " ] : " ; \
69cdf0e10cSrcweir str += Message; \
70cdf0e10cSrcweir m_seqErrors.getArray()[ m_seqErrors.getLen()-1] = StringToUString( str , CHARSET_SYSTEM ); \
71cdf0e10cSrcweir }\
72cdf0e10cSrcweir ((void)0)
73cdf0e10cSrcweir
74cdf0e10cSrcweir
75cdf0e10cSrcweir #define WARNING_ASSERT(expr, Message) \
76cdf0e10cSrcweir if( ! (expr) ) { \
77cdf0e10cSrcweir m_seqWarnings.realloc( m_seqErrors.getLen() +1 ); \
78cdf0e10cSrcweir String str;\
79cdf0e10cSrcweir str += __FILE__;\
80cdf0e10cSrcweir str += " "; \
81cdf0e10cSrcweir str += "(" ; \
82cdf0e10cSrcweir str += __LINE__ ;\
83cdf0e10cSrcweir str += ")\n";\
84cdf0e10cSrcweir str += "[ " ; \
85cdf0e10cSrcweir str += #expr; \
86cdf0e10cSrcweir str += " ] : " ; \
87cdf0e10cSrcweir str += Message; \
88cdf0e10cSrcweir m_seqWarnings.getArray()[ m_seqWarnings.getLen()-1] = StringToUString( str , CHARSET_SYSTEM ); \
89cdf0e10cSrcweir return; \
90cdf0e10cSrcweir }\
91cdf0e10cSrcweir ((void)0)
92cdf0e10cSrcweir
93cdf0e10cSrcweir #define ERROR_ASSERT(expr, Message) \
94cdf0e10cSrcweir if( ! (expr) ) { \
95cdf0e10cSrcweir BUILD_ERROR(expr, Message );\
96cdf0e10cSrcweir return; \
97cdf0e10cSrcweir }\
98cdf0e10cSrcweir ((void)0)
99cdf0e10cSrcweir
100cdf0e10cSrcweir #define ERROR_EXCEPTION_ASSERT(expr, Message, Exception) \
101cdf0e10cSrcweir if( !(expr)) { \
102cdf0e10cSrcweir BUILD_ERROR(expr,Message);\
103cdf0e10cSrcweir m_seqExceptions.getArray()[ m_seqExceptions.getLen()-1] = UsrAny( Exception );\
104cdf0e10cSrcweir return; \
105cdf0e10cSrcweir } \
106cdf0e10cSrcweir ((void)0)
107cdf0e10cSrcweir
108cdf0e10cSrcweir /****
109cdf0e10cSrcweir * test szenarios :
110cdf0e10cSrcweir *
111cdf0e10cSrcweir *
112cdf0e10cSrcweir *
113cdf0e10cSrcweir ****/
114cdf0e10cSrcweir
115cdf0e10cSrcweir
116cdf0e10cSrcweir
117cdf0e10cSrcweir class OSaxParserTest :
118cdf0e10cSrcweir public XSimpleTest,
119cdf0e10cSrcweir public OWeakObject
120cdf0e10cSrcweir {
121cdf0e10cSrcweir public:
OSaxParserTest(const XMultiServiceFactoryRef & rFactory)122cdf0e10cSrcweir OSaxParserTest( const XMultiServiceFactoryRef & rFactory ) : m_rFactory( rFactory )
123cdf0e10cSrcweir {
124cdf0e10cSrcweir
125cdf0e10cSrcweir }
126cdf0e10cSrcweir
127cdf0e10cSrcweir public: // refcounting
128cdf0e10cSrcweir BOOL queryInterface( Uik aUik, XInterfaceRef & rOut );
acquire()129cdf0e10cSrcweir void acquire() { OWeakObject::acquire(); }
release()130cdf0e10cSrcweir void release() { OWeakObject::release(); }
getImplementation(Reflection * p)131cdf0e10cSrcweir void* getImplementation(Reflection *p) { return OWeakObject::getImplementation(p); }
132cdf0e10cSrcweir
133cdf0e10cSrcweir public:
134cdf0e10cSrcweir virtual void testInvariant(const UString& TestName, const XInterfaceRef& TestObject)
135cdf0e10cSrcweir THROWS( ( IllegalArgumentException,
136cdf0e10cSrcweir UsrSystemException) );
137cdf0e10cSrcweir
138cdf0e10cSrcweir virtual INT32 test( const UString& TestName,
139cdf0e10cSrcweir const XInterfaceRef& TestObject,
140cdf0e10cSrcweir INT32 hTestHandle) THROWS( ( IllegalArgumentException,
141cdf0e10cSrcweir UsrSystemException) );
142cdf0e10cSrcweir
143cdf0e10cSrcweir virtual BOOL testPassed(void) THROWS( ( UsrSystemException) );
144cdf0e10cSrcweir virtual Sequence< UString > getErrors(void) THROWS( (UsrSystemException) );
145cdf0e10cSrcweir virtual Sequence< UsrAny > getErrorExceptions(void) THROWS( (UsrSystemException) );
146cdf0e10cSrcweir virtual Sequence< UString > getWarnings(void) THROWS( (UsrSystemException) );
147cdf0e10cSrcweir
148cdf0e10cSrcweir private:
149cdf0e10cSrcweir void testSimple( const XParserRef &r );
150cdf0e10cSrcweir void testNamespaces( const XParserRef &r );
151cdf0e10cSrcweir void testFile( const XParserRef &r );
152cdf0e10cSrcweir void testEncoding( const XParserRef &rParser );
153cdf0e10cSrcweir void testPerformance( const XParserRef &rParser );
154cdf0e10cSrcweir
155cdf0e10cSrcweir private:
156cdf0e10cSrcweir Sequence<UsrAny> m_seqExceptions;
157cdf0e10cSrcweir Sequence<UString> m_seqErrors;
158cdf0e10cSrcweir Sequence<UString> m_seqWarnings;
159cdf0e10cSrcweir XMultiServiceFactoryRef m_rFactory;
160cdf0e10cSrcweir };
161cdf0e10cSrcweir
162cdf0e10cSrcweir
163cdf0e10cSrcweir
164cdf0e10cSrcweir /**
165cdf0e10cSrcweir * for external binding
166cdf0e10cSrcweir *
167cdf0e10cSrcweir *
168cdf0e10cSrcweir **/
OSaxParserTest_CreateInstance(const XMultiServiceFactoryRef & rSMgr)169cdf0e10cSrcweir XInterfaceRef OSaxParserTest_CreateInstance( const XMultiServiceFactoryRef & rSMgr ) THROWS((Exception))
170cdf0e10cSrcweir {
171cdf0e10cSrcweir OSaxParserTest *p = new OSaxParserTest( rSMgr );
172cdf0e10cSrcweir XInterfaceRef xService = *p;
173cdf0e10cSrcweir return xService;
174cdf0e10cSrcweir }
175cdf0e10cSrcweir
176cdf0e10cSrcweir
OSaxParserTest_getServiceName()177cdf0e10cSrcweir UString OSaxParserTest_getServiceName( ) THROWS( () )
178cdf0e10cSrcweir {
179cdf0e10cSrcweir return L"test.com.sun.star.xml.sax.Parser";
180cdf0e10cSrcweir }
181cdf0e10cSrcweir
OSaxParserTest_getImplementationName()182cdf0e10cSrcweir UString OSaxParserTest_getImplementationName( ) THROWS( () )
183cdf0e10cSrcweir {
184cdf0e10cSrcweir return L"test.extensions.xml.sax.Parser";
185cdf0e10cSrcweir }
186cdf0e10cSrcweir
OSaxParserTest_getSupportedServiceNames()187cdf0e10cSrcweir Sequence<UString> OSaxParserTest_getSupportedServiceNames( ) THROWS( () )
188cdf0e10cSrcweir {
189cdf0e10cSrcweir Sequence<UString> aRet(1);
190cdf0e10cSrcweir
191cdf0e10cSrcweir aRet.getArray()[0] = OSaxParserTest_getImplementationName( );
192cdf0e10cSrcweir
193cdf0e10cSrcweir return aRet;
194cdf0e10cSrcweir }
195cdf0e10cSrcweir
196cdf0e10cSrcweir
queryInterface(Uik uik,XInterfaceRef & rOut)197cdf0e10cSrcweir BOOL OSaxParserTest::queryInterface( Uik uik , XInterfaceRef &rOut )
198cdf0e10cSrcweir {
199cdf0e10cSrcweir if( XSimpleTest::getSmartUik() == uik ) {
200cdf0e10cSrcweir rOut = (XSimpleTest *) this;
201cdf0e10cSrcweir }
202cdf0e10cSrcweir else {
203cdf0e10cSrcweir return OWeakObject::queryInterface( uik , rOut );
204cdf0e10cSrcweir }
205cdf0e10cSrcweir return TRUE;
206cdf0e10cSrcweir }
207cdf0e10cSrcweir
208cdf0e10cSrcweir
testInvariant(const UString & TestName,const XInterfaceRef & TestObject)209cdf0e10cSrcweir void OSaxParserTest::testInvariant( const UString& TestName, const XInterfaceRef& TestObject )
210cdf0e10cSrcweir THROWS( ( IllegalArgumentException,
211cdf0e10cSrcweir UsrSystemException) )
212cdf0e10cSrcweir {
213cdf0e10cSrcweir if( L"com.sun.star.xml.sax.Parser" == TestName ) {
214cdf0e10cSrcweir XParserRef parser( TestObject , USR_QUERY );
215cdf0e10cSrcweir
216cdf0e10cSrcweir ERROR_ASSERT( parser.is() , "XDataInputStream cannot be queried" );
217cdf0e10cSrcweir }
218cdf0e10cSrcweir }
219cdf0e10cSrcweir
220cdf0e10cSrcweir
test(const UString & TestName,const XInterfaceRef & TestObject,INT32 hTestHandle)221cdf0e10cSrcweir INT32 OSaxParserTest::test( const UString& TestName,
222cdf0e10cSrcweir const XInterfaceRef& TestObject,
223cdf0e10cSrcweir INT32 hTestHandle) THROWS( ( IllegalArgumentException,
224cdf0e10cSrcweir UsrSystemException) )
225cdf0e10cSrcweir {
226cdf0e10cSrcweir if( L"com.sun.star.xml.sax.Parser" == TestName ) {
227cdf0e10cSrcweir try {
228cdf0e10cSrcweir if( 0 == hTestHandle ) {
229cdf0e10cSrcweir testInvariant( TestName , TestObject );
230cdf0e10cSrcweir }
231cdf0e10cSrcweir else {
232cdf0e10cSrcweir
233cdf0e10cSrcweir XParserRef parser( TestObject , USR_QUERY );
234cdf0e10cSrcweir
235cdf0e10cSrcweir if( 1 == hTestHandle ) {
236cdf0e10cSrcweir testSimple( parser );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir else if( 2 == hTestHandle ) {
239cdf0e10cSrcweir testNamespaces( parser );
240cdf0e10cSrcweir }
241cdf0e10cSrcweir else if( 3 == hTestHandle ) {
242cdf0e10cSrcweir testEncoding( parser );
243cdf0e10cSrcweir }
244cdf0e10cSrcweir else if( 4 == hTestHandle ) {
245cdf0e10cSrcweir testFile( parser );
246cdf0e10cSrcweir }
247cdf0e10cSrcweir else if( 5 == hTestHandle ) {
248cdf0e10cSrcweir testPerformance( parser );
249cdf0e10cSrcweir }
250cdf0e10cSrcweir }
251cdf0e10cSrcweir }
252cdf0e10cSrcweir catch( Exception& e ) {
253cdf0e10cSrcweir BUILD_ERROR( 0 , UStringToString( e.getName() , CHARSET_SYSTEM ).GetCharStr() );
254cdf0e10cSrcweir }
255cdf0e10cSrcweir catch(...) {
256cdf0e10cSrcweir BUILD_ERROR( 0 , "unknown exception (Exception is not base class)" );
257cdf0e10cSrcweir }
258cdf0e10cSrcweir
259cdf0e10cSrcweir hTestHandle ++;
260cdf0e10cSrcweir
261cdf0e10cSrcweir if( hTestHandle >= 6) {
262cdf0e10cSrcweir // all tests finished.
263cdf0e10cSrcweir hTestHandle = -1;
264cdf0e10cSrcweir }
265cdf0e10cSrcweir }
266cdf0e10cSrcweir else {
267cdf0e10cSrcweir BUILD_ERROR( 0 , "service not supported by test." );
268cdf0e10cSrcweir }
269cdf0e10cSrcweir return hTestHandle;
270cdf0e10cSrcweir }
271cdf0e10cSrcweir
272cdf0e10cSrcweir
273cdf0e10cSrcweir
testPassed(void)274cdf0e10cSrcweir BOOL OSaxParserTest::testPassed(void) THROWS( (UsrSystemException) )
275cdf0e10cSrcweir {
276cdf0e10cSrcweir return m_seqErrors.getLen() == 0;
277cdf0e10cSrcweir }
278cdf0e10cSrcweir
279cdf0e10cSrcweir
getErrors(void)280cdf0e10cSrcweir Sequence< UString > OSaxParserTest::getErrors(void) THROWS( (UsrSystemException) )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir return m_seqErrors;
283cdf0e10cSrcweir }
284cdf0e10cSrcweir
285cdf0e10cSrcweir
getErrorExceptions(void)286cdf0e10cSrcweir Sequence< UsrAny > OSaxParserTest::getErrorExceptions(void) THROWS( (UsrSystemException) )
287cdf0e10cSrcweir {
288cdf0e10cSrcweir return m_seqExceptions;
289cdf0e10cSrcweir }
290cdf0e10cSrcweir
291cdf0e10cSrcweir
getWarnings(void)292cdf0e10cSrcweir Sequence< UString > OSaxParserTest::getWarnings(void) THROWS( (UsrSystemException) )
293cdf0e10cSrcweir {
294cdf0e10cSrcweir return m_seqWarnings;
295cdf0e10cSrcweir }
296cdf0e10cSrcweir
createStreamFromSequence(const Sequence<BYTE> seqBytes,XMultiServiceFactoryRef & xSMgr)297cdf0e10cSrcweir XInputStreamRef createStreamFromSequence( const Sequence<BYTE> seqBytes , XMultiServiceFactoryRef &xSMgr )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir XInterfaceRef xOutStreamService = xSMgr->createInstance( L"com.sun.star.io.Pipe" );
300cdf0e10cSrcweir OSL_ASSERT( xOutStreamService.is() );
301cdf0e10cSrcweir XOutputStreamRef rOutStream( xOutStreamService , USR_QUERY );
302cdf0e10cSrcweir OSL_ASSERT( rOutStream.is() );
303cdf0e10cSrcweir
304cdf0e10cSrcweir XInputStreamRef rInStream( xOutStreamService , USR_QUERY );
305cdf0e10cSrcweir OSL_ASSERT( rInStream.is() );
306cdf0e10cSrcweir
307cdf0e10cSrcweir rOutStream->writeBytes( seqBytes );
308cdf0e10cSrcweir rOutStream->flush();
309cdf0e10cSrcweir rOutStream->closeOutput();
310cdf0e10cSrcweir
311cdf0e10cSrcweir return rInStream;
312cdf0e10cSrcweir }
313cdf0e10cSrcweir
createStreamFromFile(const char * pcFile,XMultiServiceFactoryRef & xSMgr)314cdf0e10cSrcweir XInputStreamRef createStreamFromFile( const char *pcFile , XMultiServiceFactoryRef &xSMgr )
315cdf0e10cSrcweir {
316cdf0e10cSrcweir FILE *f = fopen( pcFile , "rb" );
317cdf0e10cSrcweir XInputStreamRef r;
318cdf0e10cSrcweir
319cdf0e10cSrcweir if( f ) {
320cdf0e10cSrcweir fseek( f , 0 , SEEK_END );
321cdf0e10cSrcweir int nLength = ftell( f );
322cdf0e10cSrcweir fseek( f , 0 , SEEK_SET );
323cdf0e10cSrcweir
324cdf0e10cSrcweir Sequence<BYTE> seqIn(nLength);
325cdf0e10cSrcweir fread( seqIn.getArray() , nLength , 1 , f );
326cdf0e10cSrcweir
327cdf0e10cSrcweir r = createStreamFromSequence( seqIn , xSMgr );
328cdf0e10cSrcweir fclose( f );
329cdf0e10cSrcweir }
330cdf0e10cSrcweir return r;
331cdf0e10cSrcweir }
332cdf0e10cSrcweir
333cdf0e10cSrcweir
334cdf0e10cSrcweir
335cdf0e10cSrcweir
336cdf0e10cSrcweir
337cdf0e10cSrcweir
338cdf0e10cSrcweir
339cdf0e10cSrcweir
340cdf0e10cSrcweir
341cdf0e10cSrcweir #define PCHAR_TO_USTRING(x) StringToUString(String(x),CHARSET_PC_1252)
342cdf0e10cSrcweir #define USTRING_TO_PCHAR(x) UStringToString(x,CHARSET_PC_437).GetStr()
343cdf0e10cSrcweir
344cdf0e10cSrcweir
345cdf0e10cSrcweir
346cdf0e10cSrcweir class TestDocumentHandler :
347cdf0e10cSrcweir public XExtendedDocumentHandler,
348cdf0e10cSrcweir public XEntityResolver,
349cdf0e10cSrcweir public XErrorHandler,
350cdf0e10cSrcweir public OWeakObject
351cdf0e10cSrcweir {
352cdf0e10cSrcweir public:
TestDocumentHandler(XMultiServiceFactoryRef & r,BOOL bPrint)353cdf0e10cSrcweir TestDocumentHandler( XMultiServiceFactoryRef &r , BOOL bPrint )
354cdf0e10cSrcweir {
355cdf0e10cSrcweir m_xSMgr = r;
356cdf0e10cSrcweir m_bPrint = bPrint;
357cdf0e10cSrcweir }
358cdf0e10cSrcweir
359cdf0e10cSrcweir
360cdf0e10cSrcweir public:
361cdf0e10cSrcweir BOOL queryInterface( Uik aUik, XInterfaceRef & rOut );
acquire()362cdf0e10cSrcweir void acquire() { OWeakObject::acquire(); }
release()363cdf0e10cSrcweir void release() { OWeakObject::release(); }
getImplementation(Reflection * p)364cdf0e10cSrcweir void* getImplementation(Reflection *p) { return OWeakObject::getImplementation(p); }
365cdf0e10cSrcweir
366cdf0e10cSrcweir
367cdf0e10cSrcweir public: // Error handler
error(const UsrAny & aSAXParseException)368cdf0e10cSrcweir virtual void error(const UsrAny& aSAXParseException) THROWS( (SAXException, UsrSystemException) )
369cdf0e10cSrcweir {
370cdf0e10cSrcweir printf( "Error !\n" );
371cdf0e10cSrcweir THROW( SAXException( L"error from error handler" , XInterfaceRef() , aSAXParseException ) );
372cdf0e10cSrcweir }
fatalError(const UsrAny & aSAXParseException)373cdf0e10cSrcweir virtual void fatalError(const UsrAny& aSAXParseException) THROWS( (SAXException, UsrSystemException) )
374cdf0e10cSrcweir {
375cdf0e10cSrcweir printf( "Fatal Error !\n" );
376cdf0e10cSrcweir }
warning(const UsrAny & aSAXParseException)377cdf0e10cSrcweir virtual void warning(const UsrAny& aSAXParseException) THROWS( (SAXException, UsrSystemException) )
378cdf0e10cSrcweir {
379cdf0e10cSrcweir printf( "Warning !\n" );
380cdf0e10cSrcweir }
381cdf0e10cSrcweir
382cdf0e10cSrcweir
383cdf0e10cSrcweir public: // ExtendedDocumentHandler
384cdf0e10cSrcweir
startDocument(void)385cdf0e10cSrcweir virtual void startDocument(void) THROWS( (SAXException, UsrSystemException) )
386cdf0e10cSrcweir {
387cdf0e10cSrcweir m_iLevel = 0;
388cdf0e10cSrcweir m_iElementCount = 0;
389cdf0e10cSrcweir m_iAttributeCount = 0;
390cdf0e10cSrcweir m_iWhitespaceCount =0;
391cdf0e10cSrcweir m_iCharCount=0;
392cdf0e10cSrcweir if( m_bPrint ) {
393cdf0e10cSrcweir printf( "document started\n" );
394cdf0e10cSrcweir }
395cdf0e10cSrcweir }
endDocument(void)396cdf0e10cSrcweir virtual void endDocument(void) THROWS( (SAXException, UsrSystemException) )
397cdf0e10cSrcweir {
398cdf0e10cSrcweir if( m_bPrint ) {
399cdf0e10cSrcweir printf( "document finished\n" );
400cdf0e10cSrcweir printf( "(ElementCount %d),(AttributeCount %d),(WhitespaceCount %d),(CharCount %d)\n",
401cdf0e10cSrcweir m_iElementCount, m_iAttributeCount, m_iWhitespaceCount , m_iCharCount );
402cdf0e10cSrcweir }
403cdf0e10cSrcweir }
startElement(const UString & aName,const XAttributeListRef & xAttribs)404cdf0e10cSrcweir virtual void startElement(const UString& aName, const XAttributeListRef& xAttribs)
405cdf0e10cSrcweir THROWS( (SAXException,UsrSystemException) )
406cdf0e10cSrcweir {
407cdf0e10cSrcweir
408cdf0e10cSrcweir if( m_rLocator.is() ) {
409cdf0e10cSrcweir if( m_bPrint )
410cdf0e10cSrcweir printf( "%s(%d):" , USTRING_TO_PCHAR( m_rLocator->getSystemId() ) ,
411cdf0e10cSrcweir m_rLocator->getLineNumber() );
412cdf0e10cSrcweir }
413cdf0e10cSrcweir if( m_bPrint ) {
414cdf0e10cSrcweir int i;
415cdf0e10cSrcweir for( i = 0; i < m_iLevel ; i ++ ) {
416cdf0e10cSrcweir printf( " " );
417cdf0e10cSrcweir }
418cdf0e10cSrcweir printf( "<%s> " , USTRING_TO_PCHAR( aName ) );
419cdf0e10cSrcweir
420cdf0e10cSrcweir for( i = 0 ; i < xAttribs->getLength() ; i ++ ) {
421cdf0e10cSrcweir printf( "(%s,%s,'%s')" , USTRING_TO_PCHAR( xAttribs->getNameByIndex( i ) ) ,
422cdf0e10cSrcweir USTRING_TO_PCHAR( xAttribs->getTypeByIndex( i ) ) ,
423cdf0e10cSrcweir USTRING_TO_PCHAR( xAttribs->getValueByIndex( i ) ) );
424cdf0e10cSrcweir }
425cdf0e10cSrcweir printf( "\n" );
426cdf0e10cSrcweir }
427cdf0e10cSrcweir m_iLevel ++;
428cdf0e10cSrcweir m_iElementCount ++;
429cdf0e10cSrcweir m_iAttributeCount += xAttribs->getLength();
430cdf0e10cSrcweir }
endElement(const UString & aName)431cdf0e10cSrcweir virtual void endElement(const UString& aName) THROWS( (SAXException,UsrSystemException) )
432cdf0e10cSrcweir {
433cdf0e10cSrcweir OSL_ASSERT( m_iLevel );
434cdf0e10cSrcweir m_iLevel --;
435cdf0e10cSrcweir if( m_bPrint ) {
436cdf0e10cSrcweir int i;
437cdf0e10cSrcweir for( i = 0; i < m_iLevel ; i ++ ) {
438cdf0e10cSrcweir printf( " " );
439cdf0e10cSrcweir }
440cdf0e10cSrcweir printf( "</%s>\n" , USTRING_TO_PCHAR( aName ) );
441cdf0e10cSrcweir }
442cdf0e10cSrcweir }
443cdf0e10cSrcweir
characters(const UString & aChars)444cdf0e10cSrcweir virtual void characters(const UString& aChars) THROWS( (SAXException,UsrSystemException) )
445cdf0e10cSrcweir {
446cdf0e10cSrcweir if( m_bPrint ) {
447cdf0e10cSrcweir int i;
448cdf0e10cSrcweir for( i = 0; i < m_iLevel ; i ++ ) {
449cdf0e10cSrcweir printf( " " );
450cdf0e10cSrcweir }
451cdf0e10cSrcweir printf( "%s\n" , USTRING_TO_PCHAR( aChars ) );
452cdf0e10cSrcweir }
453cdf0e10cSrcweir m_iCharCount += aChars.len();
454cdf0e10cSrcweir }
ignorableWhitespace(const UString & aWhitespaces)455cdf0e10cSrcweir virtual void ignorableWhitespace(const UString& aWhitespaces) THROWS( (SAXException,UsrSystemException) )
456cdf0e10cSrcweir {
457cdf0e10cSrcweir m_iWhitespaceCount += aWhitespaces.len();
458cdf0e10cSrcweir }
459cdf0e10cSrcweir
processingInstruction(const UString & aTarget,const UString & aData)460cdf0e10cSrcweir virtual void processingInstruction(const UString& aTarget, const UString& aData) THROWS( (SAXException,UsrSystemException) )
461cdf0e10cSrcweir {
462cdf0e10cSrcweir if( m_bPrint )
463cdf0e10cSrcweir printf( "PI : %s,%s\n" , USTRING_TO_PCHAR( aTarget ) , USTRING_TO_PCHAR( aData ) );
464cdf0e10cSrcweir }
465cdf0e10cSrcweir
setDocumentLocator(const XLocatorRef & xLocator)466cdf0e10cSrcweir virtual void setDocumentLocator(const XLocatorRef& xLocator) THROWS( (SAXException,UsrSystemException) )
467cdf0e10cSrcweir {
468cdf0e10cSrcweir m_rLocator = xLocator;
469cdf0e10cSrcweir }
470cdf0e10cSrcweir
resolveEntity(const UString & sPublicId,const UString & sSystemId)471cdf0e10cSrcweir virtual InputSource resolveEntity(const UString& sPublicId, const UString& sSystemId)
472cdf0e10cSrcweir THROWS( (SAXException,UsrSystemException) )
473cdf0e10cSrcweir {
474cdf0e10cSrcweir InputSource source;
475cdf0e10cSrcweir source.sSystemId = sSystemId;
476cdf0e10cSrcweir source.sPublicId = sPublicId;
477cdf0e10cSrcweir source.aInputStream = createStreamFromFile( USTRING_TO_PCHAR( sSystemId ) , m_xSMgr );
478cdf0e10cSrcweir
479cdf0e10cSrcweir return source;
480cdf0e10cSrcweir }
481cdf0e10cSrcweir
startCDATA(void)482cdf0e10cSrcweir virtual void startCDATA(void) THROWS( (SAXException,UsrSystemException) )
483cdf0e10cSrcweir {
484cdf0e10cSrcweir if( m_bPrint ) {
485cdf0e10cSrcweir printf( "CDataStart :\n" );
486cdf0e10cSrcweir }
487cdf0e10cSrcweir }
endCDATA(void)488cdf0e10cSrcweir virtual void endCDATA(void) THROWS( (SAXException,UsrSystemException) )
489cdf0e10cSrcweir {
490cdf0e10cSrcweir if( m_bPrint ) {
491cdf0e10cSrcweir printf( "CEndStart :\n" );
492cdf0e10cSrcweir }
493cdf0e10cSrcweir }
comment(const UString & sComment)494cdf0e10cSrcweir virtual void comment(const UString& sComment) THROWS( (SAXException,UsrSystemException) )
495cdf0e10cSrcweir {
496cdf0e10cSrcweir if( m_bPrint ) {
497cdf0e10cSrcweir printf( "<!--%s-->\n" , USTRING_TO_PCHAR( sComment ) );
498cdf0e10cSrcweir }
499cdf0e10cSrcweir }
unknown(const UString & sString)500cdf0e10cSrcweir virtual void unknown(const UString& sString) THROWS( (SAXException,UsrSystemException) )
501cdf0e10cSrcweir {
502cdf0e10cSrcweir if( m_bPrint ) {
503cdf0e10cSrcweir printf( "UNKNOWN : {%s}\n" , USTRING_TO_PCHAR( sString ) );
504cdf0e10cSrcweir }
505cdf0e10cSrcweir }
506cdf0e10cSrcweir
allowLineBreak(void)507cdf0e10cSrcweir virtual void allowLineBreak( void) THROWS( (SAXException, UsrSystemException ) )
508cdf0e10cSrcweir {
509cdf0e10cSrcweir
510cdf0e10cSrcweir }
511cdf0e10cSrcweir
512cdf0e10cSrcweir
513cdf0e10cSrcweir public:
514cdf0e10cSrcweir int m_iLevel;
515cdf0e10cSrcweir int m_iElementCount;
516cdf0e10cSrcweir int m_iAttributeCount;
517cdf0e10cSrcweir int m_iWhitespaceCount;
518cdf0e10cSrcweir int m_iCharCount;
519cdf0e10cSrcweir BOOL m_bPrint;
520cdf0e10cSrcweir
521cdf0e10cSrcweir XMultiServiceFactoryRef m_xSMgr;
522cdf0e10cSrcweir XLocatorRef m_rLocator;
523cdf0e10cSrcweir };
524cdf0e10cSrcweir
queryInterface(Uik aUik,XInterfaceRef & rOut)525cdf0e10cSrcweir BOOL TestDocumentHandler::queryInterface( Uik aUik , XInterfaceRef & rOut )
526cdf0e10cSrcweir {
527cdf0e10cSrcweir if( aUik == XDocumentHandler::getSmartUik() ) {
528cdf0e10cSrcweir rOut = (XDocumentHandler * )this;
529cdf0e10cSrcweir }
530cdf0e10cSrcweir else if ( aUik == XExtendedDocumentHandler::getSmartUik() ) {
531cdf0e10cSrcweir rOut = (XExtendedDocumentHandler *) this;
532cdf0e10cSrcweir }
533cdf0e10cSrcweir else if ( aUik == XEntityResolver::getSmartUik() ) {
534cdf0e10cSrcweir rOut = (XEntityResolver *) this;
535cdf0e10cSrcweir }
536cdf0e10cSrcweir else if ( aUik == XErrorHandler::getSmartUik() ) {
537cdf0e10cSrcweir rOut = (XErrorHandler * ) this;
538cdf0e10cSrcweir }
539cdf0e10cSrcweir else {
540cdf0e10cSrcweir return OWeakObject::queryInterface( aUik , rOut );
541cdf0e10cSrcweir }
542cdf0e10cSrcweir return TRUE;
543cdf0e10cSrcweir }
544cdf0e10cSrcweir
545cdf0e10cSrcweir
546cdf0e10cSrcweir
547cdf0e10cSrcweir
testSimple(const XParserRef & rParser)548cdf0e10cSrcweir void OSaxParserTest::testSimple( const XParserRef &rParser )
549cdf0e10cSrcweir {
550cdf0e10cSrcweir
551cdf0e10cSrcweir char TestString[] =
552cdf0e10cSrcweir "<!DOCTYPE personnel [\n"
553cdf0e10cSrcweir "<!ENTITY testInternal \"internal Test!\">\n"
554cdf0e10cSrcweir "<!ENTITY test SYSTEM \"external_entity.xml\">\n"
555cdf0e10cSrcweir "]>\n"
556cdf0e10cSrcweir
557cdf0e10cSrcweir "<personnel>\n"
558cdf0e10cSrcweir "<person> fjklsfdklsdfkl\n"
559cdf0e10cSrcweir "fjklsfdklsdfkl\n"
560cdf0e10cSrcweir "<?testpi pidata?>\n"
561cdf0e10cSrcweir "&testInternal;\n"
562cdf0e10cSrcweir "<HUHU x='5' y='kjfd'> blahuhu\n"
563cdf0e10cSrcweir "<HI> blahi\n"
564cdf0e10cSrcweir " <![CDATA[<greeting>Hello, '+1+12world!</greeting>]]>\n"
565cdf0e10cSrcweir " <!-- huhu <jdk> -->\n"
566cdf0e10cSrcweir "<?testpi pidata?>\n"
567cdf0e10cSrcweir "</HI>\n"
568cdf0e10cSrcweir "aus XMLTest\n"
569cdf0e10cSrcweir "</HUHU>\n"
570cdf0e10cSrcweir "</person>\n"
571cdf0e10cSrcweir "</personnel>\n\n\n";
572cdf0e10cSrcweir
573cdf0e10cSrcweir Sequence<BYTE> seqBytes( strlen( TestString ) );
574cdf0e10cSrcweir memcpy( seqBytes.getArray() , TestString , strlen( TestString ) );
575cdf0e10cSrcweir
576cdf0e10cSrcweir
577cdf0e10cSrcweir XInputStreamRef rInStream;
578cdf0e10cSrcweir UString sInput;
579cdf0e10cSrcweir rInStream = createStreamFromSequence( seqBytes , m_rFactory );
580cdf0e10cSrcweir sInput = UString( L"internal" );
581cdf0e10cSrcweir
582cdf0e10cSrcweir if( rParser.is() ) {
583cdf0e10cSrcweir InputSource source;
584cdf0e10cSrcweir
585cdf0e10cSrcweir source.aInputStream = rInStream;
586cdf0e10cSrcweir source.sSystemId = sInput;
587cdf0e10cSrcweir
588cdf0e10cSrcweir TestDocumentHandler *pDocHandler = new TestDocumentHandler( m_rFactory , FALSE );
589cdf0e10cSrcweir XDocumentHandlerRef rDocHandler( (XDocumentHandler *) pDocHandler , USR_QUERY );
590cdf0e10cSrcweir XEntityResolverRef rEntityResolver( (XEntityResolver *) pDocHandler , USR_QUERY );
591cdf0e10cSrcweir
592cdf0e10cSrcweir rParser->setDocumentHandler( rDocHandler );
593cdf0e10cSrcweir rParser->setEntityResolver( rEntityResolver );
594cdf0e10cSrcweir
595cdf0e10cSrcweir try {
596cdf0e10cSrcweir rParser->parseStream( source );
597cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iElementCount == 4 , "wrong element count" );
598cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iAttributeCount == 2 , "wrong attribut count" );
599cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iCharCount == 130 , "wrong char count" );
600cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iWhitespaceCount == 0, "wrong whitespace count" );
601cdf0e10cSrcweir }
602cdf0e10cSrcweir catch( SAXParseException& e ) {
603cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
604cdf0e10cSrcweir }
605cdf0e10cSrcweir catch( SAXException& e ) {
606cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
607cdf0e10cSrcweir
608cdf0e10cSrcweir }
609cdf0e10cSrcweir catch( Exception& e ) {
610cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
611cdf0e10cSrcweir }
612cdf0e10cSrcweir catch(...) {
613cdf0e10cSrcweir BUILD_ERROR( 1 , "unknown exception" );
614cdf0e10cSrcweir }
615cdf0e10cSrcweir
616cdf0e10cSrcweir }
617cdf0e10cSrcweir
618cdf0e10cSrcweir
619cdf0e10cSrcweir }
620cdf0e10cSrcweir
testNamespaces(const XParserRef & rParser)621cdf0e10cSrcweir void OSaxParserTest::testNamespaces( const XParserRef &rParser )
622cdf0e10cSrcweir {
623cdf0e10cSrcweir
624cdf0e10cSrcweir char TestString[] =
625cdf0e10cSrcweir "<?xml version='1.0'?>\n"
626cdf0e10cSrcweir "<!-- all elements here are explicitly in the HTML namespace -->\n"
627cdf0e10cSrcweir "<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>\n"
628cdf0e10cSrcweir "<html:head><html:title>Frobnostication</html:title></html:head>\n"
629cdf0e10cSrcweir "<html:body><html:p>Moved to \n"
630cdf0e10cSrcweir "<html:a href='http://frob.com'>here.</html:a></html:p></html:body>\n"
631cdf0e10cSrcweir "</html:html>\n";
632cdf0e10cSrcweir
633cdf0e10cSrcweir Sequence<BYTE> seqBytes( strlen( TestString ) );
634cdf0e10cSrcweir memcpy( seqBytes.getArray() , TestString , strlen( TestString ) );
635cdf0e10cSrcweir
636cdf0e10cSrcweir
637cdf0e10cSrcweir XInputStreamRef rInStream;
638cdf0e10cSrcweir UString sInput;
639cdf0e10cSrcweir
640cdf0e10cSrcweir rInStream = createStreamFromSequence( seqBytes , m_rFactory );
641cdf0e10cSrcweir sInput = UString( L"internal" );
642cdf0e10cSrcweir
643cdf0e10cSrcweir if( rParser.is() ) {
644cdf0e10cSrcweir InputSource source;
645cdf0e10cSrcweir
646cdf0e10cSrcweir source.aInputStream = rInStream;
647cdf0e10cSrcweir source.sSystemId = sInput;
648cdf0e10cSrcweir
649cdf0e10cSrcweir TestDocumentHandler *pDocHandler = new TestDocumentHandler( m_rFactory , FALSE );
650cdf0e10cSrcweir XDocumentHandlerRef rDocHandler( (XDocumentHandler *) pDocHandler , USR_QUERY );
651cdf0e10cSrcweir XEntityResolverRef rEntityResolver( (XEntityResolver *) pDocHandler , USR_QUERY );
652cdf0e10cSrcweir
653cdf0e10cSrcweir rParser->setDocumentHandler( rDocHandler );
654cdf0e10cSrcweir rParser->setEntityResolver( rEntityResolver );
655cdf0e10cSrcweir
656cdf0e10cSrcweir try {
657cdf0e10cSrcweir rParser->parseStream( source );
658cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iElementCount == 6 , "wrong element count" );
659cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iAttributeCount == 2 , "wrong attribut count" );
660cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iCharCount == 33, "wrong char count" );
661cdf0e10cSrcweir ERROR_ASSERT( pDocHandler->m_iWhitespaceCount == 0 , "wrong whitespace count" );
662cdf0e10cSrcweir }
663cdf0e10cSrcweir catch( SAXParseException& e ) {
664cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
665cdf0e10cSrcweir }
666cdf0e10cSrcweir catch( SAXException& e ) {
667cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
668cdf0e10cSrcweir
669cdf0e10cSrcweir }
670cdf0e10cSrcweir catch( Exception& e ) {
671cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
672cdf0e10cSrcweir }
673cdf0e10cSrcweir catch(...) {
674cdf0e10cSrcweir BUILD_ERROR( 1 , "unknown exception" );
675cdf0e10cSrcweir }
676cdf0e10cSrcweir }
677cdf0e10cSrcweir }
678cdf0e10cSrcweir
testEncoding(const XParserRef & rParser)679cdf0e10cSrcweir void OSaxParserTest::testEncoding( const XParserRef &rParser )
680cdf0e10cSrcweir {
681cdf0e10cSrcweir char TestString[] =
682cdf0e10cSrcweir "<?xml version='1.0' encoding=\"iso-8859-1\"?>\n"
683cdf0e10cSrcweir "<!-- all elements here are explicitly in the HTML namespace -->\n"
684cdf0e10cSrcweir "<html:html xmlns:html='http://www.w3.org/TR/REC-html40'>\n"
685cdf0e10cSrcweir "<html:head><html:title>Frobnostication</html:title></html:head>\n"
686cdf0e10cSrcweir "<html:body><html:p>Moved to �\n"
687cdf0e10cSrcweir "<html:a href='http://frob.com'>here.</html:a></html:p></html:body>\n"
688cdf0e10cSrcweir "</html:html>\n";
689cdf0e10cSrcweir
690cdf0e10cSrcweir Sequence<BYTE> seqBytes( strlen( TestString ) );
691cdf0e10cSrcweir memcpy( seqBytes.getArray() , TestString , strlen( TestString ) );
692cdf0e10cSrcweir
693cdf0e10cSrcweir
694cdf0e10cSrcweir XInputStreamRef rInStream;
695cdf0e10cSrcweir UString sInput;
696cdf0e10cSrcweir
697cdf0e10cSrcweir rInStream = createStreamFromSequence( seqBytes , m_rFactory );
698cdf0e10cSrcweir sInput = UString( L"internal" );
699cdf0e10cSrcweir
700cdf0e10cSrcweir if( rParser.is() ) {
701cdf0e10cSrcweir InputSource source;
702cdf0e10cSrcweir
703cdf0e10cSrcweir source.aInputStream = rInStream;
704cdf0e10cSrcweir source.sSystemId = sInput;
705cdf0e10cSrcweir
706cdf0e10cSrcweir TestDocumentHandler *pDocHandler = new TestDocumentHandler( m_rFactory , FALSE );
707cdf0e10cSrcweir XDocumentHandlerRef rDocHandler( (XDocumentHandler *) pDocHandler , USR_QUERY );
708cdf0e10cSrcweir XEntityResolverRef rEntityResolver( (XEntityResolver *) pDocHandler , USR_QUERY );
709cdf0e10cSrcweir
710cdf0e10cSrcweir rParser->setDocumentHandler( rDocHandler );
711cdf0e10cSrcweir rParser->setEntityResolver( rEntityResolver );
712cdf0e10cSrcweir try {
713cdf0e10cSrcweir rParser->parseStream( source );
714cdf0e10cSrcweir }
715cdf0e10cSrcweir catch( SAXParseException& e ) {
716cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
717cdf0e10cSrcweir }
718cdf0e10cSrcweir catch( SAXException& e ) {
719cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
720cdf0e10cSrcweir
721cdf0e10cSrcweir }
722cdf0e10cSrcweir catch( Exception& e ) {
723cdf0e10cSrcweir BUILD_ERROR( 1 , USTRING_TO_PCHAR( e.Message ) );
724cdf0e10cSrcweir }
725cdf0e10cSrcweir catch(...) {
726cdf0e10cSrcweir BUILD_ERROR( 1 , "unknown exception" );
727cdf0e10cSrcweir }
728cdf0e10cSrcweir
729cdf0e10cSrcweir }
730cdf0e10cSrcweir
731cdf0e10cSrcweir }
732cdf0e10cSrcweir
testFile(const XParserRef & rParser)733cdf0e10cSrcweir void OSaxParserTest::testFile( const XParserRef & rParser )
734cdf0e10cSrcweir {
735cdf0e10cSrcweir
736cdf0e10cSrcweir XInputStreamRef rInStream = createStreamFromFile( "testsax.xml" , m_rFactory );
737cdf0e10cSrcweir UString sInput = UString( PCHAR_TO_USTRING( "testsax.xml" ) );
738cdf0e10cSrcweir
739cdf0e10cSrcweir
740cdf0e10cSrcweir if( rParser.is() && rInStream.is() ) {
741cdf0e10cSrcweir InputSource source;
742cdf0e10cSrcweir
743cdf0e10cSrcweir source.aInputStream = rInStream;
744cdf0e10cSrcweir source.sSystemId = sInput;
745cdf0e10cSrcweir
746cdf0e10cSrcweir TestDocumentHandler *pDocHandler = new TestDocumentHandler( m_rFactory , TRUE );
747cdf0e10cSrcweir XDocumentHandlerRef rDocHandler( (XDocumentHandler *) pDocHandler , USR_QUERY );
748cdf0e10cSrcweir XEntityResolverRef rEntityResolver( (XEntityResolver *) pDocHandler , USR_QUERY );
749cdf0e10cSrcweir XErrorHandlerRef rErrorHandler( ( XErrorHandler * )pDocHandler , USR_QUERY );
750cdf0e10cSrcweir
751cdf0e10cSrcweir rParser->setDocumentHandler( rDocHandler );
752cdf0e10cSrcweir rParser->setEntityResolver( rEntityResolver );
753cdf0e10cSrcweir rParser->setErrorHandler( rErrorHandler );
754cdf0e10cSrcweir
755cdf0e10cSrcweir try {
756cdf0e10cSrcweir rParser->parseStream( source );
757cdf0e10cSrcweir }
758cdf0e10cSrcweir catch( SAXParseException& e ) {
759cdf0e10cSrcweir UsrAny any;
760cdf0e10cSrcweir any.set( &e , SAXParseException_getReflection() );
761cdf0e10cSrcweir while(TRUE) {
762cdf0e10cSrcweir SAXParseException *pEx;
763cdf0e10cSrcweir if( any.getReflection() == SAXParseException_getReflection() ) {
764cdf0e10cSrcweir pEx = ( SAXParseException * ) any.get();
765cdf0e10cSrcweir printf( "%s\n" , UStringToString( pEx->Message , CHARSET_SYSTEM ).GetStr() );
766cdf0e10cSrcweir any = pEx->WrappedException;
767cdf0e10cSrcweir }
768cdf0e10cSrcweir else {
769cdf0e10cSrcweir break;
770cdf0e10cSrcweir }
771cdf0e10cSrcweir }
772cdf0e10cSrcweir }
773cdf0e10cSrcweir catch( SAXException& e ) {
774cdf0e10cSrcweir printf( "%s\n" , UStringToString( e.Message , CHARSET_SYSTEM ).GetStr() );
775cdf0e10cSrcweir
776cdf0e10cSrcweir }
777cdf0e10cSrcweir catch( Exception& e ) {
778cdf0e10cSrcweir printf( "normal exception ! %s\n", e.getName() );
779cdf0e10cSrcweir }
780cdf0e10cSrcweir catch(...) {
781cdf0e10cSrcweir printf( "any exception !!!!\n" );
782cdf0e10cSrcweir }
783cdf0e10cSrcweir }
784cdf0e10cSrcweir }
785cdf0e10cSrcweir
testPerformance(const XParserRef & rParser)786cdf0e10cSrcweir void OSaxParserTest::testPerformance( const XParserRef & rParser )
787cdf0e10cSrcweir {
788cdf0e10cSrcweir
789cdf0e10cSrcweir XInputStreamRef rInStream = createStreamFromFile( "testPerformance.xml" , m_rFactory );
790cdf0e10cSrcweir UString sInput = UString( PCHAR_TO_USTRING( "testperformance.xml" ) );
791cdf0e10cSrcweir
792cdf0e10cSrcweir if( rParser.is() && rInStream.is() ) {
793cdf0e10cSrcweir InputSource source;
794cdf0e10cSrcweir
795cdf0e10cSrcweir source.aInputStream = rInStream;
796cdf0e10cSrcweir source.sSystemId = sInput;
797cdf0e10cSrcweir
798cdf0e10cSrcweir TestDocumentHandler *pDocHandler = new TestDocumentHandler( m_rFactory , FALSE );
799cdf0e10cSrcweir XDocumentHandlerRef rDocHandler( (XDocumentHandler *) pDocHandler , USR_QUERY );
800cdf0e10cSrcweir XEntityResolverRef rEntityResolver( (XEntityResolver *) pDocHandler , USR_QUERY );
801cdf0e10cSrcweir XErrorHandlerRef rErrorHandler( ( XErrorHandler * )pDocHandler , USR_QUERY );
802cdf0e10cSrcweir
803cdf0e10cSrcweir rParser->setDocumentHandler( rDocHandler );
804cdf0e10cSrcweir rParser->setEntityResolver( rEntityResolver );
805cdf0e10cSrcweir rParser->setErrorHandler( rErrorHandler );
806cdf0e10cSrcweir
807cdf0e10cSrcweir try {
808cdf0e10cSrcweir TimeValue aStartTime, aEndTime;
809cdf0e10cSrcweir osl_getSystemTime( &aStartTime );
810cdf0e10cSrcweir rParser->parseStream( source );
811cdf0e10cSrcweir osl_getSystemTime( &aEndTime );
812cdf0e10cSrcweir
813cdf0e10cSrcweir double fStart = (double)aStartTime.Seconds + ((double)aStartTime.Nanosec / 1000000000.0);
814cdf0e10cSrcweir double fEnd = (double)aEndTime.Seconds + ((double)aEndTime.Nanosec / 1000000000.0);
815cdf0e10cSrcweir
816cdf0e10cSrcweir printf( "Performance reading : %g s\n" , fEnd - fStart );
817cdf0e10cSrcweir
818cdf0e10cSrcweir }
819cdf0e10cSrcweir catch( SAXParseException& e ) {
820cdf0e10cSrcweir UsrAny any;
821cdf0e10cSrcweir any.set( &e , SAXParseException_getReflection() );
822cdf0e10cSrcweir while(TRUE) {
823cdf0e10cSrcweir SAXParseException *pEx;
824cdf0e10cSrcweir if( any.getReflection() == SAXParseException_getReflection() ) {
825cdf0e10cSrcweir pEx = ( SAXParseException * ) any.get();
826cdf0e10cSrcweir printf( "%s\n" , UStringToString( pEx->Message , CHARSET_SYSTEM ).GetStr() );
827cdf0e10cSrcweir any = pEx->WrappedException;
828cdf0e10cSrcweir }
829cdf0e10cSrcweir else {
830cdf0e10cSrcweir break;
831cdf0e10cSrcweir }
832cdf0e10cSrcweir }
833cdf0e10cSrcweir }
834cdf0e10cSrcweir catch( SAXException& e ) {
835cdf0e10cSrcweir printf( "%s\n" , UStringToString( e.Message , CHARSET_SYSTEM ).GetStr() );
836cdf0e10cSrcweir
837cdf0e10cSrcweir }
838cdf0e10cSrcweir catch( Exception& e ) {
839cdf0e10cSrcweir printf( "normal exception ! %s\n", e.getName() );
840cdf0e10cSrcweir }
841cdf0e10cSrcweir catch(...) {
842cdf0e10cSrcweir printf( "any exception !!!!\n" );
843cdf0e10cSrcweir }
844cdf0e10cSrcweir }
845cdf0e10cSrcweir
846cdf0e10cSrcweir }
847cdf0e10cSrcweir
848cdf0e10cSrcweir
849cdf0e10cSrcweir extern "C"
850cdf0e10cSrcweir {
exService_writeRegEntry(const UNO_INTERFACE (XRegistryKey)* xUnoKey)851cdf0e10cSrcweir BOOL EXTERN_SERVICE_CALLTYPE exService_writeRegEntry(
852cdf0e10cSrcweir const UNO_INTERFACE(XRegistryKey)* xUnoKey)
853cdf0e10cSrcweir
854cdf0e10cSrcweir {
855cdf0e10cSrcweir XRegistryKeyRef xKey;
856cdf0e10cSrcweir uno2smart(xKey, *xUnoKey);
857cdf0e10cSrcweir
858cdf0e10cSrcweir UString str = UString( L"/" ) + OSaxParserTest_getImplementationName() + UString( L"/UNO/SERVICES" );
859cdf0e10cSrcweir XRegistryKeyRef xNewKey = xKey->createKey( str );
860cdf0e10cSrcweir xNewKey->createKey( OSaxParserTest_getServiceName() );
861cdf0e10cSrcweir
862cdf0e10cSrcweir str = UString( L"/" ) + OSaxWriterTest_getImplementationName() + UString( L"/UNO/SERVICES" );
863cdf0e10cSrcweir xNewKey = xKey->createKey( str );
864cdf0e10cSrcweir xNewKey->createKey( OSaxWriterTest_getServiceName() );
865cdf0e10cSrcweir
866cdf0e10cSrcweir return TRUE;
867cdf0e10cSrcweir }
868cdf0e10cSrcweir
869cdf0e10cSrcweir
UNO_INTERFACE(XInterface)870cdf0e10cSrcweir UNO_INTERFACE(XInterface) EXTERN_SERVICE_CALLTYPE exService_getFactory
871cdf0e10cSrcweir (
872cdf0e10cSrcweir const wchar_t* implementationName,
873cdf0e10cSrcweir const UNO_INTERFACE(XMultiServiceFactory)* xUnoFact,
874cdf0e10cSrcweir const UNO_INTERFACE(XRegistryKey)*
875cdf0e10cSrcweir )
876cdf0e10cSrcweir {
877cdf0e10cSrcweir UNO_INTERFACE(XInterface) xUnoRet = {0, 0};
878cdf0e10cSrcweir
879cdf0e10cSrcweir XInterfaceRef xRet;
880cdf0e10cSrcweir XMultiServiceFactoryRef xSMgr;
881cdf0e10cSrcweir UString aImplementationName(implementationName);
882cdf0e10cSrcweir
883cdf0e10cSrcweir uno2smart(xSMgr, *xUnoFact);
884cdf0e10cSrcweir
885cdf0e10cSrcweir if (aImplementationName == OSaxWriterTest_getImplementationName() )
886cdf0e10cSrcweir {
887cdf0e10cSrcweir xRet = createSingleFactory( xSMgr, implementationName,
888cdf0e10cSrcweir OSaxWriterTest_CreateInstance,
889cdf0e10cSrcweir OSaxWriterTest_getSupportedServiceNames() );
890cdf0e10cSrcweir }
891cdf0e10cSrcweir else if (aImplementationName == OSaxParserTest_getImplementationName() )
892cdf0e10cSrcweir {
893cdf0e10cSrcweir xRet = createSingleFactory( xSMgr, implementationName,
894cdf0e10cSrcweir OSaxParserTest_CreateInstance,
895cdf0e10cSrcweir OSaxParserTest_getSupportedServiceNames() );
896cdf0e10cSrcweir }
897cdf0e10cSrcweir if (xRet.is())
898cdf0e10cSrcweir {
899cdf0e10cSrcweir smart2uno(xRet, xUnoRet);
900cdf0e10cSrcweir }
901cdf0e10cSrcweir
902cdf0e10cSrcweir return xUnoRet;
903cdf0e10cSrcweir }
904cdf0e10cSrcweir
905cdf0e10cSrcweir }
906cdf0e10cSrcweir
907cdf0e10cSrcweir
908