summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-03-12 16:25:31 +0100
committerFabian Kosmale <fabian.kosmale@qt.io>2020-03-18 09:54:19 +0100
commit6db55e3451e8ba244e9f2555713d44d988977871 (patch)
tree866b5475769d49a9a93cee483fc5ea6e6dfe6b87 /tests/auto/corelib/kernel
parent943cb0999dbbf1da99c1358b81ea3298ee116447 (diff)
QSequentialIterable: Treat sets as appendable
QSet and std::(unordered_)set were so far not treated as appendable, as they lack a push_back method. We do however need support for this in declarative to enable converting back from QJSValue arrays to sets. We achieve this by testing for and using the insert method. While vector has also such a method, it doesn't take a single value, but rather a position or iterator + value, so the template specialization is not ambiguous. Task-number: QTBUG-82743 Change-Id: I74fc7b1b856d9bcd38100b274ba2b69578ea8bbb Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp30
1 files changed, 22 insertions, 8 deletions
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 70bda1a0ef..86c61cba12 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -5161,14 +5161,28 @@ void tst_QVariant::sequentialIterableEndianessSanityCheck()
void tst_QVariant::sequentialIterableAppend()
{
- QVector<int> container {1, 2};
- auto variant = QVariant::fromValue(container);
- QVERIFY(variant.canConvert<QtMetaTypePrivate::QSequentialIterableImpl>());
- auto asIterable = variant.value<QtMetaTypePrivate::QSequentialIterableImpl>();
- const int i = 3, j = 4;
- asIterable.append(&i);
- asIterable.append(&j);
- QCOMPARE(variant.value<QVector<int>>(), QVector<int> ({1, 2, 3, 4}));
+ {
+ QVector<int> container {1, 2};
+ auto variant = QVariant::fromValue(container);
+ QVERIFY(variant.canConvert<QtMetaTypePrivate::QSequentialIterableImpl>());
+ auto asIterable = variant.value<QtMetaTypePrivate::QSequentialIterableImpl>();
+ const int i = 3, j = 4;
+ asIterable.append(&i);
+ asIterable.append(&j);
+ QCOMPARE(variant.value<QVector<int>>(), QVector<int> ({1, 2, 3, 4}));
+ }
+ {
+ QSet<QByteArray> container { QByteArray{"hello"}, QByteArray{"world"} };
+ auto variant = QVariant::fromValue(std::move(container));
+ QVERIFY(variant.canConvert<QtMetaTypePrivate::QSequentialIterableImpl>());
+ auto asIterable = variant.value<QtMetaTypePrivate::QSequentialIterableImpl>();
+ QByteArray qba1 {"goodbye"};
+ QByteArray qba2 { "moon" };
+ asIterable.append( &qba1 );
+ asIterable.append( &qba2);
+ QSet<QByteArray> reference { "hello", "world", "goodbye", "moon" };
+ QCOMPARE(variant.value<QSet<QByteArray>>(), reference);
+ }
}
void tst_QVariant::preferDirectConversionOverInterfaces()