xref: /aoo42x/main/unoxml/test/domtest.cxx (revision af7e73e0)
1e9cbe144SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3e9cbe144SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4e9cbe144SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5e9cbe144SAndrew Rist  * distributed with this work for additional information
6e9cbe144SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7e9cbe144SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8e9cbe144SAndrew Rist  * "License"); you may not use this file except in compliance
9e9cbe144SAndrew Rist  * with the License.  You may obtain a copy of the License at
10e9cbe144SAndrew Rist  *
11e9cbe144SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12e9cbe144SAndrew Rist  *
13e9cbe144SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14e9cbe144SAndrew Rist  * software distributed under the License is distributed on an
15e9cbe144SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16e9cbe144SAndrew Rist  * KIND, either express or implied.  See the License for the
17e9cbe144SAndrew Rist  * specific language governing permissions and limitations
18e9cbe144SAndrew Rist  * under the License.
19e9cbe144SAndrew Rist  *
20e9cbe144SAndrew Rist  *************************************************************/
21e9cbe144SAndrew Rist 
22e9cbe144SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // autogenerated file with codegen.pl
25cdf0e10cSrcweir 
26*af7e73e0SDamjan Jovanovic #include "gtest/gtest.h"
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <rtl/ref.hxx>
29cdf0e10cSrcweir #include <osl/file.hxx>
30cdf0e10cSrcweir #include <osl/process.h>
31cdf0e10cSrcweir #include <comphelper/seqstream.hxx>
32cdf0e10cSrcweir #include <comphelper/sequence.hxx>
33cdf0e10cSrcweir #include <cppuhelper/compbase1.hxx>
34cdf0e10cSrcweir #include <cppuhelper/bootstrap.hxx>
35cdf0e10cSrcweir #include <cppuhelper/basemutex.hxx>
36cdf0e10cSrcweir 
37cdf0e10cSrcweir #include <com/sun/star/xml/sax/FastToken.hpp>
38cdf0e10cSrcweir #include <com/sun/star/xml/sax/XSAXSerializable.hpp>
39cdf0e10cSrcweir #include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
40cdf0e10cSrcweir 
41*af7e73e0SDamjan Jovanovic #include <cstdlib>
42*af7e73e0SDamjan Jovanovic 
43cdf0e10cSrcweir #include "../source/dom/documentbuilder.hxx"
44cdf0e10cSrcweir 
45cdf0e10cSrcweir 
46cdf0e10cSrcweir using namespace ::DOM;
47cdf0e10cSrcweir using namespace ::comphelper;
48cdf0e10cSrcweir using namespace ::com::sun::star;
49cdf0e10cSrcweir 
50cdf0e10cSrcweir namespace
51cdf0e10cSrcweir {
52cdf0e10cSrcweir 
53cdf0e10cSrcweir // valid xml
54cdf0e10cSrcweir static const char validTestFile[] =
55cdf0e10cSrcweir "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
56cdf0e10cSrcweir  <office:document-content \
57cdf0e10cSrcweir    xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" \
58cdf0e10cSrcweir    xmlns:xlink=\"http://www.w3.org/1999/xlink\" \
59cdf0e10cSrcweir    office:version=\"1.0\"> \
60cdf0e10cSrcweir    <office:scripts/> \
61cdf0e10cSrcweir    <xlink:test/> \
62cdf0e10cSrcweir    <office:automatic-styles teststyle=\"test\"/> \
63cdf0e10cSrcweir    <moretest/> \
64cdf0e10cSrcweir     some text öäü \
65cdf0e10cSrcweir  </office:document-content> \
66cdf0e10cSrcweir ";
67cdf0e10cSrcweir 
68cdf0e10cSrcweir // generates a warning: unsupported xml version, unknown xml:space
69cdf0e10cSrcweir // value
70cdf0e10cSrcweir static const char warningTestFile[] =
71cdf0e10cSrcweir "<?xml version=\"47-11.0\" encoding=\"UTF-8\"?> \
72cdf0e10cSrcweir  <office:document-content \
73cdf0e10cSrcweir    xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" \
74cdf0e10cSrcweir    xml:space=\"blafasl\" \
75cdf0e10cSrcweir    office:version=\"1.0\"> \
76cdf0e10cSrcweir    <office:scripts/> \
77cdf0e10cSrcweir    <office:automatic-styles/> \
78cdf0e10cSrcweir  </office:document-content> \
79cdf0e10cSrcweir ";
80cdf0e10cSrcweir 
81cdf0e10cSrcweir // <?xml not at start of file
82cdf0e10cSrcweir static const char errorTestFile[] =
83cdf0e10cSrcweir " <?xml version=\"1.0\" encoding=\"UTF-8\"?> \
84cdf0e10cSrcweir  <office:document-content \
85cdf0e10cSrcweir    xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" \
86cdf0e10cSrcweir    office:version=\"1.0\"> \
87cdf0e10cSrcweir    <office:scripts/> \
88cdf0e10cSrcweir    <office:automatic-styles/> \
89cdf0e10cSrcweir  </office:document-content> \
90cdf0e10cSrcweir ";
91cdf0e10cSrcweir 
92cdf0e10cSrcweir // plain empty
93cdf0e10cSrcweir static const char fatalTestFile[] = "";
94cdf0e10cSrcweir 
95cdf0e10cSrcweir struct ErrorHandler
96cdf0e10cSrcweir     : public ::cppu::WeakImplHelper1< xml::sax::XErrorHandler >
97cdf0e10cSrcweir {
98cdf0e10cSrcweir     sal_uInt32 mnErrCount;
99cdf0e10cSrcweir     sal_uInt32 mnFatalCount;
100cdf0e10cSrcweir     sal_uInt32 mnWarnCount;
101cdf0e10cSrcweir 
noErrors__anon70b08cf90111::ErrorHandler102cdf0e10cSrcweir     bool noErrors() const { return !mnErrCount && !mnFatalCount && !mnWarnCount; }
103cdf0e10cSrcweir 
ErrorHandler__anon70b08cf90111::ErrorHandler104cdf0e10cSrcweir     ErrorHandler() : mnErrCount(0), mnFatalCount(0), mnWarnCount(0)
105cdf0e10cSrcweir     {}
106cdf0e10cSrcweir 
error__anon70b08cf90111::ErrorHandler107cdf0e10cSrcweir     virtual void SAL_CALL error( const uno::Any& ) throw (xml::sax::SAXException, uno::RuntimeException)
108cdf0e10cSrcweir     {
109cdf0e10cSrcweir         ++mnErrCount;
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir 
fatalError__anon70b08cf90111::ErrorHandler112cdf0e10cSrcweir     virtual void SAL_CALL fatalError( const uno::Any& ) throw (xml::sax::SAXException, uno::RuntimeException)
113cdf0e10cSrcweir     {
114cdf0e10cSrcweir         ++mnFatalCount;
115cdf0e10cSrcweir     }
116cdf0e10cSrcweir 
warning__anon70b08cf90111::ErrorHandler117cdf0e10cSrcweir     virtual void SAL_CALL warning( const uno::Any& ) throw (xml::sax::SAXException, uno::RuntimeException)
118cdf0e10cSrcweir     {
119cdf0e10cSrcweir         ++mnWarnCount;
120cdf0e10cSrcweir     }
121cdf0e10cSrcweir };
122cdf0e10cSrcweir 
123cdf0e10cSrcweir struct DocumentHandler
124cdf0e10cSrcweir     : public ::cppu::WeakImplHelper1< xml::sax::XFastDocumentHandler >
125cdf0e10cSrcweir {
126cdf0e10cSrcweir     // XFastContextHandler
startFastElement__anon70b08cf90111::DocumentHandler127cdf0e10cSrcweir     virtual void SAL_CALL startFastElement( ::sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& Attribs ) throw (xml::sax::SAXException, uno::RuntimeException)
128cdf0e10cSrcweir     {
129cdf0e10cSrcweir         OSL_TRACE("Seen element: %c with namespace 0x%x",
130cdf0e10cSrcweir                   Element & 0xFFFF, Element & 0xFFFF0000);
131cdf0e10cSrcweir     }
132cdf0e10cSrcweir 
startUnknownElement__anon70b08cf90111::DocumentHandler133cdf0e10cSrcweir     virtual void SAL_CALL startUnknownElement( const ::rtl::OUString& Namespace, const ::rtl::OUString& Name, const uno::Reference< xml::sax::XFastAttributeList >& Attribs ) throw (xml::sax::SAXException, uno::RuntimeException)
134cdf0e10cSrcweir     {
135cdf0e10cSrcweir     }
136cdf0e10cSrcweir 
endFastElement__anon70b08cf90111::DocumentHandler137cdf0e10cSrcweir     virtual void SAL_CALL endFastElement( ::sal_Int32 Element ) throw (xml::sax::SAXException, uno::RuntimeException)
138cdf0e10cSrcweir     {
139cdf0e10cSrcweir     }
140cdf0e10cSrcweir 
endUnknownElement__anon70b08cf90111::DocumentHandler141cdf0e10cSrcweir     virtual void SAL_CALL endUnknownElement( const ::rtl::OUString& Namespace, const ::rtl::OUString& Name ) throw (xml::sax::SAXException, uno::RuntimeException)
142cdf0e10cSrcweir     {
143cdf0e10cSrcweir     }
144cdf0e10cSrcweir 
createFastChildContext__anon70b08cf90111::DocumentHandler145cdf0e10cSrcweir     virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& Attribs ) throw (xml::sax::SAXException, uno::RuntimeException)
146cdf0e10cSrcweir     {
147cdf0e10cSrcweir         return this;
148cdf0e10cSrcweir     }
149cdf0e10cSrcweir 
createUnknownChildContext__anon70b08cf90111::DocumentHandler150cdf0e10cSrcweir     virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext( const ::rtl::OUString& Namespace, const ::rtl::OUString& Name, const uno::Reference< xml::sax::XFastAttributeList >& Attribs ) throw (xml::sax::SAXException, uno::RuntimeException)
151cdf0e10cSrcweir     {
152cdf0e10cSrcweir         return this;
153cdf0e10cSrcweir     }
154cdf0e10cSrcweir 
characters__anon70b08cf90111::DocumentHandler155cdf0e10cSrcweir     virtual void SAL_CALL characters( const ::rtl::OUString& aChars ) throw (xml::sax::SAXException, uno::RuntimeException)
156cdf0e10cSrcweir     {
157cdf0e10cSrcweir     }
158cdf0e10cSrcweir 
159cdf0e10cSrcweir     // XFastDocumentHandler
startDocument__anon70b08cf90111::DocumentHandler160cdf0e10cSrcweir     virtual void SAL_CALL startDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException)
161cdf0e10cSrcweir     {
162cdf0e10cSrcweir     }
163cdf0e10cSrcweir 
endDocument__anon70b08cf90111::DocumentHandler164cdf0e10cSrcweir     virtual void SAL_CALL endDocument(  ) throw (xml::sax::SAXException, uno::RuntimeException)
165cdf0e10cSrcweir     {
166cdf0e10cSrcweir     }
167cdf0e10cSrcweir 
setDocumentLocator__anon70b08cf90111::DocumentHandler168cdf0e10cSrcweir     virtual void SAL_CALL setDocumentLocator( const uno::Reference< xml::sax::XLocator >& xLocator ) throw (xml::sax::SAXException, uno::RuntimeException)
169cdf0e10cSrcweir     {
170cdf0e10cSrcweir     }
171cdf0e10cSrcweir };
172cdf0e10cSrcweir 
173cdf0e10cSrcweir struct TokenHandler
174cdf0e10cSrcweir     : public ::cppu::WeakImplHelper1< xml::sax::XFastTokenHandler >
175cdf0e10cSrcweir {
getToken__anon70b08cf90111::TokenHandler176cdf0e10cSrcweir     virtual ::sal_Int32 SAL_CALL getToken( const ::rtl::OUString& Identifier ) throw (uno::RuntimeException)
177cdf0e10cSrcweir     {
178*af7e73e0SDamjan Jovanovic         EXPECT_TRUE( false ) << "TokenHandler::getToken() unexpected call";
179cdf0e10cSrcweir         return -1;
180cdf0e10cSrcweir     }
181cdf0e10cSrcweir 
getIdentifier__anon70b08cf90111::TokenHandler182cdf0e10cSrcweir     virtual ::rtl::OUString SAL_CALL getIdentifier( ::sal_Int32 Token ) throw (uno::RuntimeException)
183cdf0e10cSrcweir     {
184*af7e73e0SDamjan Jovanovic         EXPECT_TRUE( false ) << "TokenHandler::getIdentifier() unexpected call";
185cdf0e10cSrcweir         return rtl::OUString();
186cdf0e10cSrcweir     }
187cdf0e10cSrcweir 
getTokenFromUTF8__anon70b08cf90111::TokenHandler188cdf0e10cSrcweir     virtual ::sal_Int32 SAL_CALL getTokenFromUTF8( const uno::Sequence< ::sal_Int8 >& Identifier ) throw (uno::RuntimeException)
189cdf0e10cSrcweir     {
190cdf0e10cSrcweir         OSL_TRACE("getTokenFromUTF8() %s", (const char*)Identifier.getConstArray());
191cdf0e10cSrcweir         return Identifier.getLength() ? Identifier[0] : 0;
192cdf0e10cSrcweir     }
193cdf0e10cSrcweir 
getUTF8Identifier__anon70b08cf90111::TokenHandler194cdf0e10cSrcweir     virtual uno::Sequence< ::sal_Int8 > SAL_CALL getUTF8Identifier( ::sal_Int32 Token ) throw (uno::RuntimeException)
195cdf0e10cSrcweir     {
196*af7e73e0SDamjan Jovanovic         EXPECT_TRUE( false) << "TokenHandler::getUTF8Identifier() unexpected call";
197cdf0e10cSrcweir         return uno::Sequence<sal_Int8>();
198cdf0e10cSrcweir     }
199cdf0e10cSrcweir };
200cdf0e10cSrcweir 
201*af7e73e0SDamjan Jovanovic struct BasicTest : public ::testing::Test
202cdf0e10cSrcweir {
203cdf0e10cSrcweir     rtl::Reference<CDocumentBuilder>    mxDomBuilder;
204cdf0e10cSrcweir     rtl::Reference<ErrorHandler>        mxErrHandler;
205cdf0e10cSrcweir     rtl::Reference<SequenceInputStream> mxValidInStream;
206cdf0e10cSrcweir     rtl::Reference<SequenceInputStream> mxWarningInStream;
207cdf0e10cSrcweir     rtl::Reference<SequenceInputStream> mxErrorInStream;
208cdf0e10cSrcweir     rtl::Reference<SequenceInputStream> mxFatalInStream;
209cdf0e10cSrcweir 
SetUp__anon70b08cf90111::BasicTest210*af7e73e0SDamjan Jovanovic     void SetUp()
211cdf0e10cSrcweir     {
212cdf0e10cSrcweir         // luckily, DOM builder doesn't use service fac, so we need
213cdf0e10cSrcweir         // not bootstrap uno here
214cdf0e10cSrcweir         mxErrHandler.set( new ErrorHandler() );
215cdf0e10cSrcweir         mxDomBuilder.set( new CDocumentBuilder(Reference< XMultiServiceFactory >() ));
216cdf0e10cSrcweir         mxValidInStream.set( new SequenceInputStream(ByteSequence((sal_Int8*)validTestFile,
217cdf0e10cSrcweir                                                                   sizeof(validTestFile)/sizeof(*validTestFile))) );
218cdf0e10cSrcweir         mxWarningInStream.set( new SequenceInputStream(ByteSequence((sal_Int8*)warningTestFile,
219cdf0e10cSrcweir                                                                     sizeof(warningTestFile)/sizeof(*warningTestFile))) );
220cdf0e10cSrcweir         mxErrorInStream.set( new SequenceInputStream(ByteSequence((sal_Int8*)errorTestFile,
221cdf0e10cSrcweir                                                                   sizeof(errorTestFile)/sizeof(*errorTestFile))) );
222cdf0e10cSrcweir         mxFatalInStream.set( new SequenceInputStream(ByteSequence((sal_Int8*)fatalTestFile,
223cdf0e10cSrcweir                                                                   sizeof(fatalTestFile)/sizeof(*fatalTestFile))) );
224cdf0e10cSrcweir         mxDomBuilder->setErrorHandler(mxErrHandler.get());
225cdf0e10cSrcweir     }
226*af7e73e0SDamjan Jovanovic };
227cdf0e10cSrcweir 
TEST_F(BasicTest,validInputTest)228*af7e73e0SDamjan Jovanovic TEST_F(BasicTest, validInputTest)
229*af7e73e0SDamjan Jovanovic {
230*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( mxDomBuilder->parse(
231*af7e73e0SDamjan Jovanovic         uno::Reference<io::XInputStream>(
232*af7e73e0SDamjan Jovanovic             mxValidInStream.get())).is() ) << "Valid input file did not result in XDocument #1";
233*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( mxErrHandler->noErrors() ) << "Valid input file resulted in parse errors";
234*af7e73e0SDamjan Jovanovic }
235cdf0e10cSrcweir 
TEST_F(BasicTest,warningInputTest)236*af7e73e0SDamjan Jovanovic TEST_F(BasicTest, warningInputTest)
237*af7e73e0SDamjan Jovanovic {
238*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( mxDomBuilder->parse(
239*af7e73e0SDamjan Jovanovic         uno::Reference<io::XInputStream>(
240*af7e73e0SDamjan Jovanovic             mxWarningInStream.get())).is() ) << "Valid input file did not result in XDocument #2";
241*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( mxErrHandler->mnWarnCount && !mxErrHandler->mnErrCount && !mxErrHandler->mnFatalCount )
242*af7e73e0SDamjan Jovanovic         << "No parse warnings in unclean input file";
243*af7e73e0SDamjan Jovanovic }
244cdf0e10cSrcweir 
TEST_F(BasicTest,errorInputTest)245*af7e73e0SDamjan Jovanovic TEST_F(BasicTest, errorInputTest)
246*af7e73e0SDamjan Jovanovic {
247*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( mxDomBuilder->parse(
248*af7e73e0SDamjan Jovanovic         uno::Reference<io::XInputStream>(
249*af7e73e0SDamjan Jovanovic             mxErrorInStream.get())).is() ) << "Valid input file did not result in XDocument #3";
250*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( !mxErrHandler->mnWarnCount && mxErrHandler->mnErrCount && !mxErrHandler->mnFatalCount )
251*af7e73e0SDamjan Jovanovic         << "No parse errors in unclean input file";
252*af7e73e0SDamjan Jovanovic }
253cdf0e10cSrcweir 
TEST_F(BasicTest,fatalInputTest)254*af7e73e0SDamjan Jovanovic TEST_F(BasicTest, fatalInputTest)
255*af7e73e0SDamjan Jovanovic {
256*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( !mxDomBuilder->parse(
257*af7e73e0SDamjan Jovanovic         uno::Reference<io::XInputStream>(
258*af7e73e0SDamjan Jovanovic             mxFatalInStream.get())).is() ) << "Broken input file resulted in XDocument";
259*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( !mxErrHandler->mnWarnCount && !mxErrHandler->mnErrCount && mxErrHandler->mnFatalCount )
260*af7e73e0SDamjan Jovanovic         << "No fatal parse errors in unclean input file";
261cdf0e10cSrcweir };
262cdf0e10cSrcweir 
263*af7e73e0SDamjan Jovanovic 
264*af7e73e0SDamjan Jovanovic struct SerializerTest : public ::testing::Test
265cdf0e10cSrcweir {
SerializerTest__anon70b08cf90111::SerializerTest266cdf0e10cSrcweir     SerializerTest() : mbUnoInitialized(false) {}
267cdf0e10cSrcweir 
268cdf0e10cSrcweir     uno::Reference<uno::XComponentContext>                   mxCtx;
269cdf0e10cSrcweir     rtl::Reference<CDocumentBuilder>                         mxDomBuilder;
270cdf0e10cSrcweir     rtl::Reference<ErrorHandler>                             mxErrHandler;
271cdf0e10cSrcweir     rtl::Reference<SequenceInputStream>                      mxInStream;
272cdf0e10cSrcweir     rtl::Reference<DocumentHandler>                          mxHandler;
273cdf0e10cSrcweir     rtl::Reference<TokenHandler>                             mxTokHandler;
274cdf0e10cSrcweir     uno::Sequence< beans::Pair< rtl::OUString, sal_Int32 > > maRegisteredNamespaces;
275cdf0e10cSrcweir     bool                                                     mbUnoInitialized;
276cdf0e10cSrcweir 
SetUp__anon70b08cf90111::SerializerTest277*af7e73e0SDamjan Jovanovic     void SetUp()
278cdf0e10cSrcweir     {
279cdf0e10cSrcweir         // need working typelib, bootstrap UNO now
280cdf0e10cSrcweir         if( !mbUnoInitialized )
281cdf0e10cSrcweir         {
282*af7e73e0SDamjan Jovanovic             const char* pArgs( getenv("UNOXML_DOMTEST_FORWARD") );
283*af7e73e0SDamjan Jovanovic             ASSERT_TRUE(pArgs) << "Test file parameter";
284cdf0e10cSrcweir 
285cdf0e10cSrcweir             const rtl::OUString sBaseDir=rtl::OUString::createFromAscii(pArgs);
286cdf0e10cSrcweir 
287cdf0e10cSrcweir             // bootstrap UNO
288cdf0e10cSrcweir             try
289cdf0e10cSrcweir             {
290cdf0e10cSrcweir                 ::rtl::OUString aIniUrl;
291*af7e73e0SDamjan Jovanovic                 ASSERT_TRUE(
292cdf0e10cSrcweir                     osl_getFileURLFromSystemPath(
293cdf0e10cSrcweir                         (sBaseDir+rtl::OUString::createFromAscii("unoxml_unittest_test.ini")).pData,
294*af7e73e0SDamjan Jovanovic                         &aIniUrl.pData ) == osl_File_E_None ) << "Converting ini file to URL";
295cdf0e10cSrcweir 
296cdf0e10cSrcweir                 mxCtx = ::cppu::defaultBootstrap_InitialComponentContext(aIniUrl);
297*af7e73e0SDamjan Jovanovic                 ASSERT_TRUE(mxCtx.is()) << "Getting component context";
298cdf0e10cSrcweir             }
299cdf0e10cSrcweir             catch( uno::Exception& )
300cdf0e10cSrcweir             {
301*af7e73e0SDamjan Jovanovic                 ASSERT_TRUE(false) << "Bootstrapping UNO";
302cdf0e10cSrcweir             }
303cdf0e10cSrcweir 
304cdf0e10cSrcweir             mbUnoInitialized = true;
305cdf0e10cSrcweir         }
306cdf0e10cSrcweir 
307cdf0e10cSrcweir         mxErrHandler.set( new ErrorHandler() );
308cdf0e10cSrcweir         mxDomBuilder.set( new CDocumentBuilder(
309cdf0e10cSrcweir                               uno::Reference< lang::XMultiServiceFactory >(
310cdf0e10cSrcweir                                   mxCtx->getServiceManager(),
311cdf0e10cSrcweir                                   uno::UNO_QUERY )));
312cdf0e10cSrcweir         mxInStream.set( new SequenceInputStream(ByteSequence((sal_Int8*)validTestFile,
313cdf0e10cSrcweir                                                              sizeof(validTestFile)/sizeof(*validTestFile))) );
314cdf0e10cSrcweir         mxDomBuilder->setErrorHandler(mxErrHandler.get());
315cdf0e10cSrcweir 
316cdf0e10cSrcweir         mxHandler.set( new DocumentHandler() );
317cdf0e10cSrcweir         mxTokHandler.set( new TokenHandler() );
318cdf0e10cSrcweir 
319cdf0e10cSrcweir         maRegisteredNamespaces.realloc(2);
320cdf0e10cSrcweir         maRegisteredNamespaces[0] = beans::make_Pair(
321cdf0e10cSrcweir             rtl::OUString(
322cdf0e10cSrcweir                 RTL_CONSTASCII_USTRINGPARAM(
323cdf0e10cSrcweir                     "urn:oasis:names:tc:opendocument:xmlns:office:1.0") ),
324cdf0e10cSrcweir             xml::sax::FastToken::NAMESPACE);
325cdf0e10cSrcweir         maRegisteredNamespaces[1] = beans::make_Pair(
326cdf0e10cSrcweir             rtl::OUString(
327cdf0e10cSrcweir                 RTL_CONSTASCII_USTRINGPARAM(
328cdf0e10cSrcweir                     "http://www.w3.org/1999/xlink") ),
329cdf0e10cSrcweir             2*xml::sax::FastToken::NAMESPACE);
330cdf0e10cSrcweir     }
331cdf0e10cSrcweir };
332cdf0e10cSrcweir 
TEST_F(SerializerTest,serializerTest)333*af7e73e0SDamjan Jovanovic TEST_F(SerializerTest, serializerTest)
334*af7e73e0SDamjan Jovanovic {
335*af7e73e0SDamjan Jovanovic     uno::Reference< xml::dom::XDocument > xDoc=
336*af7e73e0SDamjan Jovanovic         mxDomBuilder->parse(
337*af7e73e0SDamjan Jovanovic             uno::Reference<io::XInputStream>(
338*af7e73e0SDamjan Jovanovic                 mxInStream.get()));
339*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( xDoc.is() ) << "Valid input file did not result in XDocument";
340*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( mxErrHandler->noErrors() ) << "Valid input file resulted in parse errors";
341*af7e73e0SDamjan Jovanovic 
342*af7e73e0SDamjan Jovanovic     uno::Reference< xml::sax::XSAXSerializable > xSaxSerializer(
343*af7e73e0SDamjan Jovanovic         xDoc, uno::UNO_QUERY);
344*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( xSaxSerializer.is() ) << "XSAXSerializable not supported";
345*af7e73e0SDamjan Jovanovic 
346*af7e73e0SDamjan Jovanovic     uno::Reference< xml::sax::XFastSAXSerializable > xFastSaxSerializer(
347*af7e73e0SDamjan Jovanovic         xDoc, uno::UNO_QUERY);
348*af7e73e0SDamjan Jovanovic     ASSERT_TRUE( xSaxSerializer.is() ) << "XFastSAXSerializable not supported";
349*af7e73e0SDamjan Jovanovic 
350*af7e73e0SDamjan Jovanovic     xFastSaxSerializer->fastSerialize( mxHandler.get(),
351*af7e73e0SDamjan Jovanovic                                        mxTokHandler.get(),
352*af7e73e0SDamjan Jovanovic                                        uno::Sequence< beans::StringPair >(),
353*af7e73e0SDamjan Jovanovic                                        maRegisteredNamespaces );
354cdf0e10cSrcweir }
355cdf0e10cSrcweir 
356*af7e73e0SDamjan Jovanovic }
357cdf0e10cSrcweir 
358cdf0e10cSrcweir 
main(int argc,char ** argv)359*af7e73e0SDamjan Jovanovic int main(int argc, char **argv)
360*af7e73e0SDamjan Jovanovic {
361*af7e73e0SDamjan Jovanovic     ::testing::InitGoogleTest(&argc, argv);
362*af7e73e0SDamjan Jovanovic     return RUN_ALL_TESTS();
363*af7e73e0SDamjan Jovanovic }
364