[Libreoffice-commits] core.git: sax/qa

Mohammed Abdul Azeem azeemmysore at gmail.com
Sat May 28 09:47:18 UTC 2016


 sax/qa/cppunit/xmlimport.cxx   |  114 +++++++++++++++++++++++++++++++++--------
 sax/qa/data/defaultns.xml      |   11 +++
 sax/qa/data/inlinens.xml       |   12 ++++
 sax/qa/data/multiplens.xml     |   13 ++++
 sax/qa/data/multiplepfx.xml    |    9 +++
 sax/qa/data/namespace.xml      |    6 --
 sax/qa/data/nestedns.xml       |   30 ++++++++++
 sax/qa/data/note.xml           |    7 --
 sax/qa/data/nstoattributes.xml |   17 ++++++
 sax/qa/data/simple.xml         |   11 +++
 10 files changed, 197 insertions(+), 33 deletions(-)

New commits:
commit 8128d597224b55965c4f1bba3d824f193a55041b
Author: Mohammed Abdul Azeem <azeemmysore at gmail.com>
Date:   Thu May 26 02:05:13 2016 +0530

    sax2/ unit tests.
    
    Test xml files are added, string is built for each file
    and namespaces are handled.
    
    Change-Id: I0ab799ca5c9de7311ccca2a6033a96e02598064f
    Reviewed-on: https://gerrit.libreoffice.org/25468
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/sax/qa/cppunit/xmlimport.cxx b/sax/qa/cppunit/xmlimport.cxx
index 204c45d..0ba32c1 100644
--- a/sax/qa/cppunit/xmlimport.cxx
+++ b/sax/qa/cppunit/xmlimport.cxx
@@ -32,12 +32,16 @@
 #include <osl/file.hxx>
 #include <unotools/ucbstreamhelper.hxx>
 #include <unotools/streamwrap.hxx>
+#include <string>
+#include <stack>
+#include <deque>
 
 namespace {
 
 using namespace css;
 using namespace css::uno;
 using namespace css::io;
+using namespace std;
 
 Reference< XInputStream > createStreamFromFile (
     const OUString filePath)
@@ -56,11 +60,17 @@ Reference< XInputStream > createStreamFromFile (
 class TestDocumentHandler : public cppu::WeakImplHelper< xml::sax::XDocumentHandler >
 {
 private:
-    // OUString m_aStr;
+    OUString m_aStr;
+    deque< pair<OUString,OUString> > m_aNamespaceStack;
+    stack<sal_uInt16> m_aCountStack;
+
+    OUString canonicalform(const OUString &sName, const OUString &sValue, bool isElement);
+    OUString getNamespace(const OUString &sName);
 
 public:
     TestDocumentHandler() {}
-    //const OUString& getString() { return m_aStr; }
+    OUString getString() { return m_aStr; }
+
     // XDocumentHandler
     virtual void SAL_CALL startDocument() throw (xml::sax::SAXException, RuntimeException, std::exception) override;
     virtual void SAL_CALL endDocument() throw (xml::sax::SAXException, RuntimeException, std::exception) override;
@@ -72,10 +82,53 @@ public:
     virtual void SAL_CALL setDocumentLocator( const Reference< xml::sax::XLocator >& xLocator ) throw (xml::sax::SAXException, RuntimeException, std::exception) override;
 };
 
+OUString TestDocumentHandler::canonicalform(const OUString &sName, const OUString &sValue, bool isElement)
+{
+    sal_Int16 nIndex = sName.indexOf(":");
+    if ( !isElement && sName.match( "xmlns" ) )
+    {
+        m_aCountStack.top() += 1;
+        if ( nIndex < 0 )
+            m_aNamespaceStack.push_back( make_pair( OUString( "default" ), sValue ) );
+        else
+            m_aNamespaceStack.push_back( make_pair( sName.copy( nIndex + 1 ), sValue ) );
+    }
+    else
+    {
+        if ( nIndex >= 0 )
+        {
+            OUString sNamespace = getNamespace( sName.copy( 0, nIndex ) );
+            return sNamespace + sName.copy(nIndex);
+        }
+        else
+        {
+            OUString sDefaultns = getNamespace( "default" );
+            if ( !isElement || sDefaultns.isEmpty() )
+                return sName;
+            else
+                return sDefaultns + ":" + sName;
+        }
+    }
+    return OUString("");
+}
+
+OUString TestDocumentHandler::getNamespace(const OUString &sName)
+{
+    for (sal_Int16 i = m_aNamespaceStack.size() - 1; i>=0; i--)
+    {
+        pair<OUString, OUString> aPair = m_aNamespaceStack.at(i);
+        if (aPair.first == sName)
+            return aPair.second;
+    }
+    return OUString("");
+}
+
 void SAL_CALL TestDocumentHandler::startDocument()
         throw(xml::sax::SAXException, RuntimeException, std::exception)
 {
-    // m_aStr.clear();
+    m_aStr.clear();
+    m_aNamespaceStack.emplace_back( make_pair( OUString( "default" ), OUString() ) );
+    m_aCountStack.emplace(0);
 }
 
 
@@ -84,30 +137,45 @@ void SAL_CALL TestDocumentHandler::endDocument()
 {
 }
 
-void SAL_CALL TestDocumentHandler::startElement( const OUString& /*aName*/, const Reference< xml::sax::XAttributeList >& /*xAttribs*/ )
+void SAL_CALL TestDocumentHandler::startElement( const OUString& aName, const Reference< xml::sax::XAttributeList >& xAttribs )
         throw( xml::sax::SAXException, RuntimeException, std::exception )
 {
-    // m_aStr = m_aStr + "<" + aName + "> ";
+    OUString sAttributes;
+    m_aCountStack.push(0);
+    sal_uInt16 len = xAttribs->getLength();
+    for (sal_uInt16 i=0; i<len; i++)
+    {
+        OUString sAttrValue = xAttribs->getValueByIndex(i);
+        OUString sAttrName = canonicalform(xAttribs->getNameByIndex(i), sAttrValue, false);
+        if (!sAttrName.isEmpty())
+            sAttributes = sAttrName + sAttrValue;
+    }
+    m_aStr = m_aStr + canonicalform(aName, "", true) + sAttributes;
 }
 
 
-void SAL_CALL TestDocumentHandler::endElement( const OUString& /*aName*/ )
+void SAL_CALL TestDocumentHandler::endElement( const OUString& aName )
     throw( xml::sax::SAXException, RuntimeException, std::exception )
 {
-    // m_aStr = m_aStr + "</" + aName + ">\n";
+    m_aStr = m_aStr + canonicalform(aName, "", true);
+    sal_uInt16 nPopQty = m_aCountStack.top();
+    for (sal_uInt16 i=0; i<nPopQty; i++)
+        m_aNamespaceStack.pop_back();
+    m_aCountStack.pop();
 }
 
 
-void SAL_CALL TestDocumentHandler::characters( const OUString& /*aChars*/ )
+void SAL_CALL TestDocumentHandler::characters( const OUString& aChars )
         throw(xml::sax::SAXException, RuntimeException, std::exception)
 {
-    // m_aStr = m_aStr + aChars + " ";
+    m_aStr = m_aStr + aChars;
 }
 
 
-void SAL_CALL TestDocumentHandler::ignorableWhitespace( const OUString& /*aWhitespaces*/ )
+void SAL_CALL TestDocumentHandler::ignorableWhitespace( const OUString& aWhitespaces )
         throw(xml::sax::SAXException, RuntimeException, std::exception)
 {
+    m_aStr = m_aStr + aWhitespaces;
 }
 
 
@@ -161,16 +229,22 @@ void XMLImportTest::tearDown()
 
 void XMLImportTest::parse()
 {
-    OUString fileName = "note.xml";
-    Reference< XInputStream > rIS = createStreamFromFile( m_sDirPath + fileName );
-    xml::sax::InputSource source;
-    source.aInputStream = rIS;
-    source.sSystemId    = "internal";
-    m_xParser->parseStream(source);
-    // OUString aStr = m_xDocumentHandler->getString();
-    // OString o = OUStringToOString( aStr, RTL_TEXTENCODING_ASCII_US );
-    // CPPUNIT_ASSERT_MESSAGE( string(o.pData->buffer), false );
-    CPPUNIT_ASSERT(true);
+    OUString fileNames[] = {"simple.xml", "defaultns.xml", "inlinens.xml",
+                            "multiplens.xml", "multiplepfx.xml",
+                            "nstoattributes.xml", "nestedns.xml"};
+
+    for (sal_uInt16 i = 0; i < sizeof( fileNames ) / sizeof( string ); i++)
+    {
+        Reference< XInputStream > rIS = createStreamFromFile( m_sDirPath + fileNames[i] );
+        xml::sax::InputSource source;
+        source.aInputStream = rIS;
+        source.sSystemId    = "internal";
+        m_xParser->parseStream(source);
+        // OUString aStr = m_xDocumentHandler->getString();
+        // OString o = OUStringToOString( aStr, RTL_TEXTENCODING_ASCII_US );
+        // CPPUNIT_ASSERT_MESSAGE( std::string(o.pData->buffer), false );
+        CPPUNIT_ASSERT(true);
+    }
 }
 
 CPPUNIT_TEST_SUITE_REGISTRATION( XMLImportTest );
diff --git a/sax/qa/data/defaultns.xml b/sax/qa/data/defaultns.xml
new file mode 100644
index 0000000..554f4b4
--- /dev/null
+++ b/sax/qa/data/defaultns.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<Books xmlns="http://xyzbooks.com/books/">
+    <Book>
+        <Title>War and Peacd</Title>
+        <Author>Leo Tolstoy</Author>
+    </Book>
+    <Book>
+        <Title>To Kill a Mockingbird</Title>
+        <Author>Harper Lee</Author>
+    </Book>
+</Books>
\ No newline at end of file
diff --git a/sax/qa/data/inlinens.xml b/sax/qa/data/inlinens.xml
new file mode 100644
index 0000000..02c4214
--- /dev/null
+++ b/sax/qa/data/inlinens.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" ?>
+<Students xmlns="http://xyzuniversity.org/student/">
+    <Student xmlns:ug="http://xyzuniversity.org/student/ug/">
+        <Name>ABC</Name>
+        <ug:Branch>Computer Science</ug:Branch>
+        <ug:Grade>7.9</ug:Grade>
+    </Student>
+    <Student  xmlns:pg="http://xyzuniversity.org/student/pg/">
+        <Name>PQR</Name>
+        <pg:Field>Artificial Intelligence</pg:Field>
+    </Student>
+</Students>
\ No newline at end of file
diff --git a/sax/qa/data/multiplens.xml b/sax/qa/data/multiplens.xml
new file mode 100644
index 0000000..e1dc4ce
--- /dev/null
+++ b/sax/qa/data/multiplens.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" ?>
+<Athletes>
+    <Player xmlns:Player="xyzsports.com/players/football/">
+        <Player:Name>Lionel Messi</Player:Name>
+        <Player:Height>1.70 m</Player:Height>
+        <Player:Position>Forward</Player:Position>
+    </Player>
+    <Player xmlns:Player="xyzsports.com/players/Cricket/">
+        <Player:Name>Sachin Ramesh Tendulkar</Player:Name>
+        <Player:Height>165 cm</Player:Height>
+        <Player:Style>Right handed</Player:Style>
+    </Player>
+</Athletes>
\ No newline at end of file
diff --git a/sax/qa/data/multiplepfx.xml b/sax/qa/data/multiplepfx.xml
new file mode 100644
index 0000000..b7686ca
--- /dev/null
+++ b/sax/qa/data/multiplepfx.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?>
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0">
+    <office:body>
+        <office:text>
+            <text:p xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" text:style-name="Title">Test Document </text:p>
+            <note:p xmlns:note="urn:oasis:names:tc:opendocument:xmlns:text:1.0" note:style-name="Heading">For testing purposes only</note:p>
+        </office:text>
+    </office:body>
+</office:document>
diff --git a/sax/qa/data/namespace.xml b/sax/qa/data/namespace.xml
deleted file mode 100644
index 6abb646..0000000
--- a/sax/qa/data/namespace.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0"?>
-<html:html xmlns:html="http://www.w3.org/TR/REC-html40">
-    <html:head><html:title>Frobnostication</html:title></html:head>
-    <html:body><html:p>Moved to
-    <html:a href="http://frob.com">here.</html:a></html:p></html:body>
-</html:html>
\ No newline at end of file
diff --git a/sax/qa/data/nestedns.xml b/sax/qa/data/nestedns.xml
new file mode 100644
index 0000000..3317059
--- /dev/null
+++ b/sax/qa/data/nestedns.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" ?>
+<Elements>
+    <Book xmlns:lib="http://www.library.com/">
+        <lib:Title>Sherlock Holmes - I</lib:Title>
+        <lib:Author>Arthur Conan Doyle</lib:Author>
+        <purchase xmlns:lib="http://www.otherlibrary.com/">
+            <lib:Title>Sherlock Holmes - II</lib:Title>
+            <lib:Author>Arthur Conan Doyle</lib:Author>
+        </purchase>
+        <lib:Title>Sherlock Holmes - III</lib:Title>
+        <lib:Author>Arthur Conan Doyle</lib:Author>
+    </Book>
+    <Electronics xmlns="http://doesntexist.com/electronics/">
+        <item>
+            <Name>Apple iPhone 6s</Name>
+            <Price>$324</Price>
+        </item>
+        <item xmlns="http://doesntexist.com/dailyuse/">
+            <Name>Philips Aqua Touch Shaver</Name>
+            <item xmlns="http://doesntexist.com/dailyuse/model/">
+                <Model></Model>
+                <Price>$74</Price>
+            </item>
+        </item>
+        <item>
+            <Name>Macbook Pro</Name>
+            <Price>$500</Price>
+        </item>
+    </Electronics>
+</Elements>
\ No newline at end of file
diff --git a/sax/qa/data/note.xml b/sax/qa/data/note.xml
deleted file mode 100644
index 830b1c2..0000000
--- a/sax/qa/data/note.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<note>
-    <to>ABC</to>
-    <from>XYZ</from>
-    <heading>Reminder</heading>
-    <body>Don't forget me this weekend!</body>
-</note>
\ No newline at end of file
diff --git a/sax/qa/data/nstoattributes.xml b/sax/qa/data/nstoattributes.xml
new file mode 100644
index 0000000..dee2edf
--- /dev/null
+++ b/sax/qa/data/nstoattributes.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main/">
+    <w:body>
+        <w:p w:rsidR="009A1A3D" w:rsidRPr="00BA52A7" w:rsidRDefault="00225691" w:rsidP="00BA52A7">
+            <w:pPr xyz="abc">
+                <w:spacing w:line="276" w:lineRule="auto"/>
+            <w:rPr>
+                <w:rFonts w:asciiTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi"/>
+                <w:sz w:val="24" val="27" />
+                <w:szCs w:val="24"/>
+            </w:rPr>
+            </w:pPr>
+            <w:bookmarkStart w:id="0" w:name="page1"/>
+            <w:bookmarkEnd w:id="0"/>
+        </w:p>
+    </w:body>
+</w:document>
\ No newline at end of file
diff --git a/sax/qa/data/simple.xml b/sax/qa/data/simple.xml
new file mode 100644
index 0000000..67c4fbd
--- /dev/null
+++ b/sax/qa/data/simple.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<TVActors>
+    <Actor>
+        <Name>Bryan Cranston</Name>
+        <Show>Breaking Bad</Show>
+    </Actor>
+    <Actor>
+        <Name>Peter Dinklage</Name>
+        <Show>Game of Thrones</Show>
+    </Actor>
+</TVActors>
\ No newline at end of file


More information about the Libreoffice-commits mailing list