1
1
#include " ada.h"
2
2
#include " gtest/gtest.h"
3
3
4
+ #include < deque>
5
+ #include < string>
6
+ #include < utility> // For std::pair
7
+ #include < vector>
8
+
4
9
TEST (url_search_params, append) {
5
10
auto search_params = ada::url_search_params ();
6
11
search_params.append (" key" , " value" );
@@ -123,6 +128,168 @@ TEST(url_search_params, sort) {
123
128
SUCCEED ();
124
129
}
125
130
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
+
126
293
TEST (url_search_params, string_constructor) {
127
294
auto p = ada::url_search_params (" ?a=b" );
128
295
ASSERT_EQ (p.to_string (), " a=b" );
@@ -279,4 +446,4 @@ TEST(url_search_params, sort_unicode_code_units_edge_case) {
279
446
ASSERT_EQ (keys.next (), " \xf0\x9f\x8c\x88 " );
280
447
ASSERT_EQ (keys.next (), " \xf0\x9f\x8c\x88\xef\xac\x83 " );
281
448
SUCCEED ();
282
- }
449
+ }
0 commit comments