summaryrefslogtreecommitdiffstats
path: root/lib/kofficecore/tests/kodomtest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kofficecore/tests/kodomtest.cpp')
-rw-r--r--lib/kofficecore/tests/kodomtest.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/lib/kofficecore/tests/kodomtest.cpp b/lib/kofficecore/tests/kodomtest.cpp
new file mode 100644
index 00000000..c8e3c539
--- /dev/null
+++ b/lib/kofficecore/tests/kodomtest.cpp
@@ -0,0 +1,129 @@
+/* This file is part of the KDE project
+ Copyright (C) 2004 David Faure <[email protected]>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include "KoDom.h"
+#include "KoXmlNS.h"
+
+#include <qapplication.h>
+#include <assert.h>
+
+//static void debugElemNS( const QDomElement& elem )
+//{
+// qDebug( "nodeName=%s tagName=%s localName=%s prefix=%s namespaceURI=%s", elem.nodeName().latin1(), elem.tagName().latin1(), elem.localName().latin1(), elem.prefix().latin1(), elem.namespaceURI().latin1() );
+//}
+
+void testQDom( const QDomDocument& doc )
+{
+ QDomElement docElem = doc.documentElement();
+ //debugElemNS( docElem );
+ assert( docElem.nodeName() == "o:document-content" );
+ assert( docElem.tagName() == "document-content" );
+ assert( docElem.localName() == "document-content" );
+ assert( docElem.prefix() == "o" );
+ assert( docElem.namespaceURI() == KoXmlNS::office );
+
+ // WARNING, elementsByTagNameNS is recursive!!!
+ QDomNodeList docElemChildren = docElem.elementsByTagNameNS( KoXmlNS::office, "body" );
+ assert( docElemChildren.length() == 1 );
+
+ QDomElement elem = docElemChildren.item( 0 ).toElement();
+ //debugElemNS( elem );
+ assert( elem.tagName() == "body" );
+ assert( elem.localName() == "body" );
+ assert( elem.prefix() == "o" );
+ assert( elem.namespaceURI() == KoXmlNS::office );
+
+ QDomNode n = elem.firstChild();
+ for ( ; !n.isNull() ; n = n.nextSibling() ) {
+ if ( !n.isElement() )
+ continue;
+ QDomElement e = n.toElement();
+ //debugElemNS( e );
+ assert( e.tagName() == "p" );
+ assert( e.localName() == "p" );
+ assert( e.prefix().isEmpty() );
+ assert( e.namespaceURI() == KoXmlNS::text );
+ }
+
+ qDebug("testQDom... ok");
+}
+
+void testKoDom( const QDomDocument& doc )
+{
+ QDomElement docElem = KoDom::namedItemNS( doc, KoXmlNS::office, "document-content" );
+ assert( !docElem.isNull() );
+ assert( docElem.localName() == "document-content" );
+ assert( docElem.namespaceURI() == KoXmlNS::office );
+
+ QDomElement body = KoDom::namedItemNS( docElem, KoXmlNS::office, "body" );
+ assert( !body.isNull() );
+ assert( body.localName() == "body" );
+ assert( body.namespaceURI() == KoXmlNS::office );
+
+ QDomElement p = KoDom::namedItemNS( body, KoXmlNS::text, "p" );
+ assert( !p.isNull() );
+ assert( p.localName() == "p" );
+ assert( p.namespaceURI() == KoXmlNS::text );
+
+ const QDomElement officeStyle = KoDom::namedItemNS( docElem, KoXmlNS::office, "styles" );
+ assert( !officeStyle.isNull() );
+
+ // Look for a non-existing element
+ QDomElement notexist = KoDom::namedItemNS( body, KoXmlNS::text, "notexist" );
+ assert( notexist.isNull() );
+
+ int count = 0;
+ QDomElement elem;
+ forEachElement( elem, body ) {
+ assert( elem.localName() == "p" );
+ assert( elem.namespaceURI() == KoXmlNS::text );
+ ++count;
+ }
+ assert( count == 2 );
+
+ // Attributes
+ // ### Qt bug: it doesn't work if using style-name instead of text:style-name in the XML
+ const QString styleName = p.attributeNS( KoXmlNS::text, "style-name", QString::null );
+ qDebug( "%s", styleName.latin1() );
+ assert( styleName == "L1" );
+
+ qDebug("testKoDom... ok");
+}
+
+int main( int argc, char** argv ) {
+ QApplication app( argc, argv, QApplication::Tty );
+
+ const QCString xml = QCString( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<o:document-content xmlns:o=\"" )
+ + KoXmlNS::office
+ + "\" xmlns=\"" + KoXmlNS::text
+ + "\" xmlns:text=\"" + KoXmlNS::text
+ + "\">\n"
+ "<o:body><p text:style-name=\"L1\">foobar</p><p>2nd</p></o:body><o:styles></o:styles>\n"
+ "</o:document-content>\n";
+ QDomDocument doc;
+ //QXmlSimpleReader reader;
+ //reader.setFeature( "http://xml.org/sax/features/namespaces", TRUE );
+ //reader.setFeature( "http://xml.org/sax/features/namespace-prefixes", FALSE );
+ bool ok = doc.setContent( xml, true /* namespace processing */ );
+ assert( ok );
+
+ testQDom(doc);
+ testKoDom(doc);
+}