From 92b8a2eba8eb9fef3a2e59b7a8b17d8324d5b309 Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Tue, 15 Nov 2011 11:02:32 +0100 Subject: [PATCH] QmlJS tests: Move 'basic' codemodel test to QmlJSTools plugin. Change-Id: I2310f914fb200db18ff4148d6f7fa9824fe2393e Reviewed-by: Bill King --- src/plugins/qmljstools/qmljstools-lib.pri | 5 + src/plugins/qmljstools/qmljstools_test.cpp | 107 ++++++++ src/plugins/qmljstools/qmljstoolsplugin.h | 4 + tests/auto/qml/codemodel/basic/basic.pro | 17 -- tests/auto/qml/codemodel/basic/tst_basic.cpp | 266 ------------------- tests/auto/qml/codemodel/codemodel.pro | 2 +- 6 files changed, 117 insertions(+), 284 deletions(-) create mode 100644 src/plugins/qmljstools/qmljstools_test.cpp delete mode 100644 tests/auto/qml/codemodel/basic/basic.pro delete mode 100644 tests/auto/qml/codemodel/basic/tst_basic.cpp diff --git a/src/plugins/qmljstools/qmljstools-lib.pri b/src/plugins/qmljstools/qmljstools-lib.pri index b1ee231e841..ddb6f6cd949 100644 --- a/src/plugins/qmljstools/qmljstools-lib.pri +++ b/src/plugins/qmljstools/qmljstools-lib.pri @@ -36,3 +36,8 @@ SOURCES += \ FORMS += \ $$PWD/qmljscodestylesettingspage.ui + +equals(TEST, 1) { + SOURCES += \ + $$PWD/qmljstools_test.cpp +} diff --git a/src/plugins/qmljstools/qmljstools_test.cpp b/src/plugins/qmljstools/qmljstools_test.cpp new file mode 100644 index 00000000000..7ad6bb15373 --- /dev/null +++ b/src/plugins/qmljstools/qmljstools_test.cpp @@ -0,0 +1,107 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** +** GNU Lesser General Public License Usage +** +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this file. +** Please review the following information to ensure the GNU Lesser General +** Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** Other Usage +** +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +**************************************************************************/ + +#include "qmljstoolsplugin.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace QmlJS; +using namespace QmlJSTools; + +void QmlJSTools::Internal::QmlJSToolsPlugin::test_basic() +{ + QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance(); + + const QString welcomescreenRootPath = Core::ICore::instance()->resourcePath() + "/welcomescreen/welcomescreen.qml"; + modelManager->updateSourceFiles(QStringList(welcomescreenRootPath), false); + modelManager->joinAllThreads(); + + Snapshot snapshot = modelManager->snapshot(); + Document::Ptr doc = snapshot.document(welcomescreenRootPath); + QVERIFY(doc && doc->isQmlDocument()); + + ContextPtr context = Link(snapshot, QStringList(), LibraryInfo())(); + QVERIFY(context); + + const CppComponentValue *rectangleValue = context->valueOwner()->cppQmlTypes().objectByQualifiedName( + "QtQuick", "QDeclarative1Rectangle", LanguageUtils::ComponentVersion(1, 0)); + QVERIFY(rectangleValue); + QVERIFY(!rectangleValue->isWritable("border")); + QVERIFY(rectangleValue->hasProperty("border")); + QVERIFY(rectangleValue->isPointer("border")); + QVERIFY(rectangleValue->isWritable("color")); + QVERIFY(!rectangleValue->isPointer("color")); + + const ObjectValue *ovItem = context->lookupType(doc.data(), QStringList() << "Item"); + QVERIFY(ovItem); + QCOMPARE(ovItem->className(), QString("Item")); + QCOMPARE(context->imports(doc.data())->info("Item", context.data()).name(), QString("QtQuick")); + const ObjectValue *ovTabWidget = context->lookupType(doc.data(), QStringList() << "TabWidget"); + QVERIFY(ovTabWidget); + QCOMPARE(ovTabWidget->className(), QString("TabWidget")); + QCOMPARE(ovTabWidget->prototype(context)->className(), QString("Item")); + + const ObjectValue *ovProperty = context->lookupType(doc.data(), QStringList() << "Item" << "states"); + QVERIFY(ovProperty); + QCOMPARE(ovProperty->className(), QString("State")); + + const CppComponentValue * qmlItemValue = value_cast(ovItem); + QVERIFY(qmlItemValue); + QCOMPARE(qmlItemValue->defaultPropertyName(), QString("data")); + QCOMPARE(qmlItemValue->propertyType("state"), QString("string")); + + const ObjectValue *ovState = context->lookupType(doc.data(), QStringList() << "State"); + const CppComponentValue * qmlState2Value = value_cast(ovState); + QCOMPARE(qmlState2Value->className(), QString("State")); + + const ObjectValue *ovImage = context->lookupType(doc.data(), QStringList() << "Image"); + const CppComponentValue * qmlImageValue = value_cast(ovImage); + QCOMPARE(qmlImageValue->className(), QString("Image")); + QCOMPARE(qmlImageValue->propertyType("source"), QString("QUrl")); +} diff --git a/src/plugins/qmljstools/qmljstoolsplugin.h b/src/plugins/qmljstools/qmljstoolsplugin.h index 0d13b389fd1..f89225cfcf7 100644 --- a/src/plugins/qmljstools/qmljstoolsplugin.h +++ b/src/plugins/qmljstools/qmljstoolsplugin.h @@ -72,6 +72,10 @@ private slots: void onTaskStarted(const QString &type); void onAllTasksFinished(const QString &type); +#ifdef WITH_TESTS + void test_basic(); +#endif + private: ModelManager *m_modelManager; QmlJSToolsSettings *m_settings; diff --git a/tests/auto/qml/codemodel/basic/basic.pro b/tests/auto/qml/codemodel/basic/basic.pro deleted file mode 100644 index e64b0700483..00000000000 --- a/tests/auto/qml/codemodel/basic/basic.pro +++ /dev/null @@ -1,17 +0,0 @@ -include(../../../qttest.pri) - -DEFINES+=QTCREATORDIR=\\\"$$IDE_SOURCE_TREE\\\" -DEFINES += Q_PLUGIN_PATH=\"\\\"$$IDE_PLUGIN_PATH/Nokia\\\"\" - -include($$IDE_SOURCE_TREE/src/libs/utils/utils.pri) -include($$IDE_SOURCE_TREE/src/libs/qmljs/qmljs.pri) -include($$IDE_SOURCE_TREE/src/libs/extensionsystem/extensionsystem.pri) - -INCLUDEPATH += \ - $$IDE_SOURCE_TREE/src/libs/3rdparty/cplusplus \ - $$IDE_SOURCE_TREE/src/plugins/qmldesigner/designercore/include - -TARGET = tst_codemodel_basic - -SOURCES += \ - tst_basic.cpp diff --git a/tests/auto/qml/codemodel/basic/tst_basic.cpp b/tests/auto/qml/codemodel/basic/tst_basic.cpp deleted file mode 100644 index b4fa73d9907..00000000000 --- a/tests/auto/qml/codemodel/basic/tst_basic.cpp +++ /dev/null @@ -1,266 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** -** GNU Lesser General Public License Usage -** -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this file. -** Please review the following information to ensure the GNU Lesser General -** Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** Other Usage -** -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -**************************************************************************/ - - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -using namespace QmlJS; -using namespace QmlJSTools; - -class tst_Basic : public QObject -{ - Q_OBJECT -public: - tst_Basic(); - -private slots: - void initTestCase(); - void cleanupTestCase(); - - void basicObjectTests(); - //void testMetaInfo(); - -private: - ExtensionSystem::PluginManager *pluginManager; -}; - -tst_Basic::tst_Basic() -{ -} - - -#ifdef Q_OS_MAC -# define SHARE_PATH "/Resources" -#else -# define SHARE_PATH "/share/qtcreator" -#endif - -QString resourcePath() -{ - return QDir::cleanPath(QTCREATORDIR + QLatin1String(SHARE_PATH)); -} -void tst_Basic::initTestCase() -{ - pluginManager = new ExtensionSystem::PluginManager; - QSettings *settings = new QSettings(QSettings::IniFormat, QSettings::UserScope, - QLatin1String("Nokia"), QLatin1String("QtCreator")); - pluginManager->setSettings(settings); - pluginManager->setFileExtension(QLatin1String("pluginspec")); - pluginManager->setPluginPaths(QStringList() << QLatin1String(Q_PLUGIN_PATH)); - - // skip the welcome plugin, it fails to load correctly - foreach (ExtensionSystem::PluginSpec *pluginSpec, pluginManager->plugins()) { - if (pluginSpec->name() == QLatin1String("Welcome")) - pluginSpec->setEnabled(false); - } - - pluginManager->loadPlugins(); - - // the resource path is wrong, have to load things manually - QFileInfo builtins(resourcePath() + "/qml-type-descriptions/builtins.qmltypes"); - QStringList errors, warnings; - CppQmlTypesLoader::defaultQtObjects = CppQmlTypesLoader::loadQmlTypes(QFileInfoList() << builtins, &errors, &warnings); -} - -void tst_Basic::cleanupTestCase() -{ - pluginManager->shutdown(); - delete pluginManager; -} - - -void tst_Basic::basicObjectTests() -{ - QmlJS::ModelManagerInterface *modelManager = QmlJS::ModelManagerInterface::instance(); - - QStringList files(QString(QTCREATORDIR) + "/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml"); - modelManager->updateSourceFiles(files, false); - modelManager->joinAllThreads(); - - Snapshot snapshot = modelManager->snapshot(); - Document::Ptr doc = snapshot.document(QString(QTCREATORDIR) + "/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml"); - QVERIFY(doc && doc->isQmlDocument()); - - ContextPtr context = Link(snapshot, QStringList(), LibraryInfo())(); - QVERIFY(context); - - const CppComponentValue *rectangleValue = context->valueOwner()->cppQmlTypes().objectByQualifiedName( - "QtQuick", "QDeclarative1Rectangle", LanguageUtils::ComponentVersion(1, 0)); - QVERIFY(rectangleValue); - QVERIFY(!rectangleValue->isWritable("border")); - QVERIFY(rectangleValue->hasProperty("border")); - QVERIFY(rectangleValue->isPointer("border")); - QVERIFY(rectangleValue->isWritable("color")); - QVERIFY(!rectangleValue->isPointer("color")); - - const ObjectValue *ovItem = context->lookupType(doc.data(), QStringList() << "Item"); - QCOMPARE(ovItem->className(), QString("Item")); - QCOMPARE(context->imports(doc.data())->info("Item", context.data()).name(), QString("QtQuick")); - const ObjectValue *ovButton = context->lookupType(doc.data(), QStringList() << "MyButton"); - QCOMPARE(ovButton->className(), QString("MyButton")); - QCOMPARE(ovButton->prototype(context)->className(), QString("Rectangle")); - - const ObjectValue *ovProperty = context->lookupType(doc.data(), QStringList() << "Item" << "states"); - QVERIFY(ovProperty); - QCOMPARE(ovProperty->className(), QString("State")); - - const CppComponentValue * qmlItemValue = value_cast(ovItem); - QVERIFY(qmlItemValue); - QCOMPARE(qmlItemValue->defaultPropertyName(), QString("data")); - QCOMPARE(qmlItemValue->propertyType("state"), QString("string")); - - const ObjectValue *ovState = context->lookupType(doc.data(), QStringList() << "State"); - const CppComponentValue * qmlState2Value = value_cast(ovState); - QCOMPARE(qmlState2Value->className(), QString("State")); - - const ObjectValue *ovImage = context->lookupType(doc.data(), QStringList() << "Image"); - const CppComponentValue * qmlImageValue = value_cast(ovImage); - QCOMPARE(qmlImageValue->className(), QString("Image")); - QCOMPARE(qmlImageValue->propertyType("source"), QString("QUrl")); -} - -using namespace QmlDesigner; - -//void tst_Basic::testMetaInfo() -//{ -// TestModelManager modelManager; - -// modelManager.loadFile(QString(QTCREATORDIR) + "/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml"); - -// Snapshot snapshot = modelManager.snapshot(); -// Document::Ptr doc = snapshot.document(QString(QTCREATORDIR) + "/tests/auto/qml/qmldesigner/data/fx/usingmybutton.qml"); -// QVERIFY(doc && doc->isQmlDocument()); - -// LookupContext::Ptr lookupContext = LookupContext::create(doc, snapshot, QList()); - -// MetaInfo::setDocument(doc); -// MetaInfo::setLookupContext(lookupContext); - -// MetaInfo item("Qt/Item", 4, 7); -// MetaInfo myButton("MyButton"); -// MetaInfo textEdit("TextEdit"); -// MetaInfo super("Qt/Super", 4, 7); -// MetaInfo maniac("Maniac"); - -// QVERIFY(item.isValid()); -// QVERIFY(myButton.isValid()); -// QVERIFY(textEdit.isValid()); - -// QVERIFY(!super.isValid()); -// QVERIFY(!maniac.isValid()); - -// QVERIFY(textEdit.localProperties().contains("color")); -// QVERIFY(textEdit.isPropertyWritable("color")); -// MetaInfo text("Qt/Text", 4, 7); - -// QVERIFY(item.isValid()); -// QVERIFY(myButton.isValid()); - -// QVERIFY(!item.isComponent()); -// QVERIFY(myButton.isComponent()); - -// QVERIFY(myButton.properties().contains("text")); -// QVERIFY(myButton.properties().contains("myNumber")); -// QVERIFY(myButton.properties().contains("gradient")); -// QVERIFY(myButton.properties().contains("border.width")); -// QVERIFY(myButton.properties().contains("anchors.bottomMargin")); -// QVERIFY(myButton.localProperties().contains("text")); -// QVERIFY(myButton.localProperties().contains("myNumber")); -// QVERIFY(!myButton.localProperties().contains("border.width")); - -// QVERIFY(!item.properties().contains("text")); -// QVERIFY(!item.properties().contains("myNumber")); -// QVERIFY(item.properties().contains("anchors.bottomMargin")); -// QVERIFY(item.properties().contains("x")); -// QVERIFY(!item.localProperties().contains("x")); -// QVERIFY(!item.localProperties().contains("enabled")); -// QVERIFY(item.localProperties().contains("anchors.bottomMargin")); -// QVERIFY(item.localProperties().contains("states")); -// QVERIFY(item.localProperties().contains("parent")); - -// QCOMPARE(myButton.propertyTypeName("text"), QString("string")); -// QCOMPARE(myButton.propertyTypeName("myNumber"), QString("real")); -// QCOMPARE(myButton.propertyTypeName("x"), QString("qreal")); -// QCOMPARE(myButton.propertyTypeName("border.width"), QString("int")); -// QCOMPARE(myButton.propertyTypeName("gradient"), QString("Qt/Gradient")); - -// QCOMPARE(myButton.defaultPropertyName(), QString("content")); -// QCOMPARE(item.defaultPropertyName(), QString("data")); - -// QVERIFY(item.isPropertyList("children")); -// QVERIFY(myButton.isPropertyList("children")); -// QVERIFY(item.isPropertyList("data")); -// QVERIFY(myButton.isPropertyList("data")); -// QVERIFY(item.isPropertyList("states")); -// QVERIFY(myButton.isPropertyList("states")); - -// QVERIFY(!item.isPropertyList("x")); -// QVERIFY(!myButton.isPropertyList("x")); -// QVERIFY(!item.isPropertyList("state")); -// QVERIFY(!myButton.isPropertyList("state")); - -// QVERIFY(myButton.isPropertyPointer("parent")); -// QVERIFY(text.localProperties().contains("font")); -// QVERIFY(!text.isPropertyPointer("font")); -// QVERIFY(myButton.isPropertyWritable("state")); -// QVERIFY(!myButton.isPropertyWritable("border")); - -// QVERIFY(text.localProperties().contains("horizontalAlignment")); -// QVERIFY(text.isPropertyEnum("horizontalAlignment")); - -// foreach (ImportInfo import, doc->bind()->imports()) { -// QCOMPARE(import.name(), QString("Qt")); -// } -//} - -QTEST_MAIN(tst_Basic); - -#include "tst_basic.moc" diff --git a/tests/auto/qml/codemodel/codemodel.pro b/tests/auto/qml/codemodel/codemodel.pro index c5982252efa..dde5bb0bddd 100644 --- a/tests/auto/qml/codemodel/codemodel.pro +++ b/tests/auto/qml/codemodel/codemodel.pro @@ -1,3 +1,3 @@ TEMPLATE = subdirs -SUBDIRS += basic check +SUBDIRS += check