9ec0e4e16c4146d77a012dec6d9e9c7c7420e57f
[profile/ivi/qtxmlpatterns.git] / tests / auto / qxmlformatter / tst_qxmlformatter.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the test suite of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42
43 #include <QtTest/QtTest>
44
45 #include <QtXmlPatterns/QXmlFormatter>
46 #include <QtXmlPatterns/QXmlQuery>
47
48 /*!
49  \class tst_QXmlFormatter
50  \internal
51  \since 4.4
52  \brief Tests class QXmlFormatter.
53
54  This test is not intended for testing the engine, but the functionality specific
55  to the QXmlFormatter class.
56
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.
59
60  */
61 class tst_QXmlFormatter : public QObject
62 {
63     Q_OBJECT
64
65 public:
66     tst_QXmlFormatter();
67
68 private Q_SLOTS:
69     void indentationDepth() const;
70     void setIndentationDepth() const;
71     void constCorrectness() const;
72     void objectSize() const;
73     void format();
74     void format_data() const;
75     void cleanupTestCase() const;
76 private:
77     enum
78     {
79         ExpectedTestCount = 19
80     };
81
82     int m_generatedBaselines;
83 };
84
85 tst_QXmlFormatter::tst_QXmlFormatter() : m_generatedBaselines(0)
86 {
87 }
88
89 void tst_QXmlFormatter::indentationDepth() const
90 {
91     /* Check default value. */
92     {
93         QXmlQuery query;
94         QByteArray out;
95         QBuffer buffer(&out);
96         QVERIFY(buffer.open(QIODevice::WriteOnly));
97
98         QXmlFormatter formatter(query, &buffer);
99         QCOMPARE(formatter.indentationDepth(), 4);
100     }
101 }
102
103 void tst_QXmlFormatter::setIndentationDepth() const
104 {
105     QXmlQuery query;
106     QByteArray out;
107     QBuffer buffer(&out);
108     QVERIFY(buffer.open(QIODevice::WriteOnly));
109
110     QXmlFormatter formatter(query, &buffer);
111
112     formatter.setIndentationDepth(1);
113     QCOMPARE(formatter.indentationDepth(), 1);
114
115     formatter.setIndentationDepth(654987);
116     QCOMPARE(formatter.indentationDepth(), 654987);
117 }
118
119 void tst_QXmlFormatter::constCorrectness() const
120 {
121     QXmlQuery query;
122     QByteArray out;
123     QBuffer buffer(&out);
124     QVERIFY(buffer.open(QIODevice::WriteOnly));
125
126     const QXmlFormatter formatter(query, &buffer);
127
128     /* These functions should be const. */
129     formatter.indentationDepth();
130 }
131
132 void tst_QXmlFormatter::objectSize() const
133 {
134     /* We shouldn't add something. */
135     QCOMPARE(sizeof(QXmlFormatter), sizeof(QXmlSerializer));
136 }
137
138 void tst_QXmlFormatter::format()
139 {
140     QFETCH(QString, testName);
141
142     const QString location(QFINDTESTDATA("input/") + testName);
143     QFile queryFile(location);
144     QVERIFY(queryFile.open(QIODevice::ReadOnly));
145
146     QXmlQuery query;
147     query.setQuery(&queryFile, QUrl::fromLocalFile(location));
148
149     QByteArray formatted;
150     QBuffer bridge(&formatted);
151     QVERIFY(bridge.open(QIODevice::WriteOnly));
152
153     QXmlFormatter formatter(query, &bridge);
154
155     QVERIFY(query.evaluateTo(&formatter));
156
157     QFile expectedFile(QFINDTESTDATA("baselines/") + testName.left(testName.length() - 2) + QString::fromLatin1("xml"));
158
159     if(expectedFile.exists())
160     {
161         QVERIFY(expectedFile.open(QIODevice::ReadOnly));
162         const QByteArray expectedOutput(expectedFile.readAll());
163         QCOMPARE(formatted, expectedOutput);
164     }
165     else
166     {
167         ++m_generatedBaselines;
168         expectedFile.close();
169         QVERIFY(expectedFile.open(QIODevice::WriteOnly));
170         QCOMPARE(expectedFile.write(formatted), qint64(formatted.size()));
171     }
172 }
173
174 void tst_QXmlFormatter::format_data() const
175 {
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");
179
180     QDir dir;
181     dir.cd(QFINDTESTDATA("input"));
182
183     const QStringList entries(dir.entryList(QStringList(QLatin1String("*.xq"))));
184     for(int i = 0; i < entries.count(); ++i)
185     {
186         const QString &at = entries.at(i);
187         QTest::newRow(at.toUtf8().constData()) << at;
188     }
189
190     QCOMPARE(int(ExpectedTestCount), entries.count());
191 }
192
193 void tst_QXmlFormatter::cleanupTestCase() const
194 {
195     QCOMPARE(m_generatedBaselines, 0);
196 }
197
198 QTEST_MAIN(tst_QXmlFormatter)
199
200 #include "tst_qxmlformatter.moc"
201
202 // vim: et:ts=4:sw=4:sts=4