1 /****************************************************************************
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
6 ** This file is part of the test suite of the Qt Toolkit.
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
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(QFINDTESTDATA("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(QFINDTESTDATA("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(QFINDTESTDATA("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