diff -r 000000000000 -r 1918ee327afb tests/auto/qxml/tst_qxml.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/auto/qxml/tst_qxml.cpp Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,243 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + +#include +#include +#include + + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_QXml : public QObject +{ +Q_OBJECT + +private slots: + void getSetCheck(); + void interpretedAs0D() const; + void exception(); +}; + +class MyXmlEntityResolver : public QXmlEntityResolver +{ +public: + MyXmlEntityResolver() : QXmlEntityResolver() {} + QString errorString() const { return QString(); } + bool resolveEntity(const QString &, const QString &, QXmlInputSource *&) { return false; } +}; + +class MyXmlContentHandler : public QXmlContentHandler +{ +public: + MyXmlContentHandler() : QXmlContentHandler() {} + bool characters(const QString &) { return false; } + bool endDocument() { return false; } + bool endElement(const QString &, const QString &, const QString &) { return false; } + bool endPrefixMapping(const QString &) { return false; } + QString errorString() const { return QString(); } + bool ignorableWhitespace(const QString &) { return false; } + bool processingInstruction(const QString &, const QString &) { return false; } + void setDocumentLocator(QXmlLocator *) { } + bool skippedEntity(const QString &) { return false; } + bool startDocument() { return false; } + bool startElement(const QString &, const QString &, const QString &, const QXmlAttributes &) { return false; } + bool startPrefixMapping(const QString &, const QString &) { return false; } +}; + +class MyXmlErrorHandler : public QXmlErrorHandler +{ +public: + MyXmlErrorHandler() : QXmlErrorHandler() {} + QString errorString() const { return QString(); } + bool error(const QXmlParseException &) { return false; } + bool fatalError(const QXmlParseException &) { return false; } + bool warning(const QXmlParseException &) { return false; } +}; + +class MyXmlLexicalHandler : public QXmlLexicalHandler +{ +public: + MyXmlLexicalHandler() : QXmlLexicalHandler() {} + bool comment(const QString &) { return false; } + bool endCDATA() { return false; } + bool endDTD() { return false; } + bool endEntity(const QString &) { return false; } + QString errorString() const { return QString(); } + bool startCDATA() { return false; } + bool startDTD(const QString &, const QString &, const QString &) { return false; } + bool startEntity(const QString &) { return false; } +}; + +class MyXmlDeclHandler : public QXmlDeclHandler +{ +public: + MyXmlDeclHandler() : QXmlDeclHandler() {} + bool attributeDecl(const QString &, const QString &, const QString &, const QString &, const QString &) { return false; } + QString errorString() const { return QString(); } + bool externalEntityDecl(const QString &, const QString &, const QString &) { return false; } + bool internalEntityDecl(const QString &, const QString &) { return false; } +}; + +// Testing get/set functions +void tst_QXml::getSetCheck() +{ + QXmlSimpleReader obj1; + // QXmlEntityResolver* QXmlSimpleReader::entityResolver() + // void QXmlSimpleReader::setEntityResolver(QXmlEntityResolver*) + MyXmlEntityResolver *var1 = new MyXmlEntityResolver; + obj1.setEntityResolver(var1); + QCOMPARE(static_cast(var1), obj1.entityResolver()); + obj1.setEntityResolver((QXmlEntityResolver *)0); + QCOMPARE((QXmlEntityResolver *)0, obj1.entityResolver()); + delete var1; + + // QXmlContentHandler* QXmlSimpleReader::contentHandler() + // void QXmlSimpleReader::setContentHandler(QXmlContentHandler*) + MyXmlContentHandler *var2 = new MyXmlContentHandler; + obj1.setContentHandler(var2); + QCOMPARE(static_cast(var2), obj1.contentHandler()); + obj1.setContentHandler((QXmlContentHandler *)0); + QCOMPARE((QXmlContentHandler *)0, obj1.contentHandler()); + delete var2; + + // QXmlErrorHandler* QXmlSimpleReader::errorHandler() + // void QXmlSimpleReader::setErrorHandler(QXmlErrorHandler*) + MyXmlErrorHandler *var3 = new MyXmlErrorHandler; + obj1.setErrorHandler(var3); + QCOMPARE(static_cast(var3), obj1.errorHandler()); + obj1.setErrorHandler((QXmlErrorHandler *)0); + QCOMPARE((QXmlErrorHandler *)0, obj1.errorHandler()); + delete var3; + + // QXmlLexicalHandler* QXmlSimpleReader::lexicalHandler() + // void QXmlSimpleReader::setLexicalHandler(QXmlLexicalHandler*) + MyXmlLexicalHandler *var4 = new MyXmlLexicalHandler; + obj1.setLexicalHandler(var4); + QCOMPARE(static_cast(var4), obj1.lexicalHandler()); + obj1.setLexicalHandler((QXmlLexicalHandler *)0); + QCOMPARE((QXmlLexicalHandler *)0, obj1.lexicalHandler()); + delete var4; + + // QXmlDeclHandler* QXmlSimpleReader::declHandler() + // void QXmlSimpleReader::setDeclHandler(QXmlDeclHandler*) + MyXmlDeclHandler *var5 = new MyXmlDeclHandler; + obj1.setDeclHandler(var5); + QCOMPARE(static_cast(var5), obj1.declHandler()); + obj1.setDeclHandler((QXmlDeclHandler *)0); + QCOMPARE((QXmlDeclHandler *)0, obj1.declHandler()); + delete var5; +} + +void tst_QXml::interpretedAs0D() const +{ + /* See task 172632. */ + + class MyHandler : public QXmlDefaultHandler + { + public: + virtual bool startElement(const QString &namespaceURI, + const QString &localName, + const QString &qName, + const QXmlAttributes &atts) + { + Q_UNUSED(namespaceURI); + Q_UNUSED(localName); + Q_UNUSED(qName); + attrName = atts.qName(0); + attrCount = atts.count(); + return true; + } + + QString attrName; + int attrCount; + }; + + const QString document(QLatin1String("")); + + QFile f("0x010D.xml"); + QVERIFY(f.open(QIODevice::ReadOnly)); + QXmlInputSource data(&f); + + QXmlSimpleReader reader; + + MyHandler myHandler; + reader.setContentHandler(&myHandler); + reader.setErrorHandler(&myHandler); + + QVERIFY(reader.parse(&data)); + + QCOMPARE(myHandler.attrCount, 1); + QCOMPARE(myHandler.attrName, QChar(0x010D) + QString::fromLatin1("reated-by")); +} + +void tst_QXml::exception() +{ +#ifndef QT_NO_EXCEPTIONS + QString message = QString::fromLatin1("message"); + int column = 3; + int line = 2; + QString publicId = QString::fromLatin1("publicId"); + QString systemId = QString::fromLatin1("systemId"); + + try { + QXmlParseException e(message, column, line, publicId, systemId); + throw e; + } + catch (QXmlParseException e) { + QCOMPARE(e.message(), message); + QCOMPARE(e.columnNumber(), column); + QCOMPARE(e.lineNumber(), line); + QCOMPARE(e.publicId(), publicId); + QCOMPARE(e.systemId(), systemId); + } +#else + QSKIP("Exceptions not available", SkipAll); +#endif +} + +QTEST_MAIN(tst_QXml) +#include "tst_qxml.moc"