Skip to content

Commit d80124a

Browse files
authored
Add remaining Web Platform Tests for url_search_params::sort (#864)
1 parent ac78801 commit d80124a

File tree

1 file changed

+168
-1
lines changed

1 file changed

+168
-1
lines changed

tests/url_search_params.cpp

+168-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
#include "ada.h"
22
#include "gtest/gtest.h"
33

4+
#include <deque>
5+
#include <string>
6+
#include <utility> // For std::pair
7+
#include <vector>
8+
49
TEST(url_search_params, append) {
510
auto search_params = ada::url_search_params();
611
search_params.append("key", "value");
@@ -123,6 +128,168 @@ TEST(url_search_params, sort) {
123128
SUCCEED();
124129
}
125130

131+
// Taken from
132+
// https://github.com/web-platform-tests/wpt/blob/master/url/urlsearchparams-sort.any.js#L3-L4
133+
TEST(url_search_params, sort_repeated_keys) {
134+
ada::url_search_params search_params("z=b&a=b&z=a&a=a");
135+
ASSERT_EQ(search_params.size(), 4);
136+
search_params.sort();
137+
138+
auto entries = search_params.get_entries();
139+
auto next = entries.next();
140+
ASSERT_EQ(next->first, "a");
141+
ASSERT_EQ(next->second, "b");
142+
143+
next = entries.next();
144+
ASSERT_EQ(next->first, "a");
145+
ASSERT_EQ(next->second, "a");
146+
147+
next = entries.next();
148+
ASSERT_EQ(next->first, "z");
149+
ASSERT_EQ(next->second, "b");
150+
151+
next = entries.next();
152+
ASSERT_EQ(next->first, "z");
153+
ASSERT_EQ(next->second, "a");
154+
155+
SUCCEED();
156+
}
157+
158+
// Taken from
159+
// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L7-L8
160+
TEST(url_search_params, sort_unicode_replacement_chars) {
161+
ada::url_search_params search_params(
162+
"\xef\xbf\xbd=x&\xef\xbf\xbc&\xef\xbf\xbd=a");
163+
ASSERT_EQ(search_params.size(), 3);
164+
search_params.sort();
165+
166+
auto entries = search_params.get_entries();
167+
auto next = entries.next();
168+
ASSERT_EQ(next->first, "\xef\xbf\xbc");
169+
ASSERT_EQ(next->second, "");
170+
171+
next = entries.next();
172+
ASSERT_EQ(next->first, "\xef\xbf\xbd");
173+
ASSERT_EQ(next->second, "x");
174+
175+
next = entries.next();
176+
ASSERT_EQ(next->first, "\xef\xbf\xbd");
177+
ASSERT_EQ(next->second, "a");
178+
179+
SUCCEED();
180+
}
181+
182+
// Taken from
183+
// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L15-L16
184+
TEST(url_search_params, sort_unicode_combining_chars) {
185+
ada::url_search_params search_params("\xc3\xa9&e\xef\xbf\xbd&e\xcc\x81");
186+
ASSERT_EQ(search_params.size(), 3);
187+
search_params.sort();
188+
189+
auto keys = search_params.get_keys();
190+
ASSERT_EQ(keys.next(), "e\xcc\x81");
191+
ASSERT_EQ(keys.next(), "e\xef\xbf\xbd");
192+
ASSERT_EQ(keys.next(), "\xc3\xa9");
193+
194+
SUCCEED();
195+
}
196+
197+
// Taken from
198+
// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L19-L20
199+
TEST(url_search_params, sort_many_params) {
200+
ada::url_search_params search_params(
201+
"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");
202+
ASSERT_EQ(search_params.size(), 14);
203+
search_params.sort();
204+
205+
std::deque<std::pair<std::string, std::string>> expected = {
206+
{"a", "a"}, {"a", "b"}, {"a", "c"}, {"a", "d"}, {"a", "e"},
207+
{"a", "f"}, {"a", "g"}, {"z", "z"}, {"z", "y"}, {"z", "x"},
208+
{"z", "w"}, {"z", "v"}, {"z", "u"}, {"z", "t"}};
209+
210+
for (auto& entry : search_params) {
211+
auto check = expected.front();
212+
expected.pop_front();
213+
ASSERT_EQ(check.first, entry.first);
214+
ASSERT_EQ(check.second, entry.second);
215+
}
216+
ASSERT_EQ(expected.size(), 0);
217+
218+
SUCCEED();
219+
}
220+
221+
// Taken from
222+
// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L23-L24
223+
TEST(url_search_params, sort_empty_values) {
224+
ada::url_search_params search_params("bbb&bb&aaa&aa=x&aa=y");
225+
ASSERT_EQ(search_params.size(), 5);
226+
search_params.sort();
227+
228+
auto entries = search_params.get_entries();
229+
auto next = entries.next();
230+
ASSERT_EQ(next->first, "aa");
231+
ASSERT_EQ(next->second, "x");
232+
233+
next = entries.next();
234+
ASSERT_EQ(next->first, "aa");
235+
ASSERT_EQ(next->second, "y");
236+
237+
next = entries.next();
238+
ASSERT_EQ(next->first, "aaa");
239+
ASSERT_EQ(next->second, "");
240+
241+
next = entries.next();
242+
ASSERT_EQ(next->first, "bb");
243+
ASSERT_EQ(next->second, "");
244+
245+
next = entries.next();
246+
ASSERT_EQ(next->first, "bbb");
247+
ASSERT_EQ(next->second, "");
248+
249+
SUCCEED();
250+
}
251+
252+
// Taken from
253+
// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L27-L28
254+
TEST(url_search_params, sort_empty_keys) {
255+
ada::url_search_params search_params("z=z&=f&=t&=x");
256+
ASSERT_EQ(search_params.size(), 4);
257+
search_params.sort();
258+
259+
auto entries = search_params.get_entries();
260+
auto next = entries.next();
261+
ASSERT_EQ(next->first, "");
262+
ASSERT_EQ(next->second, "f");
263+
264+
next = entries.next();
265+
ASSERT_EQ(next->first, "");
266+
ASSERT_EQ(next->second, "t");
267+
268+
next = entries.next();
269+
ASSERT_EQ(next->first, "");
270+
ASSERT_EQ(next->second, "x");
271+
272+
next = entries.next();
273+
ASSERT_EQ(next->first, "z");
274+
ASSERT_EQ(next->second, "z");
275+
276+
SUCCEED();
277+
}
278+
279+
// Taken from
280+
// https://github.com/web-platform-tests/wpt/blob/b7445afd17303e9443d1da92de9d2b93a9403b0b/url/urlsearchparams-sort.any.js#L31-L32
281+
TEST(url_search_params, sort_unicode_emoji) {
282+
ada::url_search_params search_params("a\xf0\x9f\x8c\x88&a\xf0\x9f\x92\xa9");
283+
ASSERT_EQ(search_params.size(), 2);
284+
search_params.sort();
285+
286+
auto keys = search_params.get_keys();
287+
ASSERT_EQ(keys.next(), "a\xf0\x9f\x8c\x88");
288+
ASSERT_EQ(keys.next(), "a\xf0\x9f\x92\xa9");
289+
290+
SUCCEED();
291+
}
292+
126293
TEST(url_search_params, string_constructor) {
127294
auto p = ada::url_search_params("?a=b");
128295
ASSERT_EQ(p.to_string(), "a=b");
@@ -279,4 +446,4 @@ TEST(url_search_params, sort_unicode_code_units_edge_case) {
279446
ASSERT_EQ(keys.next(), "\xf0\x9f\x8c\x88");
280447
ASSERT_EQ(keys.next(), "\xf0\x9f\x8c\x88\xef\xac\x83");
281448
SUCCEED();
282-
}
449+
}

0 commit comments

Comments
 (0)