aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml/qv4urlobject
diff options
context:
space:
mode:
authorOlivier De Cannière <olivier.decanniere@qt.io>2023-02-08 11:17:58 +0100
committerOlivier De Cannière <olivier.decanniere@qt.io>2023-02-09 13:02:01 +0100
commit6cca731f3e1304ce98f1ec18af42e3bd06001eea (patch)
tree89eb1a5a9f6bc4c8183602632a7e7e2a08d0902d /tests/auto/qml/qv4urlobject
parentd2c8fe712a87a247864decd9d13167f847035aab (diff)
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 <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/qml/qv4urlobject')
-rw-r--r--tests/auto/qml/qv4urlobject/tst_qv4urlobject.cpp86
1 files changed, 86 insertions, 0 deletions
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<QString>("test");
+ QTest::addColumn<QString>("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<QString>("test");
+ QTest::addColumn<QString>("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"