1
/****************************************************************************
2
**
3
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4
** All rights reserved.
5
** Contact: Nokia Corporation (qt-info@nokia.com)
6
**
7
** This file is part of the test suite of the Qt Toolkit.
8
**
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.
17
**
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.
21
**
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.
29
**
30
** Other Usage
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.
33
**
34
**
35
**
36
**
37
**
38
** $QT_END_LICENSE$
39
**
40
****************************************************************************/
41
42
43
#include <QtCore/QDirIterator>
44
#include <QtTest/QtTest>
45
46
/* We use Patternist, so without it, we won't build. */
47
#ifdef QTEST_XMLPATTERNS
48
49
#include <QtXmlPatterns/QXmlQuery>
50
#include <QtXmlPatterns/QXmlSerializer>
51
#include "../qxmlquery/TestFundament.h"
52
53
/*!
54
 \class tst_CheckXMLFiles
55
 \internal
56
 \since 4.4
57
 \brief Checks whether the XML files found in $QTDIR are well-formed.
58
 */
59
class tst_CheckXMLFiles : public QObject
60
                        , private TestFundament
61
{
62
    Q_OBJECT
63
64
private Q_SLOTS:
65
    void checkXMLFiles() const;
66
    void checkXMLFiles_data() const;
67
};
68
69
void tst_CheckXMLFiles::checkXMLFiles() const
70
{
71
    QFETCH(QString, file);
72
73
    QXmlQuery query;
74
    query.setQuery(QLatin1String("doc-available('") + inputFileAsURI(file).toString() + QLatin1String("')"));
75
    QVERIFY(query.isValid());
76
77
    /* We don't care about the result, we only want to ensure the files can be parsed. */
78
    QByteArray dummy;
79
    QBuffer buffer(&dummy);
80
    QVERIFY(buffer.open(QIODevice::WriteOnly));
81
    QXmlSerializer serializer(query, &buffer);
82
83
    /* This is the important one. */
84
    QVERIFY(query.evaluateTo(&serializer));
85
}
86
87
void tst_CheckXMLFiles::checkXMLFiles_data() const
88
{
89
    QTest::addColumn<QString>("file");
90
91
    QStringList patterns;
92
    /* List possible XML files in Qt. */
93
    patterns.append(QLatin1String("*.xml"));
94
    patterns.append(QLatin1String("*.gccxml"));
95
    patterns.append(QLatin1String("*.svg"));
96
    patterns.append(QLatin1String("*.ui"));
97
    patterns.append(QLatin1String("*.qrc"));
98
    patterns.append(QLatin1String("*.ts"));
99
    /* We don't do HTML files currently because so many of them in 3rd party are broken. */
100
    patterns.append(QLatin1String("*.xhtml"));
101
102
#ifndef Q_OS_WINCE
103
    QString path = QLatin1String("../../../");
104
#else
105
    QString path = QLatin1String("xmlfiles");
106
#endif
107
    QDirIterator it(inputFile(path), patterns, QDir::AllEntries, QDirIterator::Subdirectories);
108
    while(it.hasNext())
109
    {
110
        it.next();
111
112
        /* We got tons of broken XML files as part of auto tests. */
113
        if(!it.filePath().contains(QLatin1String("/tests/auto/")) &&
114
           !it.filePath().contains(QLatin1String("/tests/arthur/")))
115
            QTest::newRow(it.filePath().toUtf8().constData()) << it.filePath();
116
    }
117
}
118
119
QTEST_MAIN(tst_CheckXMLFiles)
120
121
#include "tst_checkxmlfiles.moc"
122
#else
123
QTEST_NOOP_MAIN
124
#endif
125
126
// vim: et:ts=4:sw=4:sts=4