aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qqmlvaluetypeproviders
diff options
context:
space:
mode:
authorChris Adams <christopher.adams@nokia.com>2012-07-16 16:32:49 +1000
committerQt by Nokia <qt-info@nokia.com>2012-08-09 07:58:06 +0200
commit42f9444e983b5257241c17242471ca63f208c3f6 (patch)
tree4847ae743a0e05b0ff9d3d4ab6003ea257a6c682 /tests/auto/qml/qqmlvaluetypeproviders
parentf09517bd9c907698a05ee92ccf158a06db3340b8 (diff)
Allow invokable functions of value-type classes to be called
Previously, invokable functions of value-type classes were returned as properties. This commit fixes that bug by allowing such functions to be invoked normally. It also improves copy-value type handling. This commit also ensures that QMatrix4x4 value types are constructed with qreal values as this is the storage type used internally. Change-Id: Iab0fe4c522ed53d60154e8a8d46dda925fb9f4de Reviewed-by: Martin Jones <martin.jones@nokia.com>
Diffstat (limited to 'tests/auto/qml/qqmlvaluetypeproviders')
-rw-r--r--tests/auto/qml/qqmlvaluetypeproviders/data/invokableFunctions.qml52
-rw-r--r--tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp14
2 files changed, 66 insertions, 0 deletions
diff --git a/tests/auto/qml/qqmlvaluetypeproviders/data/invokableFunctions.qml b/tests/auto/qml/qqmlvaluetypeproviders/data/invokableFunctions.qml
new file mode 100644
index 0000000000..85e87e91cf
--- /dev/null
+++ b/tests/auto/qml/qqmlvaluetypeproviders/data/invokableFunctions.qml
@@ -0,0 +1,52 @@
+import QtQuick 2.0
+
+Item {
+ property bool success: false
+ property bool complete: false
+
+ property matrix4x4 m1: Qt.matrix4x4(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4)
+ property matrix4x4 m2: Qt.matrix4x4(5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8)
+ property vector4d v1: Qt.vector4d(1,2,3,4)
+ property vector4d v2: Qt.vector4d(5,6,7,8)
+ property real scalar: 5
+
+ Component.onCompleted: {
+ // test that invokable functions of non-qml module value types work
+ complete = false;
+ success = true;
+ var result;
+
+ result = v1.plus(v2);
+ if (result != Qt.vector4d(6, 8, 10, 12)) success = false;
+
+ result = v1.times(scalar);
+ if (result != Qt.vector4d(5, 10, 15, 20)) success = false;
+
+ result = v1.times(v2);
+ if (result != Qt.vector4d(5, 12, 21, 32)) success = false;
+
+ // ensure that side-effects don't cause overwrite of valuetype-copy values.
+ result = Qt.vector4d(1,2,3,4).times(Qt.vector4d(5,6,7,8), Qt.vector4d(9,9,9,9).toString());
+ if (result != Qt.vector4d(5, 12, 21, 32)) success = false;
+
+ result = v1.times(m2);
+ if (result != Qt.vector4d(70,70,70,70)) success = false;
+
+ result = m1.times(v2);
+ if (result != Qt.vector4d(26, 52, 78, 104)) success = false;
+
+ result = m1.times(m2);
+ if (result != Qt.matrix4x4(26,26,26,26,52,52,52,52,78,78,78,78,104,104,104,104)) success = false;
+
+ result = m1.plus(m2);
+ if (result != Qt.matrix4x4(6,6,6,6,8,8,8,8,10,10,10,10,12,12,12,12)) success = false;
+
+ result = m1.row(2); // zero-based
+ if (result != Qt.vector4d(3, 3, 3, 3)) success = false;
+
+ result = m1.column(2); // zero-based
+ if (result != Qt.vector4d(1, 2, 3, 4)) success = false;
+
+ complete = true;
+ }
+}
diff --git a/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp b/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
index d811767489..20cc93bb7b 100644
--- a/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
+++ b/tests/auto/qml/qqmlvaluetypeproviders/tst_qqmlvaluetypeproviders.cpp
@@ -70,6 +70,7 @@ private slots:
void comparisonSemantics();
void cppIntegration();
void jsObjectConversion();
+ void invokableFunctions();
};
void tst_qqmlvaluetypeproviders::initTestCase()
@@ -168,6 +169,19 @@ void tst_qqmlvaluetypeproviders::jsObjectConversion()
delete object;
}
+void tst_qqmlvaluetypeproviders::invokableFunctions()
+{
+ QQmlEngine e;
+ QQmlComponent component(&e, testFileUrl("invokableFunctions.qml"));
+ QVERIFY(!component.isError());
+ QVERIFY(component.errors().isEmpty());
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QVERIFY(object->property("complete").toBool());
+ QVERIFY(object->property("success").toBool());
+ delete object;
+}
+
QTEST_MAIN(tst_qqmlvaluetypeproviders)
#include "tst_qqmlvaluetypeproviders.moc"