diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | tests/auto/auto.pro | 4 | ||||
-rw-r--r-- | tests/auto/sanity/sanity.pro (renamed from tests/auto/declarative/declarative.pro) | 4 | ||||
-rw-r--r-- | tests/auto/sanity/tst_sanity.cpp (renamed from tests/auto/declarative/tst_declarative.cpp) | 117 |
4 files changed, 107 insertions, 20 deletions
@@ -12,8 +12,8 @@ /examples/quick/extras/drawer/drawer /tests/auto/controls/tst_controls -/tests/auto/declarative/tst_declarative /tests/auto/extras/tst_extras +/tests/auto/sanity/tst_sanity /tests/benchmarks/creationtime/tst_creationtime /tests/benchmarks/objectcount/tst_objectcount diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index fca8731c..a5cbd53c 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -1,5 +1,5 @@ TEMPLATE = subdirs SUBDIRS += \ controls \ - declarative \ - extras + extras \ + sanity diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/sanity/sanity.pro index aae8c20e..436dc7dd 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/sanity/sanity.pro @@ -1,9 +1,9 @@ TEMPLATE = app -TARGET = tst_declarative +TARGET = tst_sanity QT += qml testlib core-private qml-private CONFIG += testcase osx:CONFIG -= app_bundle SOURCES += \ - $$PWD/tst_declarative.cpp + $$PWD/tst_sanity.cpp diff --git a/tests/auto/declarative/tst_declarative.cpp b/tests/auto/sanity/tst_sanity.cpp index d16046da..eb7c5375 100644 --- a/tests/auto/declarative/tst_declarative.cpp +++ b/tests/auto/sanity/tst_sanity.cpp @@ -36,28 +36,62 @@ #include <QtTest> #include <QtQml> +#include <QtCore/private/qhooks_p.h> #include <QtQml/private/qqmljsengine_p.h> #include <QtQml/private/qqmljslexer_p.h> #include <QtQml/private/qqmljsparser_p.h> #include <QtQml/private/qqmljsast_p.h> #include <QtQml/private/qqmljsastvisitor_p.h> -class tst_Declarative : public QObject +Q_GLOBAL_STATIC(QObjectList, qt_qobjects) + +extern "C" Q_DECL_EXPORT void qt_addQObject(QObject *object) +{ + qt_qobjects->append(object); +} + +extern "C" Q_DECL_EXPORT void qt_removeQObject(QObject *object) +{ + qt_qobjects->removeAll(object); +} + +class tst_Sanity : public QObject { Q_OBJECT private slots: + void init(); + void cleanup(); void initTestCase(); - void testFiles(); - void testFunctions(); - void testFunctions_data(); - void testSignalHandlers(); - void testSignalHandlers_data(); + + void jsFiles(); + void functions(); + void functions_data(); + void signalHandlers(); + void signalHandlers_data(); + void anchors(); + void anchors_data(); + void attachedObjects(); + void attachedObjects_data(); private: + QQmlEngine engine; QMap<QString, QString> files; }; +void tst_Sanity::init() +{ + qtHookData[QHooks::AddQObject] = reinterpret_cast<quintptr>(&qt_addQObject); + qtHookData[QHooks::RemoveQObject] = reinterpret_cast<quintptr>(&qt_removeQObject); +} + +void tst_Sanity::cleanup() +{ + qt_qobjects->clear(); + qtHookData[QHooks::AddQObject] = 0; + qtHookData[QHooks::RemoveQObject] = 0; +} + class BaseValidator : public QQmlJS::AST::Visitor { public: @@ -109,7 +143,7 @@ static QMap<QString, QString> listQmlFiles(const QDir &dir) return files; } -void tst_Declarative::initTestCase() +void tst_Sanity::initTestCase() { QQmlEngine engine; foreach (const QString &path, engine.importPathList()) { @@ -119,11 +153,11 @@ void tst_Declarative::initTestCase() } } -void tst_Declarative::testFiles() +void tst_Sanity::jsFiles() { QMap<QString, QString>::const_iterator it; for (it = files.begin(); it != files.end(); ++it) { - if (QFileInfo(it.value()).suffix() == QString("js")) + if (QFileInfo(it.value()).suffix() == QStringLiteral("js")) QFAIL(qPrintable(it.value() + ": JS files are not allowed")); } } @@ -138,7 +172,7 @@ protected: } }; -void tst_Declarative::testFunctions() +void tst_Sanity::functions() { QFETCH(QString, control); QFETCH(QString, filePath); @@ -148,7 +182,7 @@ void tst_Declarative::testFunctions() QFAIL(qPrintable(validator.errors())); } -void tst_Declarative::testFunctions_data() +void tst_Sanity::functions_data() { QTest::addColumn<QString>("control"); QTest::addColumn<QString>("filePath"); @@ -175,7 +209,7 @@ protected: } }; -void tst_Declarative::testSignalHandlers() +void tst_Sanity::signalHandlers() { QFETCH(QString, control); QFETCH(QString, filePath); @@ -185,7 +219,60 @@ void tst_Declarative::testSignalHandlers() QFAIL(qPrintable(validator.errors())); } -void tst_Declarative::testSignalHandlers_data() +void tst_Sanity::signalHandlers_data() +{ + QTest::addColumn<QString>("control"); + QTest::addColumn<QString>("filePath"); + + QMap<QString, QString>::const_iterator it; + for (it = files.begin(); it != files.end(); ++it) + QTest::newRow(qPrintable(it.key())) << it.key() << it.value(); +} + +void tst_Sanity::anchors() +{ + QFETCH(QString, control); + QFETCH(QString, filePath); + + QQmlComponent component(&engine); + component.loadUrl(QUrl::fromLocalFile(filePath)); + + QScopedPointer<QObject> object(component.create()); + QVERIFY(object.data()); + foreach (QObject *object, *qt_qobjects) + QVERIFY2(!object->inherits("QQuickAnchors"), "Anchors are not allowed"); +} + +void tst_Sanity::anchors_data() +{ + QTest::addColumn<QString>("control"); + QTest::addColumn<QString>("filePath"); + + QMap<QString, QString>::const_iterator it; + for (it = files.begin(); it != files.end(); ++it) + QTest::newRow(qPrintable(it.key())) << it.key() << it.value(); +} + +void tst_Sanity::attachedObjects() +{ + QFETCH(QString, control); + QFETCH(QString, filePath); + + QQmlComponent component(&engine); + component.loadUrl(QUrl::fromLocalFile(filePath)); + + QSet<QString> classNames; + QScopedPointer<QObject> object(component.create()); + QVERIFY(object.data()); + foreach (QObject *object, *qt_qobjects) { + QString className = object->metaObject()->className(); + if (className.endsWith("Attached")) + QVERIFY2(!classNames.contains(className), qPrintable(QString("Multiple instances of attached type %1").arg(className))); + classNames.insert(className); + } +} + +void tst_Sanity::attachedObjects_data() { QTest::addColumn<QString>("control"); QTest::addColumn<QString>("filePath"); @@ -195,6 +282,6 @@ void tst_Declarative::testSignalHandlers_data() QTest::newRow(qPrintable(it.key())) << it.key() << it.value(); } -QTEST_MAIN(tst_Declarative) +QTEST_MAIN(tst_Sanity) -#include "tst_declarative.moc" +#include "tst_sanity.moc" |