From 5c53861cced2d40490e4c7bfc202aadc532df4c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Fri, 8 May 2015 22:10:43 +0100 Subject: qmllint: Add unit-tests Change-Id: Ia3eb33e89597e3811112ce78d8a59a822cc9190c Reviewed-by: Simon Hausmann --- tests/auto/qml/qml.pro | 2 +- tests/auto/qml/qmllint/data/QTBUG-45916.js | 6 ++ tests/auto/qml/qmllint/data/Simple.qml | 4 ++ tests/auto/qml/qmllint/data/failure1.js | 5 ++ tests/auto/qml/qmllint/data/failure1.qml | 5 ++ tests/auto/qml/qmllint/data/importing_js.qml | 5 ++ tests/auto/qml/qmllint/main.cpp | 90 ++++++++++++++++++++++++++++ tests/auto/qml/qmllint/qmllint.pro | 6 ++ tests/auto/qml/qmlmin/tst_qmlmin.cpp | 1 + 9 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 tests/auto/qml/qmllint/data/QTBUG-45916.js create mode 100644 tests/auto/qml/qmllint/data/Simple.qml create mode 100644 tests/auto/qml/qmllint/data/failure1.js create mode 100644 tests/auto/qml/qmllint/data/failure1.qml create mode 100644 tests/auto/qml/qmllint/data/importing_js.qml create mode 100644 tests/auto/qml/qmllint/main.cpp create mode 100644 tests/auto/qml/qmllint/qmllint.pro (limited to 'tests/auto/qml') diff --git a/tests/auto/qml/qml.pro b/tests/auto/qml/qml.pro index 430a90b800..5d58beea1e 100644 --- a/tests/auto/qml/qml.pro +++ b/tests/auto/qml/qml.pro @@ -70,7 +70,7 @@ qtHaveModule(widgets) { SUBDIRS += $$PUBLICTESTS SUBDIRS += $$METATYPETESTS -!winrt: SUBDIRS += debugger # no QProcess on winrt +!winrt: SUBDIRS += debugger qmllint # no QProcess on winrt contains(QT_CONFIG, private_tests) { SUBDIRS += $$PRIVATETESTS diff --git a/tests/auto/qml/qmllint/data/QTBUG-45916.js b/tests/auto/qml/qmllint/data/QTBUG-45916.js new file mode 100644 index 0000000000..1947b5aa80 --- /dev/null +++ b/tests/auto/qml/qmllint/data/QTBUG-45916.js @@ -0,0 +1,6 @@ +.pragma library +.import QtQuick 2.4 as JSQtQuick + +function foo(url) +{ +} diff --git a/tests/auto/qml/qmllint/data/Simple.qml b/tests/auto/qml/qmllint/data/Simple.qml new file mode 100644 index 0000000000..db54cff477 --- /dev/null +++ b/tests/auto/qml/qmllint/data/Simple.qml @@ -0,0 +1,4 @@ +import QtQuick 2.2 + +Item { +} diff --git a/tests/auto/qml/qmllint/data/failure1.js b/tests/auto/qml/qmllint/data/failure1.js new file mode 100644 index 0000000000..6a62accf06 --- /dev/null +++ b/tests/auto/qml/qmllint/data/failure1.js @@ -0,0 +1,5 @@ +function foo() +{ + var hello + returm 0 // Typo +} diff --git a/tests/auto/qml/qmllint/data/failure1.qml b/tests/auto/qml/qmllint/data/failure1.qml new file mode 100644 index 0000000000..56f0f746a9 --- /dev/null +++ b/tests/auto/qml/qmllint/data/failure1.qml @@ -0,0 +1,5 @@ +import QtQuick 1.0 + +Item { + id root # // Missing : +} diff --git a/tests/auto/qml/qmllint/data/importing_js.qml b/tests/auto/qml/qmllint/data/importing_js.qml new file mode 100644 index 0000000000..fa6cf797db --- /dev/null +++ b/tests/auto/qml/qmllint/data/importing_js.qml @@ -0,0 +1,5 @@ +import "QTBUG-45916.js" as JSTest + +Item { + id: root +} diff --git a/tests/auto/qml/qmllint/main.cpp b/tests/auto/qml/qmllint/main.cpp new file mode 100644 index 0000000000..a6dadd7178 --- /dev/null +++ b/tests/auto/qml/qmllint/main.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Sergio Martins +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +class TestQmllint: public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void initTestCase(); + void test(); + void test_data(); +private: + QString m_qmllintPath; +}; + +void TestQmllint::initTestCase() +{ + m_qmllintPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QLatin1String("/qmllint"); +#ifdef Q_OS_WIN + m_qmllintPath += QLatin1String(".exe"); +#endif + if (!QFileInfo(m_qmllintPath).exists()) { + QString message = QStringLiteral("qmllint executable not found (looked for %0)").arg(m_qmllintPath); + QFAIL(qPrintable(message)); + } +} + +void TestQmllint::test_data() +{ + QTest::addColumn("filename"); + QTest::addColumn("isValid"); + + // Valid files: + QTest::newRow("Simple_QML") << QStringLiteral("Simple.qml") << true; + QTest::newRow("QML_importing_JS") << QStringLiteral("importing_js.qml") << true; + QTest::newRow("QTBUG-45916_JS_with_pragma_and_import") << QStringLiteral("QTBUG-45916.js") << true; + + // Invalid files: + QTest::newRow("Invalid_syntax_QML") << QStringLiteral("failure1.qml") << false; + QTest::newRow("Invalid_syntax_JS") << QStringLiteral("failure1.js") << false; +} + +void TestQmllint::test() +{ + QFETCH(QString, filename); + QFETCH(bool, isValid); + filename = QStringLiteral("data/") + filename; + QStringList args; + args << QStringLiteral("--silent") << filename; + + bool success = QProcess::execute(m_qmllintPath, args) == 0; + QCOMPARE(success, isValid); +} + +QTEST_MAIN(TestQmllint) +#include "main.moc" diff --git a/tests/auto/qml/qmllint/qmllint.pro b/tests/auto/qml/qmllint/qmllint.pro new file mode 100644 index 0000000000..b53a6f6877 --- /dev/null +++ b/tests/auto/qml/qmllint/qmllint.pro @@ -0,0 +1,6 @@ +TEMPLATE = app +TARGET = testqmllint +INCLUDEPATH += . + +SOURCES += main.cpp +QT += testlib diff --git a/tests/auto/qml/qmlmin/tst_qmlmin.cpp b/tests/auto/qml/qmlmin/tst_qmlmin.cpp index d2e8526896..6d2fba3f46 100644 --- a/tests/auto/qml/qmlmin/tst_qmlmin.cpp +++ b/tests/auto/qml/qmlmin/tst_qmlmin.cpp @@ -87,6 +87,7 @@ void tst_qmlmin::initTestCase() excludedDirs << "doc/src/snippets/qtquick1/qtbinding"; excludedDirs << "doc/src/snippets/qtquick1/imports"; excludedDirs << "tests/manual/v4"; + excludedDirs << "tests/auto/qml/qmllint"; // Add invalid files (i.e. files with syntax errors) invalidFiles << "tests/auto/quick/qquickloader/data/InvalidSourceComponent.qml"; -- cgit v1.2.3