summaryrefslogtreecommitdiff
path: root/unoxml/qa
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@collabora.com>2014-09-25 23:26:28 +0200
committerMatúš Kukan <matus.kukan@collabora.com>2014-09-26 00:46:20 +0200
commitdf73f4115cfe4d07e4159adf087571687eb173ec (patch)
treeeba472d8e47d09f15159a0463f3461ef03c678cd /unoxml/qa
parent2e7f83e87907ec05b1f22e9ff1d8c681c94ece23 (diff)
Remove unused files and move test to qa/
Change-Id: Ia8c022c958f5547d710f9cb196672b89292bbb49
Diffstat (limited to 'unoxml/qa')
-rw-r--r--unoxml/qa/unit/domtest.cxx334
1 files changed, 334 insertions, 0 deletions
diff --git a/unoxml/qa/unit/domtest.cxx b/unoxml/qa/unit/domtest.cxx
new file mode 100644
index 000000000000..49eefe0997eb
--- /dev/null
+++ b/unoxml/qa/unit/domtest.cxx
@@ -0,0 +1,334 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <rtl/ref.hxx>
+#include <rtl/byteseq.hxx>
+#include <osl/file.hxx>
+#include <osl/process.h>
+#include <comphelper/seqstream.hxx>
+#include <comphelper/sequence.hxx>
+#include <comphelper/processfactory.hxx>
+#include <cppuhelper/compbase1.hxx>
+#include <cppuhelper/bootstrap.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <cppunit/plugin/TestPlugIn.h>
+#include <unotest/macros_test.hxx>
+#include <test/bootstrapfixture.hxx>
+
+#include <com/sun/star/xml/dom/DocumentBuilder.hpp>
+#include <com/sun/star/xml/sax/FastToken.hpp>
+#include <com/sun/star/xml/sax/XSAXSerializable.hpp>
+#include <com/sun/star/xml/sax/XFastSAXSerializable.hpp>
+
+using namespace ::comphelper;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+using css::xml::dom::XDocumentBuilder;
+using css::xml::dom::DocumentBuilder;
+
+namespace
+{
+// valid xml
+static const char validTestFile[] =
+"<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
+ <office:document-content \
+ xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" \
+ xmlns:xlink=\"http://www.w3.org/1999/xlink\" \
+ office:version=\"1.0\"> \
+ <office:scripts/> \
+ <xlink:test/> \
+ <office:automatic-styles teststyle=\"test\"/> \
+ <moretest/> \
+ some text \303\266\303\244\303\274 \
+ </office:document-content> \
+";
+
+// generates a warning: unsupported xml version, unknown xml:space
+// value
+static const char warningTestFile[] =
+"<?xml version=\"47-11.0\" encoding=\"UTF-8\"?> \
+ <office:document-content \
+ xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" \
+ xml:space=\"blafasl\" \
+ office:version=\"1.0\"> \
+ <office:scripts/> \
+ <office:automatic-styles/> \
+ </office:document-content> \
+";
+
+// <?xml not at start of file
+static const char errorTestFile[] =
+" <?xml version=\"1.0\" encoding=\"UTF-8\"?> \
+ <office:document-content \
+ xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" \
+ office:version=\"1.0\"> \
+ <office:scripts/> \
+ <office:automatic-styles/> \
+ </office:document-content> \
+";
+
+// plain empty
+static const char fatalTestFile[] = "";
+
+struct ErrorHandler
+ : public ::cppu::WeakImplHelper1< xml::sax::XErrorHandler >
+{
+ sal_uInt32 mnErrCount;
+ sal_uInt32 mnFatalCount;
+ sal_uInt32 mnWarnCount;
+
+ bool noErrors() const { return !mnErrCount && !mnFatalCount && !mnWarnCount; }
+
+ ErrorHandler() : mnErrCount(0), mnFatalCount(0), mnWarnCount(0)
+ {}
+
+ virtual void SAL_CALL error( const uno::Any& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ ++mnErrCount;
+ }
+
+ virtual void SAL_CALL fatalError( const uno::Any& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ ++mnFatalCount;
+ }
+
+ virtual void SAL_CALL warning( const uno::Any& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ ++mnWarnCount;
+ }
+};
+
+struct DocumentHandler
+ : public ::cppu::WeakImplHelper1< xml::sax::XFastDocumentHandler >
+{
+ // XFastContextHandler
+ virtual void SAL_CALL startFastElement( ::sal_Int32 Element, const uno::Reference< xml::sax::XFastAttributeList >& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ OSL_TRACE("Seen element: %c with namespace 0x%x",
+ Element & 0xFFFF, Element & 0xFFFF0000);
+ }
+
+ virtual void SAL_CALL startUnknownElement( const OUString& , const OUString& , const uno::Reference< xml::sax::XFastAttributeList >& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+
+ virtual void SAL_CALL endFastElement( ::sal_Int32 ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+
+ virtual void SAL_CALL endUnknownElement( const OUString&, const OUString& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createFastChildContext( ::sal_Int32 , const uno::Reference< xml::sax::XFastAttributeList >& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ return this;
+ }
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL createUnknownChildContext( const OUString& , const OUString& , const uno::Reference< xml::sax::XFastAttributeList >& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ return this;
+ }
+
+ virtual void SAL_CALL characters( const OUString& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+
+ // XFastDocumentHandler
+ virtual void SAL_CALL startDocument( ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+
+ virtual void SAL_CALL endDocument( ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+
+ virtual void SAL_CALL setDocumentLocator( const uno::Reference< xml::sax::XLocator >& ) throw (xml::sax::SAXException, uno::RuntimeException) SAL_OVERRIDE
+ {
+ }
+};
+
+struct TokenHandler
+ : public ::cppu::WeakImplHelper1< xml::sax::XFastTokenHandler >
+{
+ virtual ::sal_Int32 SAL_CALL getTokenFromUTF8( const uno::Sequence< ::sal_Int8 >& Identifier ) throw (uno::RuntimeException) SAL_OVERRIDE
+ {
+ OSL_TRACE("getTokenFromUTF8() %s", (const char*)Identifier.getConstArray());
+ return Identifier.getLength() ? Identifier[0] : 0;
+ }
+
+ virtual uno::Sequence< ::sal_Int8 > SAL_CALL getUTF8Identifier( ::sal_Int32 ) throw (uno::RuntimeException) SAL_OVERRIDE
+ {
+ CPPUNIT_ASSERT_MESSAGE( "TokenHandler::getUTF8Identifier() unexpected call",
+ false );
+ return uno::Sequence<sal_Int8>();
+ }
+};
+
+struct BasicTest : public test::BootstrapFixture
+{
+ uno::Reference<XDocumentBuilder> mxDomBuilder;
+ rtl::Reference<ErrorHandler> mxErrHandler;
+ rtl::Reference<SequenceInputStream> mxValidInStream;
+ rtl::Reference<SequenceInputStream> mxWarningInStream;
+ rtl::Reference<SequenceInputStream> mxErrorInStream;
+ rtl::Reference<SequenceInputStream> mxFatalInStream;
+
+ virtual void setUp() SAL_OVERRIDE
+ {
+ test::BootstrapFixture::setUp();
+
+ mxErrHandler.set( new ErrorHandler() );
+ uno::Reference<XDocumentBuilder> xDB( getMultiServiceFactory()->createInstance(OUString("com.sun.star.xml.dom.DocumentBuilder")), uno::UNO_QUERY_THROW );
+ mxDomBuilder.set( xDB );
+ mxValidInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>((sal_Int8*)validTestFile, SAL_N_ELEMENTS(validTestFile))) );
+ mxWarningInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>((sal_Int8*)warningTestFile, SAL_N_ELEMENTS(warningTestFile))) );
+ mxErrorInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>((sal_Int8*)errorTestFile, SAL_N_ELEMENTS(errorTestFile))) );
+ mxFatalInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>((sal_Int8*)fatalTestFile, SAL_N_ELEMENTS(fatalTestFile))) );
+ mxDomBuilder->setErrorHandler(mxErrHandler.get());
+ }
+
+ void validInputTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Valid input file did not result in XDocument #1",
+ mxDomBuilder->parse(
+ uno::Reference<io::XInputStream>(
+ mxValidInStream.get())).is() );
+ CPPUNIT_ASSERT_MESSAGE( "Valid input file resulted in parse errors",
+ mxErrHandler->noErrors() );
+ }
+/*
+ void warningInputTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Valid input file did not result in XDocument #2",
+ mxDomBuilder->parse(
+ uno::Reference<io::XInputStream>(
+ mxWarningInStream.get())).is() );
+ CPPUNIT_ASSERT_MESSAGE( "No parse warnings in unclean input file",
+ mxErrHandler->mnWarnCount && !mxErrHandler->mnErrCount && !mxErrHandler->mnFatalCount );
+ }
+
+ void errorInputTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Valid input file did not result in XDocument #3",
+ mxDomBuilder->parse(
+ uno::Reference<io::XInputStream>(
+ mxErrorInStream.get())).is() );
+ CPPUNIT_ASSERT_MESSAGE( "No parse errors in unclean input file",
+ !mxErrHandler->mnWarnCount && mxErrHandler->mnErrCount && !mxErrHandler->mnFatalCount );
+ }
+
+ void fatalInputTest()
+ {
+ CPPUNIT_ASSERT_MESSAGE( "Broken input file resulted in XDocument",
+ !mxDomBuilder->parse(
+ uno::Reference<io::XInputStream>(
+ mxFatalInStream.get())).is() );
+ CPPUNIT_ASSERT_MESSAGE( "No fatal parse errors in unclean input file",
+ !mxErrHandler->mnWarnCount && !mxErrHandler->mnErrCount && mxErrHandler->mnFatalCount );
+ };
+*/
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+ CPPUNIT_TEST_SUITE(BasicTest);
+ CPPUNIT_TEST(validInputTest);
+ //CPPUNIT_TEST(warningInputTest);
+ //CPPUNIT_TEST(errorInputTest);
+ //CPPUNIT_TEST(fatalInputTest);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+struct SerializerTest : public test::BootstrapFixture
+{
+ uno::Reference<XDocumentBuilder> mxDomBuilder;
+ rtl::Reference<ErrorHandler> mxErrHandler;
+ rtl::Reference<SequenceInputStream> mxInStream;
+ rtl::Reference<DocumentHandler> mxHandler;
+ rtl::Reference<TokenHandler> mxTokHandler;
+ uno::Sequence< beans::Pair< OUString, sal_Int32 > > maRegisteredNamespaces;
+
+ void setUp() SAL_OVERRIDE
+ {
+ test::BootstrapFixture::setUp();
+
+ mxErrHandler.set( new ErrorHandler() );
+ uno::Reference<XDocumentBuilder> xDB( getMultiServiceFactory()->createInstance(OUString("com.sun.star.xml.dom.DocumentBuilder")), uno::UNO_QUERY_THROW );
+ mxDomBuilder.set( xDB );
+ mxInStream.set( new SequenceInputStream(css::uno::Sequence<sal_Int8>((sal_Int8*)validTestFile, SAL_N_ELEMENTS(validTestFile))) );
+ mxDomBuilder->setErrorHandler(mxErrHandler.get());
+ mxHandler.set( new DocumentHandler() );
+ mxTokHandler.set( new TokenHandler() );
+
+ maRegisteredNamespaces.realloc(2);
+ maRegisteredNamespaces[0] = beans::make_Pair(
+ OUString( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" ),
+ xml::sax::FastToken::NAMESPACE);
+ maRegisteredNamespaces[1] = beans::make_Pair(
+ OUString( "http://www.w3.org/1999/xlink" ),
+ 2*xml::sax::FastToken::NAMESPACE);
+ }
+
+ void serializerTest ()
+ {
+ uno::Reference< xml::dom::XDocument > xDoc=
+ mxDomBuilder->parse(
+ uno::Reference<io::XInputStream>(
+ mxInStream.get()));
+ CPPUNIT_ASSERT_MESSAGE( "Valid input file did not result in XDocument",
+ xDoc.is() );
+ CPPUNIT_ASSERT_MESSAGE( "Valid input file resulted in parse errors",
+ mxErrHandler->noErrors() );
+
+ uno::Reference< xml::sax::XSAXSerializable > xSaxSerializer(
+ xDoc, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_MESSAGE( "XSAXSerializable not supported",
+ xSaxSerializer.is() );
+
+ uno::Reference< xml::sax::XFastSAXSerializable > xFastSaxSerializer(
+ xDoc, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_MESSAGE( "XFastSAXSerializable not supported",
+ xSaxSerializer.is() );
+
+ xFastSaxSerializer->fastSerialize( mxHandler.get(),
+ mxTokHandler.get(),
+ uno::Sequence< beans::StringPair >(),
+ maRegisteredNamespaces );
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(SerializerTest);
+ CPPUNIT_TEST(serializerTest);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+CPPUNIT_TEST_SUITE_REGISTRATION(BasicTest);
+CPPUNIT_TEST_SUITE_REGISTRATION(SerializerTest);
+}
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */