From 830eba61b73852a354954086a67e24cc22393558 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 6 Jan 2021 18:06:13 +0100 Subject: QJSManagedValue: Allow array access to strings If you access a string as an array you get a one-character string of the index you are asking for. Change-Id: Ie2ac3243c9e23f37b8904c54d824946646a596eb Reviewed-by: Fabian Kosmale Reviewed-by: Andrei Golubev --- .../qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp | 25 ++++++++++++++++++++++ .../auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h | 1 + 2 files changed, 26 insertions(+) (limited to 'tests/auto/qml') diff --git a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp index 1846030127..d245a034bb 100644 --- a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp +++ b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.cpp @@ -1760,4 +1760,29 @@ void tst_QJSManagedValue::jsFunctionInVariant() } } +void tst_QJSManagedValue::stringByIndex() +{ + QJSEngine engine; + + const QString testString = QStringLiteral("foobar"); + QJSManagedValue str(testString, &engine); + + for (uint i = 0; i < testString.length(); ++i) { + QVERIFY(str.hasOwnProperty(i)); + QVERIFY(str.hasProperty(i)); + + QVERIFY(str.property(i).strictlyEquals(QJSValue(testString.mid(i, 1)))); + str.setProperty(i, QStringLiteral("u")); // ignored + QCOMPARE(str.toString(), testString); + } + + QVERIFY(!str.hasOwnProperty(6)); + QVERIFY(!str.hasProperty(6)); + QVERIFY(!str.hasOwnProperty(16)); + QVERIFY(!str.hasProperty(26)); + + QVERIFY(str.property(6).isUndefined()); + QVERIFY(str.property(506).isUndefined()); +} + QTEST_MAIN(tst_QJSManagedValue) diff --git a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h index da2a8f76a7..041aae56aa 100644 --- a/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h +++ b/tests/auto/qml/qjsmanagedvalue/tst_qjsmanagedvalue.h @@ -107,6 +107,7 @@ private Q_SLOTS: void stringAndUrl(); void jsFunctionInVariant(); + void stringByIndex(); private: void newEngine() { engine.reset(new QJSEngine()); } -- cgit v1.2.3