diff options
author | Matthew Vogt <matthew.vogt@nokia.com> | 2012-02-16 14:43:03 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-24 04:51:31 +0100 |
commit | b855240b782395f94315f43ea3e7e182299fac48 (patch) | |
tree | bc594c04449be8cd14cd0ab0bb72dafc2be0ffb2 /tests/auto/qml/qqmlqt | |
parent | 6a42a6e0a9a1abdda0d07a5a20b4ac7e45348684 (diff) |
Rename QDeclarative symbols to QQuick and QQml
Symbols beginning with QDeclarative are already exported
by the quick1 module.
Users can apply the bin/rename-qtdeclarative-symbols.sh
script to modify client code using the previous names of the
renamed symbols.
Task-number: QTBUG-23737
Change-Id: Ifaa482663767634931e8711a8e9bf6e404859e66
Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto/qml/qqmlqt')
30 files changed, 1074 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlqt/data/atob.qml b/tests/auto/qml/qqmlqt/data/atob.qml new file mode 100644 index 0000000000..0d684003a1 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/atob.qml @@ -0,0 +1,7 @@ +import QtQuick 2.0 + +QtObject { + property string test1: Qt.atob() + property string test2: Qt.atob("SGVsbG8gd29ybGQh") +} + diff --git a/tests/auto/qml/qqmlqt/data/btoa.qml b/tests/auto/qml/qqmlqt/data/btoa.qml new file mode 100644 index 0000000000..0ecd01d284 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/btoa.qml @@ -0,0 +1,6 @@ +import QtQuick 2.0 + +QtObject { + property string test1: Qt.btoa() + property string test2: Qt.btoa("Hello world!") +} diff --git a/tests/auto/qml/qqmlqt/data/createComponent.qml b/tests/auto/qml/qqmlqt/data/createComponent.qml new file mode 100644 index 0000000000..3ebc9f14f8 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/createComponent.qml @@ -0,0 +1,20 @@ +import QtQuick 2.0 + +QtObject { + property bool emptyArg: false + + property string relativeUrl + property string absoluteUrl + + property QtObject incorectArgCount1: Qt.createComponent() + property QtObject incorectArgCount2: Qt.createComponent("main.qml", 10) + + Component.onCompleted: { + emptyArg = (Qt.createComponent("") == null); + var r = Qt.createComponent("createComponentData.qml"); + relativeUrl = r.url; + + var a = Qt.createComponent("http://www.example.com/test.qml"); + absoluteUrl = a.url; + } +} diff --git a/tests/auto/qml/qqmlqt/data/createComponentData.qml b/tests/auto/qml/qqmlqt/data/createComponentData.qml new file mode 100644 index 0000000000..2a824e5362 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/createComponentData.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +QtObject { + property int test: 1913 +} diff --git a/tests/auto/qml/qqmlqt/data/createComponent_lib.js b/tests/auto/qml/qqmlqt/data/createComponent_lib.js new file mode 100644 index 0000000000..30499e943e --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/createComponent_lib.js @@ -0,0 +1,11 @@ +.pragma library + +function loadComponent() { + var component = Qt.createComponent("createComponentData.qml"); + return component.status; +} + +function createComponent() { + var component = Qt.createComponent("createComponentData.qml"); + return component.createObject(null); +} diff --git a/tests/auto/qml/qqmlqt/data/createComponent_lib.qml b/tests/auto/qml/qqmlqt/data/createComponent_lib.qml new file mode 100644 index 0000000000..a52453e8fa --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/createComponent_lib.qml @@ -0,0 +1,12 @@ +import QtQuick 2.0 +import "createComponent_lib.js" as Test + +Item { + property int status: Component.Null + property int readValue: 0 + + Component.onCompleted: { + status = Test.loadComponent() + readValue = Test.createComponent().test; + } +} diff --git a/tests/auto/qml/qqmlqt/data/createQmlObject.qml b/tests/auto/qml/qqmlqt/data/createQmlObject.qml new file mode 100644 index 0000000000..87601b1cc8 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/createQmlObject.qml @@ -0,0 +1,31 @@ +import QtQuick 2.0 + +Item { + id: root + + // errors resulting in exceptions + property QtObject incorrectArgCount1: Qt.createQmlObject() + property QtObject incorrectArgCount2: Qt.createQmlObject("import QtQuick 2.0\nQtObject{}", root, "main.qml", 10) + property QtObject noParent: Qt.createQmlObject("import QtQuick 2.0\nQtObject{\nproperty int test: 13}", 0) + property QtObject notAvailable: Qt.createQmlObject("import QtQuick 2.0\nQtObject{Blah{}}", root) + property QtObject errors: Qt.createQmlObject("import QtQuick 2.0\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml") + + property bool emptyArg: false + + property bool success: false + + Component.onCompleted: { + // errors resulting in nulls + emptyArg = (Qt.createQmlObject("", root) == null); + try { + Qt.createQmlObject("import QtQuick 2.0\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root) + } catch (error) { + console.log("RunTimeError: ",error.message); + } + + var o = Qt.createQmlObject("import QtQuick 2.0\nQtObject{\nproperty int test: 13\n}", root); + success = (o.test == 13); + + Qt.createQmlObject("import QtQuick 2.0\nItem {}\n", root); + } +} diff --git a/tests/auto/qml/qqmlqt/data/darker.qml b/tests/auto/qml/qqmlqt/data/darker.qml new file mode 100644 index 0000000000..ce6c705fb4 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/darker.qml @@ -0,0 +1,12 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.darker(Qt.rgba(1, 0.8, 0.3)) + property variant test2: Qt.darker() + property variant test3: Qt.darker(Qt.rgba(1, 0.8, 0.3), 2.8) + property variant test4: Qt.darker("red"); + property variant test5: Qt.darker("perfectred"); // Non-existant color + property variant test6: Qt.darker(10); + property variant test7: Qt.darker(Qt.rgba(1, 0.8, 0.3), 2.8, 10) +} + diff --git a/tests/auto/qml/qqmlqt/data/dateTimeConversion.qml b/tests/auto/qml/qqmlqt/data/dateTimeConversion.qml new file mode 100644 index 0000000000..641ba6e1ca --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/dateTimeConversion.qml @@ -0,0 +1,14 @@ +import QtQuick 2.0 + +QtObject { + // months are 0-based - so January = 0, December = 11. + property variant qtime: new Date(2000,0,0,14,15,38,200) // yyyy/MM/dd 14:15:38.200 + property variant qdate: new Date(2008,11,24) // 2008/12/24 hh:mm:ss.zzz + property variant qdatetime: new Date(2008,11,24,14,15,38,200) // 2008/12/24 14:15:38.200 + + property variant qdatetime2: new Date(2852,11,31,23,59,59,500) // 2852/12/31 23:59:59.500 + property variant qdatetime3: new Date(2000,0,1,0,0,0,0) // 2000/01/01 00:00:00.000 + property variant qdatetime4: new Date(2001,1,2) // 2001/02/02 hh:mm:ss.zzz + property variant qdatetime5: new Date(1999,0,1,2,3,4) // 1999/01/01 02:03:04.zzz + property variant qdatetime6: new Date(2008,1,24,14,15,38,200) // 2008/02/24 14:15:38.200 +} diff --git a/tests/auto/qml/qqmlqt/data/enums.qml b/tests/auto/qml/qqmlqt/data/enums.qml new file mode 100644 index 0000000000..5a2ff534af --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/enums.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 + +QtObject { + property int test1: Qt.Key_Escape + property int test2: Qt.DescendingOrder + property int test3: Qt.ElideMiddle + property int test4: Qt.AlignRight +} + diff --git a/tests/auto/qml/qqmlqt/data/fontFamilies.qml b/tests/auto/qml/qqmlqt/data/fontFamilies.qml new file mode 100644 index 0000000000..70245ab159 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/fontFamilies.qml @@ -0,0 +1,6 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.fontFamilies(10) + property variant test2: Qt.fontFamilies(); +} diff --git a/tests/auto/qml/qqmlqt/data/formatting.qml b/tests/auto/qml/qqmlqt/data/formatting.qml new file mode 100644 index 0000000000..7a462c8eeb --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/formatting.qml @@ -0,0 +1,44 @@ +import QtQuick 2.0 + +QtObject { + property date dateFromString: "2008-12-24" + property variant jsdate: new Date(2008,11,24,14,15,38,200) // months are 0-based + + function formatDate(prop) { + var v = eval(prop) + return [ + Qt.formatDate(v), + Qt.formatDate(v, Qt.DefaultLocaleLongDate), + Qt.formatDate(v, "ddd MMMM d yy") + ] + } + + function formatTime(prop) { + var v = eval(prop) + return [ + Qt.formatTime(v), + Qt.formatTime(v, Qt.DefaultLocaleLongDate), + Qt.formatTime(v, "H:m:s a"), + Qt.formatTime(v, "hh:mm:ss.zzz") + ] + } + + function formatDateTime(prop) { + var v = eval(prop) + return [ + Qt.formatDateTime(v), + Qt.formatDateTime(v, Qt.DefaultLocaleLongDate), + Qt.formatDateTime(v, "M/d/yy H:m:s a") + ] + } + + // Error cases + property string err_date1: Qt.formatDate() + property string err_date2: Qt.formatDate(new Date, new Object) + + property string err_time1: Qt.formatTime() + property string err_time2: Qt.formatTime(new Date, new Object) + + property string err_dateTime1: Qt.formatDateTime() + property string err_dateTime2: Qt.formatDateTime(new Date, new Object) +} diff --git a/tests/auto/qml/qqmlqt/data/hsla.qml b/tests/auto/qml/qqmlqt/data/hsla.qml new file mode 100644 index 0000000000..ff9622b339 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/hsla.qml @@ -0,0 +1,11 @@ +import QtQuick 2.0 + +QtObject { + property color test1: Qt.hsla(1, 0, 0, 0.8); + property color test2: Qt.hsla(1, 0.5, 0.3); + property color test3: Qt.hsla(1, 1); + property color test4: Qt.hsla(1, 1, 1, 1, 1); + property color test5: Qt.hsla(1.2, 1.3, 1.4, 1.5); + property color test6: Qt.hsla(-0.1, -0.2, -0.3, -0.4); +} + diff --git a/tests/auto/qml/qqmlqt/data/isQtObject.qml b/tests/auto/qml/qqmlqt/data/isQtObject.qml new file mode 100644 index 0000000000..6829209518 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/isQtObject.qml @@ -0,0 +1,14 @@ +import QtQuick 2.0 + +QtObject { + id: root + + property QtObject nullObject + + property bool test1: Qt.isQtObject(root) + property bool test2: Qt.isQtObject(nullObject) + property bool test3: Qt.isQtObject(10) + property bool test4: Qt.isQtObject(null) + property bool test5: Qt.isQtObject({ a: 10, b: 11 }) +} + diff --git a/tests/auto/qml/qqmlqt/data/lighter.qml b/tests/auto/qml/qqmlqt/data/lighter.qml new file mode 100644 index 0000000000..7db5e1edeb --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/lighter.qml @@ -0,0 +1,11 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.lighter(Qt.rgba(1, 0.8, 0.3)) + property variant test2: Qt.lighter() + property variant test3: Qt.lighter(Qt.rgba(1, 0.8, 0.3), 1.8) + property variant test4: Qt.lighter("red"); + property variant test5: Qt.lighter("perfectred"); // Non-existant color + property variant test6: Qt.lighter(10); + property variant test7: Qt.lighter(Qt.rgba(1, 0.8, 0.3), 1.8, 5) +} diff --git a/tests/auto/qml/qqmlqt/data/md5.qml b/tests/auto/qml/qqmlqt/data/md5.qml new file mode 100644 index 0000000000..bec1ed1fe7 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/md5.qml @@ -0,0 +1,6 @@ +import QtQuick 2.0 + +QtObject { + property string test1: Qt.md5() + property string test2: Qt.md5("Hello World") +} diff --git a/tests/auto/qml/qqmlqt/data/openUrlExternally.qml b/tests/auto/qml/qqmlqt/data/openUrlExternally.qml new file mode 100644 index 0000000000..37b9f513d9 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/openUrlExternally.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 + +QtObject { + Component.onCompleted: Qt.openUrlExternally("test:url") + + property bool testFile + onTestFileChanged: Qt.openUrlExternally("test.html") +} diff --git a/tests/auto/qml/qqmlqt/data/openUrlExternally_lib.js b/tests/auto/qml/qqmlqt/data/openUrlExternally_lib.js new file mode 100644 index 0000000000..702357afbf --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/openUrlExternally_lib.js @@ -0,0 +1,9 @@ +.pragma library + +function loadTest() { + Qt.openUrlExternally("test:url") +} + +function loadFile() { + Qt.openUrlExternally("test.html") +} diff --git a/tests/auto/qml/qqmlqt/data/openUrlExternally_lib.qml b/tests/auto/qml/qqmlqt/data/openUrlExternally_lib.qml new file mode 100644 index 0000000000..4bf584d134 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/openUrlExternally_lib.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 +import "openUrlExternally_lib.js" as Test + +Item { + Component.onCompleted: Test.loadTest(); + + property bool testFile + onTestFileChanged: Test.loadFile(); +} diff --git a/tests/auto/qml/qqmlqt/data/point.qml b/tests/auto/qml/qqmlqt/data/point.qml new file mode 100644 index 0000000000..fe12ee6232 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/point.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.point(19, 34); + property variant test2: Qt.point(-3, 109.2); + property variant test3: Qt.point(-3); + property variant test4: Qt.point(-3, 109.2, 1); +} + diff --git a/tests/auto/qml/qqmlqt/data/quit.qml b/tests/auto/qml/qqmlqt/data/quit.qml new file mode 100644 index 0000000000..e3b91660e7 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/quit.qml @@ -0,0 +1,5 @@ +import QtQuick 2.0 + +QtObject { + Component.onCompleted: Qt.quit() +} diff --git a/tests/auto/qml/qqmlqt/data/rect.qml b/tests/auto/qml/qqmlqt/data/rect.qml new file mode 100644 index 0000000000..b294b22c5b --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/rect.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.rect(10, 13, 100, 109) + property variant test2: Qt.rect(-10, 13, 100, 109.6) + property variant test3: Qt.rect(10, 13); + property variant test4: Qt.rect(10, 13, 100, 109, 10) + property variant test5: Qt.rect(10, 13, 100, -109) +} diff --git a/tests/auto/qml/qqmlqt/data/resolvedUrl.qml b/tests/auto/qml/qqmlqt/data/resolvedUrl.qml new file mode 100644 index 0000000000..06ef48b82b --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/resolvedUrl.qml @@ -0,0 +1,13 @@ +import QtQuick 2.0 + +QtObject { + property string result + property bool isString: false + + Component.onCompleted: { + var a = Qt.resolvedUrl("resolvedUrl.qml"); + result = a; + isString = (typeof a) == "string" + } +} + diff --git a/tests/auto/qml/qqmlqt/data/rgba.qml b/tests/auto/qml/qqmlqt/data/rgba.qml new file mode 100644 index 0000000000..3b010f68cb --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/rgba.qml @@ -0,0 +1,10 @@ +import QtQuick 2.0 + +QtObject { + property color test1: Qt.rgba(1, 0, 0, 0.8); + property color test2: Qt.rgba(1, 0.5, 0.3); + property color test3: Qt.rgba(1, 1); + property color test4: Qt.rgba(1, 1, 1, 1, 1); + property color test5: Qt.rgba(1.2, 1.3, 1.4, 1.5); + property color test6: Qt.rgba(-0.1, -0.2, -0.3, -0.4); +} diff --git a/tests/auto/qml/qqmlqt/data/size.qml b/tests/auto/qml/qqmlqt/data/size.qml new file mode 100644 index 0000000000..41051f4216 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/size.qml @@ -0,0 +1,11 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.size(19, 34); + property variant test2: Qt.size(3, 109.2); + property variant test3: Qt.size(-3, 10); + property variant test4: Qt.size(3); + property variant test5: Qt.size(3, 109.2, 1); +} + + diff --git a/tests/auto/qml/qqmlqt/data/tint.qml b/tests/auto/qml/qqmlqt/data/tint.qml new file mode 100644 index 0000000000..816e6e9b08 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/tint.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 + +QtObject { + property color test1: Qt.tint("red", "blue"); + property color test2: Qt.tint(Qt.rgba(1, 0, 0), Qt.rgba(0, 0, 0, 0)); + property color test3: Qt.tint("red", Qt.rgba(0, 0, 1, 0.5)); + property color test4: Qt.tint("red", Qt.rgba(0, 0, 1, 0.5), 10); + property color test5: Qt.tint("red") +} diff --git a/tests/auto/qml/qqmlqt/data/vector.qml b/tests/auto/qml/qqmlqt/data/vector.qml new file mode 100644 index 0000000000..5a949515ed --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/vector.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.vector3d(1, 0, 0.9); + property variant test2: Qt.vector3d(102, -10, -982.1); + property variant test3: Qt.vector3d(102, -10); + property variant test4: Qt.vector3d(102, -10, -982.1, 10); +} diff --git a/tests/auto/qml/qqmlqt/data/vector4.qml b/tests/auto/qml/qqmlqt/data/vector4.qml new file mode 100644 index 0000000000..554dd1e9d4 --- /dev/null +++ b/tests/auto/qml/qqmlqt/data/vector4.qml @@ -0,0 +1,8 @@ +import QtQuick 2.0 + +QtObject { + property variant test1: Qt.vector4d(1, 0, 0.9, 0.6); + property variant test2: Qt.vector4d(102, -10, -982.1, 10); + property variant test3: Qt.vector4d(102, -10, -982.1); + property variant test4: Qt.vector4d(102, -10, -982.1, 10, 15); +} diff --git a/tests/auto/qml/qqmlqt/qqmlqt.pro b/tests/auto/qml/qqmlqt/qqmlqt.pro new file mode 100644 index 0000000000..890a7e7636 --- /dev/null +++ b/tests/auto/qml/qqmlqt/qqmlqt.pro @@ -0,0 +1,15 @@ +CONFIG += testcase +TARGET = tst_qqmlqt +SOURCES += tst_qqmlqt.cpp + +include (../../shared/util.pri) + +macx:CONFIG -= app_bundle + +testDataFiles.files = data +testDataFiles.path = . +DEPLOYMENT += testDataFiles + +CONFIG += parallel_test + +QT += core-private gui-private v8-private qml-private quick-private testlib diff --git a/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp new file mode 100644 index 0000000000..a679188cb7 --- /dev/null +++ b/tests/auto/qml/qqmlqt/tst_qqmlqt.cpp @@ -0,0 +1,732 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** 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. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <private/qqmlengine_p.h> + +#include <qtest.h> +#include <QDebug> +#include <QQmlEngine> +#include <QFontDatabase> +#include <QFileInfo> +#include <QQmlComponent> +#include <QDesktopServices> +#include <QDir> +#include <QVector3D> +#include <QCryptographicHash> +#include <QtQuick/QQuickItem> +#include <QSignalSpy> +#include "../../shared/util.h" + +class tst_qqmlqt : public QQmlDataTest +{ + Q_OBJECT +public: + tst_qqmlqt() {} + +private slots: + void enums(); + void rgba(); + void hsla(); + void rect(); + void point(); + void size(); + void vector(); + void vector4d(); + void lighter(); + void darker(); + void tint(); + void openUrlExternally(); + void openUrlExternally_pragmaLibrary(); + void md5(); + void createComponent(); + void createComponent_pragmaLibrary(); + void createQmlObject(); + void dateTimeConversion(); + void dateTimeFormatting(); + void dateTimeFormatting_data(); + void dateTimeFormattingVariants(); + void dateTimeFormattingVariants_data(); + void isQtObject(); + void btoa(); + void atob(); + void fontFamilies(); + void quit(); + void resolvedUrl(); + +private: + QQmlEngine engine; +}; + +void tst_qqmlqt::enums() +{ + QQmlComponent component(&engine, testFileUrl("enums.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test1").toInt(), (int)Qt::Key_Escape); + QCOMPARE(object->property("test2").toInt(), (int)Qt::DescendingOrder); + QCOMPARE(object->property("test3").toInt(), (int)Qt::ElideMiddle); + QCOMPARE(object->property("test4").toInt(), (int)Qt::AlignRight); + + delete object; +} + +void tst_qqmlqt::rgba() +{ + QQmlComponent component(&engine, testFileUrl("rgba.qml")); + + QString warning1 = component.url().toString() + ":6: Error: Qt.rgba(): Invalid arguments"; + QString warning2 = component.url().toString() + ":7: Error: Qt.rgba(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + + QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(1, 0, 0, 0.8)); + QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromRgbF(1, 0.5, 0.3, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor::fromRgbF(1, 1, 1, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor::fromRgbF(0, 0, 0, 0)); + + delete object; +} + +void tst_qqmlqt::hsla() +{ + QQmlComponent component(&engine, testFileUrl("hsla.qml")); + + QString warning1 = component.url().toString() + ":6: Error: Qt.hsla(): Invalid arguments"; + QString warning2 = component.url().toString() + ":7: Error: Qt.hsla(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromHslF(1, 0, 0, 0.8)); + QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromHslF(1, 0.5, 0.3, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor::fromHslF(1, 1, 1, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor::fromHslF(0, 0, 0, 0)); + + delete object; +} + +void tst_qqmlqt::rect() +{ + QQmlComponent component(&engine, testFileUrl("rect.qml")); + + QString warning1 = component.url().toString() + ":6: Error: Qt.rect(): Invalid arguments"; + QString warning2 = component.url().toString() + ":7: Error: Qt.rect(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QRectF>(object->property("test1")), QRectF(10, 13, 100, 109)); + QCOMPARE(qvariant_cast<QRectF>(object->property("test2")), QRectF(-10, 13, 100, 109.6)); + QCOMPARE(qvariant_cast<QRectF>(object->property("test3")), QRectF()); + QCOMPARE(qvariant_cast<QRectF>(object->property("test4")), QRectF()); + QCOMPARE(qvariant_cast<QRectF>(object->property("test5")), QRectF(10, 13, 100, -109)); + + delete object; +} + +void tst_qqmlqt::point() +{ + QQmlComponent component(&engine, testFileUrl("point.qml")); + + QString warning1 = component.url().toString() + ":6: Error: Qt.point(): Invalid arguments"; + QString warning2 = component.url().toString() + ":7: Error: Qt.point(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QPointF>(object->property("test1")), QPointF(19, 34)); + QCOMPARE(qvariant_cast<QPointF>(object->property("test2")), QPointF(-3, 109.2)); + QCOMPARE(qvariant_cast<QPointF>(object->property("test3")), QPointF()); + QCOMPARE(qvariant_cast<QPointF>(object->property("test4")), QPointF()); + + delete object; +} + +void tst_qqmlqt::size() +{ + QQmlComponent component(&engine, testFileUrl("size.qml")); + + QString warning1 = component.url().toString() + ":7: Error: Qt.size(): Invalid arguments"; + QString warning2 = component.url().toString() + ":8: Error: Qt.size(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QSizeF>(object->property("test1")), QSizeF(19, 34)); + QCOMPARE(qvariant_cast<QSizeF>(object->property("test2")), QSizeF(3, 109.2)); + QCOMPARE(qvariant_cast<QSizeF>(object->property("test3")), QSizeF(-3, 10)); + QCOMPARE(qvariant_cast<QSizeF>(object->property("test4")), QSizeF()); + QCOMPARE(qvariant_cast<QSizeF>(object->property("test5")), QSizeF()); + + delete object; +} + +void tst_qqmlqt::vector() +{ + QQmlComponent component(&engine, testFileUrl("vector.qml")); + + QString warning1 = component.url().toString() + ":6: Error: Qt.vector(): Invalid arguments"; + QString warning2 = component.url().toString() + ":7: Error: Qt.vector(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QVector3D>(object->property("test1")), QVector3D(1, 0, 0.9)); + QCOMPARE(qvariant_cast<QVector3D>(object->property("test2")), QVector3D(102, -10, -982.1)); + QCOMPARE(qvariant_cast<QVector3D>(object->property("test3")), QVector3D()); + QCOMPARE(qvariant_cast<QVector3D>(object->property("test4")), QVector3D()); + + delete object; +} + +void tst_qqmlqt::vector4d() +{ + QQmlComponent component(&engine, testFileUrl("vector4.qml")); + + QString warning1 = component.url().toString() + ":6: Error: Qt.vector4d(): Invalid arguments"; + QString warning2 = component.url().toString() + ":7: Error: Qt.vector4d(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QVector4D>(object->property("test1")), QVector4D(1, 0, 0.9, 0.6)); + QCOMPARE(qvariant_cast<QVector4D>(object->property("test2")), QVector4D(102, -10, -982.1, 10)); + QCOMPARE(qvariant_cast<QVector4D>(object->property("test3")), QVector4D()); + QCOMPARE(qvariant_cast<QVector4D>(object->property("test4")), QVector4D()); + + delete object; +} + +void tst_qqmlqt::lighter() +{ + QQmlComponent component(&engine, testFileUrl("lighter.qml")); + + QString warning1 = component.url().toString() + ":5: Error: Qt.lighter(): Invalid arguments"; + QString warning2 = component.url().toString() + ":10: Error: Qt.lighter(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(1, 0.8, 0.3).lighter()); + QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor::fromRgbF(1, 0.8, 0.3).lighter(180)); + QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor("red").lighter()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor()); + + delete object; +} + +void tst_qqmlqt::darker() +{ + QQmlComponent component(&engine, testFileUrl("darker.qml")); + + QString warning1 = component.url().toString() + ":5: Error: Qt.darker(): Invalid arguments"; + QString warning2 = component.url().toString() + ":10: Error: Qt.darker(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(1, 0.8, 0.3).darker()); + QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor::fromRgbF(1, 0.8, 0.3).darker(280)); + QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor("red").darker()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor()); + + delete object; +} + +void tst_qqmlqt::tint() +{ + QQmlComponent component(&engine, testFileUrl("tint.qml")); + + QString warning1 = component.url().toString() + ":7: Error: Qt.tint(): Invalid arguments"; + QString warning2 = component.url().toString() + ":8: Error: Qt.tint(): Invalid arguments"; + + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<QColor>(object->property("test1")), QColor::fromRgbF(0, 0, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromRgbF(1, 0, 0)); + QColor test3 = qvariant_cast<QColor>(object->property("test3")); + QCOMPARE(test3.rgba(), 0xFF7F0080); + QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor()); + + delete object; +} + +class MyUrlHandler : public QObject +{ + Q_OBJECT +public: + MyUrlHandler() : called(0) { } + int called; + QUrl last; + +public slots: + void noteCall(const QUrl &url) { called++; last = url; } +}; + +void tst_qqmlqt::openUrlExternally() +{ + MyUrlHandler handler; + + QDesktopServices::setUrlHandler("test", &handler, "noteCall"); + QDesktopServices::setUrlHandler("file", &handler, "noteCall"); + + QQmlComponent component(&engine, testFileUrl("openUrlExternally.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(handler.called,1); + QCOMPARE(handler.last, QUrl("test:url")); + + object->setProperty("testFile", true); + + QCOMPARE(handler.called,2); + QCOMPARE(handler.last, testFileUrl("test.html")); + + QDesktopServices::unsetUrlHandler("test"); + QDesktopServices::unsetUrlHandler("file"); +} + +void tst_qqmlqt::openUrlExternally_pragmaLibrary() +{ + MyUrlHandler handler; + + QDesktopServices::setUrlHandler("test", &handler, "noteCall"); + QDesktopServices::setUrlHandler("file", &handler, "noteCall"); + + QQmlComponent component(&engine, testFileUrl("openUrlExternally_lib.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(handler.called,1); + QCOMPARE(handler.last, QUrl("test:url")); + + object->setProperty("testFile", true); + + QCOMPARE(handler.called,2); + QCOMPARE(handler.last, testFileUrl("test.html")); + + QDesktopServices::unsetUrlHandler("test"); + QDesktopServices::unsetUrlHandler("file"); +} + +void tst_qqmlqt::md5() +{ + QQmlComponent component(&engine, testFileUrl("md5.qml")); + + QString warning1 = component.url().toString() + ":4: Error: Qt.md5(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test2").toString(), QLatin1String(QCryptographicHash::hash("Hello World", QCryptographicHash::Md5).toHex())); + + delete object; +} + +void tst_qqmlqt::createComponent() +{ + QQmlComponent component(&engine, testFileUrl("createComponent.qml")); + + QString warning1 = component.url().toString() + ":9: Error: Qt.createComponent(): Invalid arguments"; + QString warning2 = component.url().toString() + ":10: Error: Qt.createComponent(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("absoluteUrl").toString(), QString("http://www.example.com/test.qml")); + QCOMPARE(object->property("relativeUrl").toString(), testFileUrl("createComponentData.qml").toString()); + + delete object; +} + +void tst_qqmlqt::createComponent_pragmaLibrary() +{ + // Currently, just loading createComponent_lib.qml causes crash on some platforms + QQmlComponent component(&engine, testFileUrl("createComponent_lib.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(object->property("status").toInt(), int(QQmlComponent::Ready)); + QCOMPARE(object->property("readValue").toInt(), int(1913)); + delete object; +} + +void tst_qqmlqt::createQmlObject() +{ + QQmlComponent component(&engine, testFileUrl("createQmlObject.qml")); + + QString warning1 = component.url().toString() + ":7: Error: Qt.createQmlObject(): Invalid arguments"; + QString warning2 = component.url().toString()+ ":10: Error: Qt.createQmlObject(): failed to create object: \n " + testFileUrl("inline").toString() + ":2:10: Blah is not a type"; + QString warning3 = component.url().toString()+ ":11: Error: Qt.createQmlObject(): failed to create object: \n " + testFileUrl("main.qml").toString() + ":4:14: Duplicate property name"; + QString warning4 = component.url().toString()+ ":9: Error: Qt.createQmlObject(): Missing parent object"; + QString warning5 = component.url().toString()+ ":8: Error: Qt.createQmlObject(): Invalid arguments"; + QString warning6 = "RunTimeError: Qt.createQmlObject(): failed to create object: \n " + testFileUrl("inline").toString() + ":3: Cannot assign object type QObject with no default method"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning5)); + QTest::ignoreMessage(QtDebugMsg, qPrintable(warning6)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("emptyArg").toBool(), true); + QCOMPARE(object->property("success").toBool(), true); + + QQuickItem *item = qobject_cast<QQuickItem *>(object); + QVERIFY(item != 0); + QVERIFY(item->childItems().count() == 1); + + delete object; +} + + +void tst_qqmlqt::dateTimeConversion() +{ + QDate date(2008,12,24); + QTime time(14,15,38,200); + QDateTime dateTime(date, time); + //Note that when converting Date to QDateTime they can argue over historical DST data when converting to local time. + //Tests should use UTC or recent dates. + QDateTime dateTime2(QDate(2852,12,31), QTime(23,59,59,500)); + QDateTime dateTime3(QDate(2000,1,1), QTime(0,0,0,0)); + QDateTime dateTime4(QDate(2001,2,2), QTime(0,0,0,0)); + QDateTime dateTime5(QDate(1999,1,1), QTime(2,3,4,0)); + QDateTime dateTime6(QDate(2008,2,24), QTime(14,15,38,200)); + + QQmlEngine eng; + QQmlComponent component(&eng, testFileUrl("dateTimeConversion.qml")); + QObject *obj = component.create(); + + QCOMPARE(obj->property("qdate").toDate(), date); + QCOMPARE(obj->property("qtime").toTime(), time); + QCOMPARE(obj->property("qdatetime").toDateTime(), dateTime); + QCOMPARE(obj->property("qdatetime2").toDateTime(), dateTime2); + QCOMPARE(obj->property("qdatetime3").toDateTime(), dateTime3); + QCOMPARE(obj->property("qdatetime4").toDateTime(), dateTime4); + QCOMPARE(obj->property("qdatetime5").toDateTime(), dateTime5); + QCOMPARE(obj->property("qdatetime6").toDateTime(), dateTime6); +} + +void tst_qqmlqt::dateTimeFormatting() +{ + QFETCH(QString, method); + QFETCH(QStringList, inputProperties); + QFETCH(QStringList, expectedResults); + + QDate date(2008,12,24); + QTime time(14,15,38,200); + QDateTime dateTime(date, time); + + QQmlEngine eng; + + eng.rootContext()->setContextProperty("qdate", date); + eng.rootContext()->setContextProperty("qtime", time); + eng.rootContext()->setContextProperty("qdatetime", dateTime); + + QQmlComponent component(&eng, testFileUrl("formatting.qml")); + + QStringList warnings; + warnings << component.url().toString() + ":37: Error: Qt.formatDate(): Invalid date format" + << component.url().toString() + ":36: Error: Qt.formatDate(): Invalid arguments" + << component.url().toString() + ":40: Error: Qt.formatTime(): Invalid time format" + << component.url().toString() + ":39: Error: Qt.formatTime(): Invalid arguments" + << component.url().toString() + ":43: Error: Qt.formatDateTime(): Invalid datetime format" + << component.url().toString() + ":42: Error: Qt.formatDateTime(): Invalid arguments"; + + foreach (const QString &warning, warnings) + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); + + QObject *object = component.create(); + QVERIFY2(component.errorString().isEmpty(), qPrintable(component.errorString())); + QVERIFY(object != 0); + + QVERIFY(inputProperties.count() > 0); + QVariant result; + foreach(const QString &prop, inputProperties) { + QVERIFY(QMetaObject::invokeMethod(object, method.toUtf8().constData(), + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, prop))); + QStringList output = result.toStringList(); + QCOMPARE(output.size(), expectedResults.size()); + for (int i=0; i<output.count(); i++) + QCOMPARE(output[i], expectedResults[i]); + } + + delete object; +} + +void tst_qqmlqt::dateTimeFormatting_data() +{ + QTest::addColumn<QString>("method"); + QTest::addColumn<QStringList>("inputProperties"); + QTest::addColumn<QStringList>("expectedResults"); + + QDate date(2008,12,24); + QTime time(14,15,38,200); + QDateTime dateTime(date, time); + + QTest::newRow("formatDate") + << "formatDate" + << (QStringList() << "dateFromString" << "jsdate" << "qdate" << "qdatetime") + << (QStringList() << date.toString(Qt::DefaultLocaleShortDate) + << date.toString(Qt::DefaultLocaleLongDate) + << date.toString("ddd MMMM d yy")); + + QTest::newRow("formatTime") + << "formatTime" + << (QStringList() << "jsdate" << "qtime" << "qdatetime") + << (QStringList() << time.toString(Qt::DefaultLocaleShortDate) + << time.toString(Qt::DefaultLocaleLongDate) + << time.toString("H:m:s a") + << time.toString("hh:mm:ss.zzz")); + + QTest::newRow("formatDateTime") + << "formatDateTime" + << (QStringList() << "jsdate" << "qdatetime") + << (QStringList() << dateTime.toString(Qt::DefaultLocaleShortDate) + << dateTime.toString(Qt::DefaultLocaleLongDate) + << dateTime.toString("M/d/yy H:m:s a")); +} + +void tst_qqmlqt::dateTimeFormattingVariants() +{ + QFETCH(QString, method); + QFETCH(QVariant, variant); + QFETCH(QStringList, expectedResults); + + QQmlEngine eng; + eng.rootContext()->setContextProperty("qvariant", variant); + QQmlComponent component(&eng, testFileUrl("formatting.qml")); + + QStringList warnings; + warnings << component.url().toString() + ":37: Error: Qt.formatDate(): Invalid date format" + << component.url().toString() + ":36: Error: Qt.formatDate(): Invalid arguments" + << component.url().toString() + ":40: Error: Qt.formatTime(): Invalid time format" + << component.url().toString() + ":39: Error: Qt.formatTime(): Invalid arguments" + << component.url().toString() + ":43: Error: Qt.formatDateTime(): Invalid datetime format" + << component.url().toString() + ":42: Error: Qt.formatDateTime(): Invalid arguments"; + + foreach (const QString &warning, warnings) + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); + + QObject *object = component.create(); + QVERIFY2(component.errorString().isEmpty(), qPrintable(component.errorString())); + QVERIFY(object != 0); + + QVariant result; + QVERIFY(QMetaObject::invokeMethod(object, method.toUtf8().constData(), + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QString(QLatin1String("qvariant"))))); + QStringList output = result.toStringList(); + QCOMPARE(output, expectedResults); + + delete object; +} + +void tst_qqmlqt::dateTimeFormattingVariants_data() +{ + QTest::addColumn<QString>("method"); + QTest::addColumn<QVariant>("variant"); + QTest::addColumn<QStringList>("expectedResults"); + + QDateTime temporary; + + QTime time(11, 16, 39, 755); + temporary = QDateTime(QDate(1970,1,1), time); + QTest::newRow("formatDate, qtime") << "formatDate" << QVariant::fromValue(time) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy")); + QTest::newRow("formatDateTime, qtime") << "formatDateTime" << QVariant::fromValue(time) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a")); + QTest::newRow("formatTime, qtime") << "formatTime" << QVariant::fromValue(time) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz")); + + QDate date(2011,5,31); + temporary = QDateTime(date); + QTest::newRow("formatDate, qdate") << "formatDate" << QVariant::fromValue(date) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy")); + QTest::newRow("formatDateTime, qdate") << "formatDateTime" << QVariant::fromValue(date) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a")); + QTest::newRow("formatTime, qdate") << "formatTime" << QVariant::fromValue(date) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz")); + + QDateTime dateTime(date, time); + temporary = dateTime; + QTest::newRow("formatDate, qdatetime") << "formatDate" << QVariant::fromValue(dateTime) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy")); + QTest::newRow("formatDateTime, qdatetime") << "formatDateTime" << QVariant::fromValue(dateTime) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a")); + QTest::newRow("formatTime, qdatetime") << "formatTime" << QVariant::fromValue(dateTime) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz")); + + QString string(QLatin1String("2011/05/31 11:16:39.755")); + temporary = QDateTime::fromString(string, "yyyy/MM/dd HH:mm:ss.zzz"); + QTest::newRow("formatDate, qstring") << "formatDate" << QVariant::fromValue(string) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy")); + QTest::newRow("formatDateTime, qstring") << "formatDateTime" << QVariant::fromValue(string) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a")); + QTest::newRow("formatTime, qstring") << "formatTime" << QVariant::fromValue(string) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz")); + + QColor color(Qt::red); + temporary = QVariant::fromValue(color).toDateTime(); + QTest::newRow("formatDate, qcolor") << "formatDate" << QVariant::fromValue(color) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy")); + QTest::newRow("formatDateTime, qcolor") << "formatDateTime" << QVariant::fromValue(color) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a")); + QTest::newRow("formatTime, qcolor") << "formatTime" << QVariant::fromValue(color) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz")); + + int integer(4); + temporary = QVariant::fromValue(integer).toDateTime(); + QTest::newRow("formatDate, int") << "formatDate" << QVariant::fromValue(integer) << (QStringList() << temporary.date().toString(Qt::DefaultLocaleShortDate) << temporary.date().toString(Qt::DefaultLocaleLongDate) << temporary.date().toString("ddd MMMM d yy")); + QTest::newRow("formatDateTime, int") << "formatDateTime" << QVariant::fromValue(integer) << (QStringList() << temporary.toString(Qt::DefaultLocaleShortDate) << temporary.toString(Qt::DefaultLocaleLongDate) << temporary.toString("M/d/yy H:m:s a")); + QTest::newRow("formatTime, int") << "formatTime" << QVariant::fromValue(integer) << (QStringList() << temporary.time().toString(Qt::DefaultLocaleShortDate) << temporary.time().toString(Qt::DefaultLocaleLongDate) << temporary.time().toString("H:m:s a") << temporary.time().toString("hh:mm:ss.zzz")); +} + +void tst_qqmlqt::isQtObject() +{ + QQmlComponent component(&engine, testFileUrl("isQtObject.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test1").toBool(), true); + QCOMPARE(object->property("test2").toBool(), false); + QCOMPARE(object->property("test3").toBool(), false); + QCOMPARE(object->property("test4").toBool(), false); + QCOMPARE(object->property("test5").toBool(), false); + + delete object; +} + +void tst_qqmlqt::btoa() +{ + QQmlComponent component(&engine, testFileUrl("btoa.qml")); + + QString warning1 = component.url().toString() + ":4: Error: Qt.btoa(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test2").toString(), QString("SGVsbG8gd29ybGQh")); + + delete object; +} + +void tst_qqmlqt::atob() +{ + QQmlComponent component(&engine, testFileUrl("atob.qml")); + + QString warning1 = component.url().toString() + ":4: Error: Qt.atob(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("test2").toString(), QString("Hello world!")); + + delete object; +} + +void tst_qqmlqt::fontFamilies() +{ + QQmlComponent component(&engine, testFileUrl("fontFamilies.qml")); + + QString warning1 = component.url().toString() + ":4: Error: Qt.fontFamilies(): Invalid arguments"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QFontDatabase database; + QCOMPARE(object->property("test2"), QVariant::fromValue(database.families())); + + delete object; +} + +void tst_qqmlqt::quit() +{ + QQmlComponent component(&engine, testFileUrl("quit.qml")); + + QSignalSpy spy(&engine, SIGNAL(quit())); + QObject *object = component.create(); + QVERIFY(object != 0); + QCOMPARE(spy.count(), 1); + + delete object; +} + +void tst_qqmlqt::resolvedUrl() +{ + QQmlComponent component(&engine, testFileUrl("resolvedUrl.qml")); + + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(object->property("result").toString(), component.url().toString()); + QCOMPARE(object->property("isString").toBool(), true); + + delete object; +} + +QTEST_MAIN(tst_qqmlqt) + +#include "tst_qqmlqt.moc" |