From 6cca731f3e1304ce98f1ec18af42e3bd06001eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20De=20Canni=C3=A8re?= Date: Wed, 8 Feb 2023 11:17:58 +0100 Subject: UrlObject: Properly encode the url search components The href() and search() functions now return properly encoded search components. Tests were added to tst_urlobject.cpp to verify this. Pick-to: 6.5 Fixes: QTBUG-110454 Change-Id: I3d6485eeeedbd5ba5423cdd42d9c17669ca4bd62 Reviewed-by: Fabian Kosmale --- tests/auto/qml/qv4urlobject/tst_qv4urlobject.cpp | 86 ++++++++++++++++++++++++ 1 file changed, 86 insertions(+) (limited to 'tests/auto/qml/qv4urlobject') diff --git a/tests/auto/qml/qv4urlobject/tst_qv4urlobject.cpp b/tests/auto/qml/qv4urlobject/tst_qv4urlobject.cpp index 99a5803586..886bfda018 100644 --- a/tests/auto/qml/qv4urlobject/tst_qv4urlobject.cpp +++ b/tests/auto/qml/qv4urlobject/tst_qv4urlobject.cpp @@ -11,6 +11,10 @@ class tst_urlobject : public QObject private slots: void searchParams_set(); void searchParams_nullUrlPointer(); + void urlObject_search(); + void urlObject_search_data(); + void urlObject_href(); + void urlObject_href_data(); }; void tst_urlobject::searchParams_set() @@ -53,6 +57,88 @@ void tst_urlobject::searchParams_nullUrlPointer() QVERIFY(!result.isError()); } +void tst_urlobject::urlObject_search() +{ + QFETCH(QString, test); + QFETCH(QString, expected); + + QJSEngine engine; + + QCOMPARE(engine.evaluate(test).toString(), expected); +} + +void tst_urlobject::urlObject_search_data() +{ + QTest::addColumn("test"); + QTest::addColumn("expected"); + + QTest::newRow("base case") + << "var url = new URL(\"http://www.google.com/search?q=123\");" + "url.search" + << "?q=123"; + QTest::newRow("space") + << "var url = new URL(\"http://www.google.com/search?a=b ~\");" + "url.search" + << "?a=b%20~"; + QTest::newRow("empty search") + << "var url = new URL(\"http://www.google.com/search?\");" + "url.search" + << ""; + QTest::newRow("no search") + << "var url = new URL(\"http://www.google.com/search\");" + "url.search" + << ""; + QTest::newRow("Question mark") + << "var url = new URL(\"http://www.google.com/search??=?\");" + "url.search" + << "??=?"; + QTest::newRow("equal sign") + << "var url = new URL(\"http://www.google.com/search?a==&b=!\");" + "url.search" + << "?a==&b=!"; + QTest::newRow("percent sign") + << "var url = new URL(\"http://www.google.com/search?a=%20\");" + "url.search" + << "?a=%20"; + QTest::newRow("multiple key-value pairs") + << "var url = new URL(\"http://www.google.com/search?a=b&c=d\");" + "url.search" + << "?a=b&c=d"; + QTest::newRow("unreserved") + << "var url = new URL(\"http://www.google.com/search?a=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~\");" + "url.search" + << "?a=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.~"; + QTest::newRow("reserved + illegal") + << "var url = new URL(\"http://google.com/search/?a=!*();:@&=+$,/?#[]\");" + "url.search" + << "?a=!*();:@&=+$,/?"; + QTest::newRow("unicode (U+327D)") + << "var url = new URL(\"http://google.com/search/?a=㉽\");" + "url.search" + << "?a=%E3%89%BD"; +} + +void tst_urlobject::urlObject_href() +{ + QFETCH(QString, test); + QFETCH(QString, expected); + + QJSEngine engine; + + QCOMPARE(engine.evaluate(test).toString(), expected); +} + +void tst_urlobject::urlObject_href_data() +{ + QTest::addColumn("test"); + QTest::addColumn("expected"); + + QTest::newRow("QTBUG-110454") + << "var url = new URL(\"https://example.com/?a=b ~\");" + "url.href" + << "https://example.com/?a=b%20~"; +} + QTEST_MAIN(tst_urlobject) #include "tst_qv4urlobject.moc" -- cgit v1.2.3