diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-01-29 16:41:59 +0100 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2020-01-29 16:52:58 +0100 |
commit | b684ba219493fb7b0108ae367d6d033aaa28053b (patch) | |
tree | f1fec8922da198e231416b50ef8f441ef6db065b /tests/auto/qml/qqmllistreference | |
parent | 97a5cf86345fd72cdff83c03664c19a8f5cdf79a (diff) | |
parent | 8354851b628ebae567a9125cbd0ba69268470c1b (diff) |
Merge remote-tracking branch 'origin/dev' into wip/cmake
Conflicts:
dependencies.yaml
Change-Id: Ie3e9dc62031a85e5e81cbdf04694b95159d49fca
Diffstat (limited to 'tests/auto/qml/qqmllistreference')
-rw-r--r-- | tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp | 211 |
1 files changed, 209 insertions, 2 deletions
diff --git a/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp b/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp index 8efaedf5b5..e25d555d61 100644 --- a/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp +++ b/tests/auto/qml/qqmllistreference/tst_qqmllistreference.cpp @@ -45,6 +45,9 @@ class tst_qqmllistreference : public QQmlDataTest public: tst_qqmllistreference() {} +private: + void modeData(); + private slots: void initTestCase(); void qmllistreference(); @@ -56,12 +59,19 @@ private slots: void canAt(); void canClear(); void canCount(); + void canReplace(); + void canRemoveLast(); void isReadable(); void isManipulable(); void append(); void at(); + void clear_data() { modeData(); } void clear(); void count(); + void replace_data() { modeData(); } + void replace(); + void removeLast_data() { modeData(); } + void removeLast(); void copy(); void qmlmetaproperty(); void engineTypes(); @@ -76,7 +86,67 @@ class TestType : public QObject Q_PROPERTY(int intProperty READ intProperty) public: - TestType() : property(this, data) {} + enum Mode { + SyntheticClear, + SyntheticReplace, + SyntheticClearAndReplace, + SyntheticRemoveLast, + SyntheticRemoveLastAndReplace, + AutomaticReference, + AutomaticPointer + }; + + static void append(QQmlListProperty<TestType> *p, TestType *v) { + reinterpret_cast<QList<TestType *> *>(p->data)->append(v); + } + static int count(QQmlListProperty<TestType> *p) { + return reinterpret_cast<QList<TestType *> *>(p->data)->count(); + } + static TestType *at(QQmlListProperty<TestType> *p, int idx) { + return reinterpret_cast<QList<TestType *> *>(p->data)->at(idx); + } + static void clear(QQmlListProperty<TestType> *p) { + return reinterpret_cast<QList<TestType *> *>(p->data)->clear(); + } + static void replace(QQmlListProperty<TestType> *p, int idx, TestType *v) { + return reinterpret_cast<QList<TestType *> *>(p->data)->replace(idx, v); + } + static void removeLast(QQmlListProperty<TestType> *p) { + return reinterpret_cast<QList<TestType *> *>(p->data)->removeLast(); + } + + TestType(Mode mode = AutomaticReference) + { + switch (mode) { + case SyntheticClear: + property = QQmlListProperty<TestType>(this, &data, append, count, at, nullptr, + replace, removeLast); + break; + case SyntheticReplace: + property = QQmlListProperty<TestType>(this, &data, append, count, at, clear, + nullptr, removeLast); + break; + case SyntheticClearAndReplace: + property = QQmlListProperty<TestType>(this, &data, append, count, at, nullptr, + nullptr, removeLast); + break; + case SyntheticRemoveLast: + property = QQmlListProperty<TestType>(this, &data, append, count, at, clear, + replace, nullptr); + break; + case SyntheticRemoveLastAndReplace: + property = QQmlListProperty<TestType>(this, &data, append, count, at, clear, + nullptr, nullptr); + break; + case AutomaticReference: + property = QQmlListProperty<TestType>(this, data); + break; + case AutomaticPointer: + property = QQmlListProperty<TestType>(this, &data); + break; + } + } + QQmlListProperty<TestType> dataProperty() { return property; } int intProperty() const { return 10; } @@ -84,6 +154,20 @@ public: QQmlListProperty<TestType> property; }; +Q_DECLARE_METATYPE(TestType::Mode) + +void tst_qqmllistreference::modeData() +{ + QTest::addColumn<TestType::Mode>("mode"); + QTest::addRow("AutomaticReference") << TestType::AutomaticReference; + QTest::addRow("AutomaticPointer") << TestType::AutomaticPointer; + QTest::addRow("SyntheticClear") << TestType::SyntheticClear; + QTest::addRow("SyntheticReplace") << TestType::SyntheticReplace; + QTest::addRow("SyntheticClearAndReplace") << TestType::SyntheticClearAndReplace; + QTest::addRow("SyntheticRemoveLast") << TestType::SyntheticRemoveLast; + QTest::addRow("SyntheticRemoveLastAndReplace") << TestType::SyntheticRemoveLastAndReplace; +} + void tst_qqmllistreference::initTestCase() { QQmlDataTest::initTestCase(); @@ -340,6 +424,64 @@ void tst_qqmllistreference::canCount() } } +void tst_qqmllistreference::canReplace() +{ + QScopedPointer<TestType> tt(new TestType); + + { + QQmlListReference ref; + QVERIFY(!ref.canReplace()); + } + + { + QQmlListReference ref(tt.data(), "blah"); + QVERIFY(!ref.canReplace()); + } + + { + QQmlListReference ref(tt.data(), "data"); + QVERIFY(ref.canReplace()); + tt.reset(); + QVERIFY(!ref.canReplace()); + } + + { + TestType tt; + tt.property.replace = nullptr; + QQmlListReference ref(&tt, "data"); + QVERIFY(!ref.canReplace()); + } +} + +void tst_qqmllistreference::canRemoveLast() +{ + QScopedPointer<TestType> tt(new TestType); + + { + QQmlListReference ref; + QVERIFY(!ref.canRemoveLast()); + } + + { + QQmlListReference ref(tt.data(), "blah"); + QVERIFY(!ref.canRemoveLast()); + } + + { + QQmlListReference ref(tt.data(), "data"); + QVERIFY(ref.canRemoveLast()); + tt.reset(); + QVERIFY(!ref.canRemoveLast()); + } + + { + TestType tt; + tt.property.removeLast = nullptr; + QQmlListReference ref(&tt, "data"); + QVERIFY(!ref.canRemoveLast()); + } +} + void tst_qqmllistreference::isReadable() { TestType *tt = new TestType; @@ -474,7 +616,8 @@ void tst_qqmllistreference::at() void tst_qqmllistreference::clear() { - TestType *tt = new TestType; + QFETCH(TestType::Mode, mode); + TestType *tt = new TestType(mode); tt->data.append(tt); tt->data.append(0); tt->data.append(tt); @@ -540,6 +683,70 @@ void tst_qqmllistreference::count() } } +void tst_qqmllistreference::replace() +{ + QFETCH(TestType::Mode, mode); + QScopedPointer<TestType> tt(new TestType(mode)); + tt->data.append(tt.get()); + tt->data.append(nullptr); + tt->data.append(tt.get()); + + { + QQmlListReference ref(tt.get(), "data"); + QVERIFY(ref.replace(1, tt.get())); + QCOMPARE(ref.at(1), tt.get()); + QVERIFY(ref.replace(2, nullptr)); + QCOMPARE(ref.at(2), nullptr); + QCOMPARE(ref.count(), 3); + tt.reset(); + QVERIFY(!ref.replace(0, tt.get())); + } + + { + TestType tt; + tt.data.append(&tt); + tt.property.replace = nullptr; + QQmlListReference ref(&tt, "data"); + QVERIFY(!ref.replace(0, nullptr)); + } +} + +void tst_qqmllistreference::removeLast() +{ + QFETCH(TestType::Mode, mode); + QScopedPointer<TestType> tt(new TestType(mode)); + tt->data.append(tt.get()); + tt->data.append(nullptr); + tt->data.append(tt.get()); + + { + QQmlListReference ref; + QVERIFY(!ref.removeLast()); + } + + { + QQmlListReference ref(tt.get(), "blah"); + QVERIFY(!ref.removeLast()); + } + + { + QQmlListReference ref(tt.get(), "data"); + QCOMPARE(tt->data.count(), 3); + QVERIFY(ref.removeLast()); + QCOMPARE(tt->data.count(), 2); + tt.reset(); + QVERIFY(!ref.removeLast()); + } + + { + TestType tt; + tt.property.removeLast = nullptr; + QQmlListReference ref(&tt, "data"); + ref.append(&tt); + QVERIFY(!ref.removeLast()); + } +} + void tst_qqmllistreference::copy() { TestType tt; |