1 /****************************************************************************
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the test suite of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
40 ****************************************************************************/
43 #include <QtTest/QtTest>
45 #include <QtXmlPatterns/QXmlFormatter>
46 #include <QtXmlPatterns/QXmlQuery>
49 \class tst_QXmlFormatter
52 \brief Tests class QXmlFormatter.
54 This test is not intended for testing the engine, but the functionality specific
55 to the QXmlFormatter class.
57 In other words, if you have an engine bug; don't add it here because it won't be
58 tested properly. Instead add it to the test suite.
61 class tst_QXmlFormatter : public QObject
69 void indentationDepth() const;
70 void setIndentationDepth() const;
71 void constCorrectness() const;
72 void objectSize() const;
74 void format_data() const;
75 void cleanupTestCase() const;
79 ExpectedTestCount = 19
82 int m_generatedBaselines;
85 tst_QXmlFormatter::tst_QXmlFormatter() : m_generatedBaselines(0)
89 void tst_QXmlFormatter::indentationDepth() const
91 /* Check default value. */
96 QVERIFY(buffer.open(QIODevice::WriteOnly));
98 QXmlFormatter formatter(query, &buffer);
99 QCOMPARE(formatter.indentationDepth(), 4);
103 void tst_QXmlFormatter::setIndentationDepth() const
107 QBuffer buffer(&out);
108 QVERIFY(buffer.open(QIODevice::WriteOnly));
110 QXmlFormatter formatter(query, &buffer);
112 formatter.setIndentationDepth(1);
113 QCOMPARE(formatter.indentationDepth(), 1);
115 formatter.setIndentationDepth(654987);
116 QCOMPARE(formatter.indentationDepth(), 654987);
119 void tst_QXmlFormatter::constCorrectness() const
123 QBuffer buffer(&out);
124 QVERIFY(buffer.open(QIODevice::WriteOnly));
126 const QXmlFormatter formatter(query, &buffer);
128 /* These functions should be const. */
129 formatter.indentationDepth();
132 void tst_QXmlFormatter::objectSize() const
134 /* We shouldn't add something. */
135 QCOMPARE(sizeof(QXmlFormatter), sizeof(QXmlSerializer));
138 void tst_QXmlFormatter::format()
140 QFETCH(QString, testName);
142 const QString location(QLatin1String("input/") + testName);
143 QFile queryFile(location);
144 QVERIFY(queryFile.open(QIODevice::ReadOnly));
147 query.setQuery(&queryFile, QUrl::fromLocalFile(location));
149 QByteArray formatted;
150 QBuffer bridge(&formatted);
151 QVERIFY(bridge.open(QIODevice::WriteOnly));
153 QXmlFormatter formatter(query, &bridge);
155 QVERIFY(query.evaluateTo(&formatter));
157 QFile expectedFile(QLatin1String("baselines/") + testName.left(testName.length() - 2) + QString::fromLatin1("xml"));
159 if(expectedFile.exists())
161 QVERIFY(expectedFile.open(QIODevice::ReadOnly));
162 const QByteArray expectedOutput(expectedFile.readAll());
163 QCOMPARE(formatted, expectedOutput);
167 ++m_generatedBaselines;
168 expectedFile.close();
169 QVERIFY(expectedFile.open(QIODevice::WriteOnly));
170 QCOMPARE(expectedFile.write(formatted), qint64(formatted.size()));
174 void tst_QXmlFormatter::format_data() const
176 // TODO test with pis and document nodes commencing indentaiton.
177 // TODO atomic values doesn't trigger characters, it seems.
178 QTest::addColumn<QString>("testName");
181 dir.cd(QLatin1String("input"));
183 const QStringList entries(dir.entryList(QStringList(QLatin1String("*.xq"))));
184 for(int i = 0; i < entries.count(); ++i)
186 const QString &at = entries.at(i);
187 QTest::newRow(at.toUtf8().constData()) << at;
190 QCOMPARE(int(ExpectedTestCount), entries.count());
193 void tst_QXmlFormatter::cleanupTestCase() const
195 QCOMPARE(m_generatedBaselines, 0);
198 QTEST_MAIN(tst_QXmlFormatter)
200 #include "tst_qxmlformatter.moc"
202 // vim: et:ts=4:sw=4:sts=4