Change copyrights from Nokia to Digia
[profile/ivi/qtxmlpatterns.git] / tests / auto / qxmlformatter / tst_qxmlformatter.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the test suite of the Qt Toolkit.
7 **
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.
16 **
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.
24 **
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.
28 **
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.
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