diff options
-rw-r--r-- | src/corelib/serialization/qcborvalue_p.h | 4 | ||||
-rw-r--r-- | tests/auto/corelib/serialization/json/tst_qtjson.cpp | 17 | ||||
-rw-r--r-- | tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp | 42 |
3 files changed, 61 insertions, 2 deletions
diff --git a/src/corelib/serialization/qcborvalue_p.h b/src/corelib/serialization/qcborvalue_p.h index 33eb912a6d9..8cb192eee0d 100644 --- a/src/corelib/serialization/qcborvalue_p.h +++ b/src/corelib/serialization/qcborvalue_p.h @@ -362,8 +362,8 @@ public: if (e.flags & QtCbor::Element::StringIsUtf16) { if (mode == QtCbor::Comparison::ForEquality) - return QtPrivate::equalStrings(b->asStringView(), s) ? 0 : 1; - return QtPrivate::compareStrings(b->asStringView(), s); + return b->asStringView() == s ? 0 : 1; + return b->asStringView().compare(s); } return compareUtf8(b, s); } diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp index e6c8f90e8f9..96060bbd132 100644 --- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp +++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp @@ -41,6 +41,7 @@ private Q_SLOTS: void testObjectTakeDetach(); void testObjectSmallKeys(); void testObjectInsertCopies(); + void testObjectInsertNonAscii(); void testArraySimple(); void testArrayInsertCopies(); void testValueObject(); @@ -714,6 +715,22 @@ void tst_QtJson::testObjectInsertCopies() } } +void tst_QtJson::testObjectInsertNonAscii() +{ + { + QJsonObject myObject; + myObject.insert("k♭", "First key"); + myObject.insert("a", "Second key"); + QCOMPARE(myObject.begin().key(), "a"); + } + { + QJsonObject myObject; + myObject.insert("a", "Second key"); + myObject.insert("k♭", "First key"); + QCOMPARE(myObject.begin().key(), "a"); + } +} + void tst_QtJson::testArraySimple() { QJsonArray array; diff --git a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp index 55ef4700950..1bd786ca04d 100644 --- a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp +++ b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp @@ -74,6 +74,7 @@ private slots: void mapMutateWithCopies(); void mapStringValues(); void mapStringKeys(); + void mapStringKeysNonAscii(); void mapValueRef_data() { basics_data(); } void mapValueRef(); void mapInsertRemove_data() { basics_data(); } @@ -1529,6 +1530,47 @@ void tst_QCborValue::mapStringKeys() QVERIFY(m2.value(QCborValue(QByteArray("foo"))).isUndefined()); QVERIFY(m.value(QCborValue(QLatin1String("foo"))).isUndefined()); QCOMPARE(m.value(QCborValue(QByteArray("foo"))).toString(), "bar"); + + m.insert(u"World"_s, QCborValue(3)); // replaces + QCOMPARE(m.size(), 3); + QCOMPARE(m.value(u"World"_s), QCborValue(3)); + QCOMPARE(m.value("World"_L1), QCborValue(3)); + + m.insert(u"Hello"_s, QCborValue(4)); // replaces (must match Latin1) + QCOMPARE(m.size(), 3); + QCOMPARE(m.value(u"Hello"_s), QCborValue(4)); + QCOMPARE(m.value("Hello"_L1), QCborValue(4)); +} + +void tst_QCborValue::mapStringKeysNonAscii() +{ + { + QCborMap m; + m["a"_L1] = 1; // US-ASCII: 1 UTF-8 & UTF-16 code unit + m["\xE9"_L1] = 2; // Latin-1: 2 UTF-8 code units, 1 UTF-16 + m[u"ü"_s] = 3; // ditto, but inserted as UTF-16 + m[u"♭"_s] = 4; // BMP over U+07FF: 3 UTF-8 code units, 1 UTF-16 + m[u"\U00010000"_s] = 5; // non-BMP: 4 UTF-8 code units, 2 UTF-16 + + QCOMPARE(m.size(), 5); + QCOMPARE(m.value(u"a"_s), 1); + QCOMPARE(m.value(u"é"_s), 2); + QCOMPARE(m.value("\xFC"_L1), 3); + + QCOMPARE(m.value(u"k♭"_s), QCborValue()); + QCOMPARE(m.value("foo"_L1), QCborValue()); + } + { + QCborMap m; + m[u"k♭"_s] = 1; + m[u"a"_s] = 2; + m[u"\U00010000"_s] = 3; + + QCOMPARE(m.size(), 3); + QCOMPARE(m.value(u"b"_s), QCborValue()); + QCOMPARE(m.value(u"♭"_s), QCborValue()); + QCOMPARE(m.value("foo"_L1), QCborValue()); + } } void tst_QCborValue::mapInsertRemove() |