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