Skip to content

Commit

Permalink
Add remaining Web Platform Tests for url_search_params::sort
Browse files Browse the repository at this point in the history
  • Loading branch information
npaun committed Jan 31, 2025
1 parent d44402b commit 2a0fb1d
Showing 1 changed file with 162 additions and 0 deletions.
162 changes: 162 additions & 0 deletions tests/url_search_params.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::pair<std::string, std::string>> 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");
Expand Down

0 comments on commit 2a0fb1d

Please sign in to comment.