From 8460eae44c241d5975b3041eedf6e08c9638fd41 Mon Sep 17 00:00:00 2001 From: Chris Adams Date: Thu, 15 Dec 2011 12:01:39 +1000 Subject: Correctly resolve elements of QList properties Previously, the value of a QList sequence was only resolved if there was only one element in the sequence. This commit ensures that all elements in the sequence are resolved correctly. Task-number: QTBUG-23131 Change-Id: Id27748853fe01ae22800fbd02d062e268ad7ec70 Reviewed-by: Roberto Raggi --- .../data/assignSequenceTypes.7.qml | 42 ++++++++++++++++++++++ .../tst_qdeclarativeecmascript.cpp | 19 ++++++++++ 2 files changed, 61 insertions(+) create mode 100644 tests/auto/declarative/qdeclarativeecmascript/data/assignSequenceTypes.7.qml (limited to 'tests/auto/declarative') diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/assignSequenceTypes.7.qml b/tests/auto/declarative/qdeclarativeecmascript/data/assignSequenceTypes.7.qml new file mode 100644 index 0000000000..96c0684939 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/assignSequenceTypes.7.qml @@ -0,0 +1,42 @@ +import QtQuick 2.0 +import Qt.test 1.0 + +Item { + // single url assignment to url list property + MySequenceConversionObject { + id: msco1 + objectName: "msco1" + } + + // single url binding to url list property + MySequenceConversionObject { + id: msco2 + objectName: "msco2" + urlListProperty: "example.html" + } + + // multiple url assignment to url list property + MySequenceConversionObject { + id: msco3 + objectName: "msco3" + } + + // multiple url binding to url list property + MySequenceConversionObject { + id: msco4 + objectName: "msco4" + urlListProperty: [ "example.html", "example2.html" ] + } + + // multiple url binding to url list property - already resolved + MySequenceConversionObject { + id: msco5 + objectName: "msco5" + urlListProperty: [ Qt.resolvedUrl("example.html"), Qt.resolvedUrl("example2.html") ] + } + + Component.onCompleted: { + msco1.urlListProperty = "example.html"; + msco3.urlListProperty = [ "example.html", "example2.html" ]; + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 10ae0ccd09..251b89dd87 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -4709,6 +4709,25 @@ void tst_qdeclarativeecmascript::assignSequenceTypes() QCOMPARE(object->urlListProperty(), (QList() << QUrl(TEST_FILE("example.html")))); delete object; } + + // test QList literal assignment and binding assignment causes url resolution when required + { + QDeclarativeComponent component(&engine, TEST_FILE("assignSequenceTypes.7.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + MySequenceConversionObject *msco1 = object->findChild(QLatin1String("msco1")); + MySequenceConversionObject *msco2 = object->findChild(QLatin1String("msco2")); + MySequenceConversionObject *msco3 = object->findChild(QLatin1String("msco3")); + MySequenceConversionObject *msco4 = object->findChild(QLatin1String("msco4")); + MySequenceConversionObject *msco5 = object->findChild(QLatin1String("msco5")); + QVERIFY(msco1 != 0 && msco2 != 0 && msco3 != 0 && msco4 != 0 && msco5 != 0); + QCOMPARE(msco1->urlListProperty(), (QList() << QUrl(TEST_FILE("example.html")))); + QCOMPARE(msco2->urlListProperty(), (QList() << QUrl(TEST_FILE("example.html")))); + QCOMPARE(msco3->urlListProperty(), (QList() << QUrl(TEST_FILE("example.html")) << QUrl(TEST_FILE("example2.html")))); + QCOMPARE(msco4->urlListProperty(), (QList() << QUrl(TEST_FILE("example.html")) << QUrl(TEST_FILE("example2.html")))); + QCOMPARE(msco5->urlListProperty(), (QList() << QUrl(TEST_FILE("example.html")) << QUrl(TEST_FILE("example2.html")))); + delete object; + } } // Test that assigning a null object works -- cgit v1.2.3