From e5fcad302d86d316390c6b0f62759a067313e8a9 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 23 Mar 2009 10:18:55 +0100 Subject: Long live Qt 4.5! --- tests/auto/qxmlresultitems/.gitignore | 1 + tests/auto/qxmlresultitems/qxmlresultitems.pro | 4 + tests/auto/qxmlresultitems/tst_qxmlresultitems.cpp | 240 +++++++++++++++++++++ 3 files changed, 245 insertions(+) create mode 100644 tests/auto/qxmlresultitems/.gitignore create mode 100644 tests/auto/qxmlresultitems/qxmlresultitems.pro create mode 100644 tests/auto/qxmlresultitems/tst_qxmlresultitems.cpp (limited to 'tests/auto/qxmlresultitems') diff --git a/tests/auto/qxmlresultitems/.gitignore b/tests/auto/qxmlresultitems/.gitignore new file mode 100644 index 0000000000..d05df6dc99 --- /dev/null +++ b/tests/auto/qxmlresultitems/.gitignore @@ -0,0 +1 @@ +tst_qxmlresultitems diff --git a/tests/auto/qxmlresultitems/qxmlresultitems.pro b/tests/auto/qxmlresultitems/qxmlresultitems.pro new file mode 100644 index 0000000000..7d74c20970 --- /dev/null +++ b/tests/auto/qxmlresultitems/qxmlresultitems.pro @@ -0,0 +1,4 @@ +load(qttest_p4) +SOURCES += tst_qxmlresultitems.cpp + +include (../xmlpatterns.pri) diff --git a/tests/auto/qxmlresultitems/tst_qxmlresultitems.cpp b/tests/auto/qxmlresultitems/tst_qxmlresultitems.cpp new file mode 100644 index 0000000000..f3c97487a1 --- /dev/null +++ b/tests/auto/qxmlresultitems/tst_qxmlresultitems.cpp @@ -0,0 +1,240 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (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 either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** 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.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include + +#ifdef QTEST_XMLPATTERNS +#include +#include +#include + +#include "../qxmlquery/MessageSilencer.h" +/*! + \class tst_QXmlResultItems + \internal + \since 4.4 + \brief Tests class QXmlResultItems. + + */ +class tst_QXmlResultItems : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void defaultConstructor() const; + void next() const; + void current() const; + void hasError() const; + void objectSize() const; + void constCorrectness() const; + + void evalateWithInstantError() const; + void evalateWithQueryError() const; + void evaluate() const; + void evaluate_data() const; +}; + +void tst_QXmlResultItems::defaultConstructor() const +{ + { + QXmlResultItems result; + } + + { + QXmlResultItems result1; + QXmlResultItems result2; + } + + { + QXmlResultItems result1; + QXmlResultItems result2; + QXmlResultItems result3; + } +} + +void tst_QXmlResultItems::next() const +{ + /* Check default value. */ + { + QXmlResultItems result; + QVERIFY(result.next().isNull()); + } + + /* Stress it on a default constructed value. */ + { + QXmlResultItems result; + QVERIFY(result.next().isNull()); + QVERIFY(result.next().isNull()); + QVERIFY(result.next().isNull()); + } +} + +void tst_QXmlResultItems::current() const +{ + /* Check default value. */ + { + QXmlResultItems result; + QVERIFY(result.current().isNull()); + } + + /* Stress it on a default constructed value. */ + { + QXmlResultItems result; + QVERIFY(result.current().isNull()); + QVERIFY(result.current().isNull()); + QVERIFY(result.current().isNull()); + } +} + +void tst_QXmlResultItems::hasError() const +{ + /* Check default value. */ + { + QXmlResultItems result; + QVERIFY(!result.hasError()); + } + + /* Stress it on a default constructed value. */ + { + QXmlResultItems result; + QVERIFY(!result.hasError()); + QVERIFY(!result.hasError()); + QVERIFY(!result.hasError()); + } +} + +void tst_QXmlResultItems::objectSize() const +{ + /* A d-pointer plus a vtable pointer. */ + QCOMPARE(sizeof(QXmlResultItems), sizeof(void *) * 2); +} + +void tst_QXmlResultItems::constCorrectness() const +{ + const QXmlResultItems result; + + /* These functions should be const. */ + result.current(); + result.hasError(); +} + +/*! + What's special about this is that it's not the QAbstractXmlForwardIterator::next() + that triggers the error, it's QPatternist::Expression::evaluateSingleton() directly. + */ +void tst_QXmlResultItems::evalateWithInstantError() const +{ + QXmlQuery query; + MessageSilencer silencer; + query.setMessageHandler(&silencer); + query.setQuery(QLatin1String("fn:error()")); + + QXmlResultItems result; + query.evaluateTo(&result); + + /* Check the values, and stress it. */ + for(int i = 0; i < 3; ++i) + { + QVERIFY(result.current().isNull()); + QVERIFY(result.next().isNull()); + QVERIFY(result.hasError()); + } +} + +void tst_QXmlResultItems::evaluate() const +{ + QFETCH(QString, queryString); + + QXmlQuery query; + query.setQuery(queryString); + + QVERIFY(query.isValid()); + + QXmlResultItems result; + query.evaluateTo(&result); + QXmlItem item(result.next()); + + while(!item.isNull()) + { + QVERIFY(!result.current().isNull()); + QVERIFY(!result.hasError()); + item = result.next(); + } + + /* Now, stress beyond the end. */ + for(int i = 0; i < 3; ++i) + { + QVERIFY(result.current().isNull()); + QVERIFY(result.next().isNull()); + } +} + +void tst_QXmlResultItems::evaluate_data() const +{ + QTest::addColumn("queryString"); + + QTest::newRow("one atomic value") << QString::fromLatin1("1"); + QTest::newRow("two atomic values") << QString::fromLatin1("1, xs:hexBinary('FF')"); + QTest::newRow("one node") << QString::fromLatin1("attribute name {'body'}"); + QTest::newRow("one node") << QString::fromLatin1("attribute name {'body'}"); + QTest::newRow("two nodes") << QString::fromLatin1("attribute name {'body'}, "); +} + +void tst_QXmlResultItems::evalateWithQueryError() const +{ + /* This query is invalid. */ + const QXmlQuery query; + + QXmlResultItems result; + query.evaluateTo(&result); + + QVERIFY(result.hasError()); + QVERIFY(result.next().isNull()); +} + +QTEST_MAIN(tst_QXmlResultItems) + +#include "tst_qxmlresultitems.moc" +#else +QTEST_NOOP_MAIN +#endif +// vim: et:ts=4:sw=4:sts=4 -- cgit v1.2.3