From 2a0fb1dcbc199cf946fe4db1f2dbc88b1b09c435 Mon Sep 17 00:00:00 2001 From: Nicholas Paun Date: Fri, 31 Jan 2025 14:59:59 -0800 Subject: [PATCH] Add remaining Web Platform Tests for url_search_params::sort --- tests/url_search_params.cpp | 162 ++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) diff --git a/tests/url_search_params.cpp b/tests/url_search_params.cpp index a9002abcc..c2911e788 100644 --- a/tests/url_search_params.cpp +++ b/tests/url_search_params.cpp @@ -123,6 +123,168 @@ TEST(url_search_params, sort) { SUCCEED(); } +// Taken from +// https://github.com/web-platform-tests/wpt/blob/master/url/urlsearchparams-sort.any.js#L3-L4 +TEST(url_search_params, sort_repeated_keys) { + ada::url_search_params search_params("z=b&a=b&z=a&a=a"); + ASSERT_EQ(search_params.size(), 4); + search_params.sort(); + + auto entries = search_params.get_entries(); + auto next = entries.next(); + ASSERT_EQ(next->first, "a"); + ASSERT_EQ(next->second, "b"); + + next = entries.next(); + ASSERT_EQ(next->first, "a"); + ASSERT_EQ(next->second, "a"); + + next = entries.next(); + ASSERT_EQ(next->first, "z"); + ASSERT_EQ(next->second, "b"); + + next = entries.next(); + ASSERT_EQ(next->first, "z"); + ASSERT_EQ(next->second, "a"); + + SUCCEED(); +} + +// Taken from +// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L7-L8 +TEST(url_search_params, sort_unicode_replacement_chars) { + ada::url_search_params search_params( + "\xef\xbf\xbd=x&\xef\xbf\xbc&\xef\xbf\xbd=a"); + ASSERT_EQ(search_params.size(), 3); + search_params.sort(); + + auto entries = search_params.get_entries(); + auto next = entries.next(); + ASSERT_EQ(next->first, "\xef\xbf\xbc"); + ASSERT_EQ(next->second, ""); + + next = entries.next(); + ASSERT_EQ(next->first, "\xef\xbf\xbd"); + ASSERT_EQ(next->second, "x"); + + next = entries.next(); + ASSERT_EQ(next->first, "\xef\xbf\xbd"); + ASSERT_EQ(next->second, "a"); + + SUCCEED(); +} + +// Taken from +// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L15-L16 +TEST(url_search_params, sort_unicode_combining_chars) { + ada::url_search_params search_params("\xc3\xa9&e\xef\xbf\xbd&e\xcc\x81"); + ASSERT_EQ(search_params.size(), 3); + search_params.sort(); + + auto keys = search_params.get_keys(); + ASSERT_EQ(keys.next(), "e\xcc\x81"); + ASSERT_EQ(keys.next(), "e\xef\xbf\xbd"); + ASSERT_EQ(keys.next(), "\xc3\xa9"); + + SUCCEED(); +} + +// Taken from +// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L19-L20 +TEST(url_search_params, sort_many_params) { + ada::url_search_params search_params( + "z=z&a=a&z=y&a=b&z=x&a=c&z=w&a=d&z=v&a=e&z=u&a=f&z=t&a=g"); + ASSERT_EQ(search_params.size(), 14); + search_params.sort(); + + std::deque> expected = { + {"a", "a"}, {"a", "b"}, {"a", "c"}, {"a", "d"}, {"a", "e"}, + {"a", "f"}, {"a", "g"}, {"z", "z"}, {"z", "y"}, {"z", "x"}, + {"z", "w"}, {"z", "v"}, {"z", "u"}, {"z", "t"}}; + + for (auto& entry : search_params) { + auto check = expected.front(); + expected.pop_front(); + ASSERT_EQ(check.first, entry.first); + ASSERT_EQ(check.second, entry.second); + } + ASSERT_EQ(expected.size(), 0); + + SUCCEED(); +} + +// Taken from +// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L23-L24 +TEST(url_search_params, sort_empty_values) { + ada::url_search_params search_params("bbb&bb&aaa&aa=x&aa=y"); + ASSERT_EQ(search_params.size(), 5); + search_params.sort(); + + auto entries = search_params.get_entries(); + auto next = entries.next(); + ASSERT_EQ(next->first, "aa"); + ASSERT_EQ(next->second, "x"); + + next = entries.next(); + ASSERT_EQ(next->first, "aa"); + ASSERT_EQ(next->second, "y"); + + next = entries.next(); + ASSERT_EQ(next->first, "aaa"); + ASSERT_EQ(next->second, ""); + + next = entries.next(); + ASSERT_EQ(next->first, "bb"); + ASSERT_EQ(next->second, ""); + + next = entries.next(); + ASSERT_EQ(next->first, "bbb"); + ASSERT_EQ(next->second, ""); + + SUCCEED(); +} + +// Taken from +// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L27-L28 +TEST(url_search_params, sort_empty_keys) { + ada::url_search_params search_params("z=z&=f&=t&=x"); + ASSERT_EQ(search_params.size(), 4); + search_params.sort(); + + auto entries = search_params.get_entries(); + auto next = entries.next(); + ASSERT_EQ(next->first, ""); + ASSERT_EQ(next->second, "f"); + + next = entries.next(); + ASSERT_EQ(next->first, ""); + ASSERT_EQ(next->second, "t"); + + next = entries.next(); + ASSERT_EQ(next->first, ""); + ASSERT_EQ(next->second, "x"); + + next = entries.next(); + ASSERT_EQ(next->first, "z"); + ASSERT_EQ(next->second, "z"); + + SUCCEED(); +} + +// Taken from +// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L31-L32 +TEST(url_search_params, sort_unicode_emoji) { + ada::url_search_params search_params("a\xf0\x9f\x8c\x88&a\xf0\x9f\x92\xa9"); + ASSERT_EQ(search_params.size(), 2); + search_params.sort(); + + auto keys = search_params.get_keys(); + ASSERT_EQ(keys.next(), "a\xf0\x9f\x8c\x88"); + ASSERT_EQ(keys.next(), "a\xf0\x9f\x92\xa9"); + + SUCCEED(); +} + TEST(url_search_params, string_constructor) { auto p = ada::url_search_params("?a=b"); ASSERT_EQ(p.to_string(), "a=b");