• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1test(function() {
2    var params = new URLSearchParams();
3    params.append('a', 'b c');
4    assert_equals(params + '', 'a=b+c');
5    params.delete('a');
6    params.append('a b', 'c');
7    assert_equals(params + '', 'a+b=c');
8}, 'Serialize space');
9
10test(function() {
11    var params = new URLSearchParams();
12    params.append('a', '');
13    assert_equals(params + '', 'a=');
14    params.append('a', '');
15    assert_equals(params + '', 'a=&a=');
16    params.append('', 'b');
17    assert_equals(params + '', 'a=&a=&=b');
18    params.append('', '');
19    assert_equals(params + '', 'a=&a=&=b&=');
20    params.append('', '');
21    assert_equals(params + '', 'a=&a=&=b&=&=');
22}, 'Serialize empty value');
23
24test(function() {
25    var params = new URLSearchParams();
26    params.append('', 'b');
27    assert_equals(params + '', '=b');
28    params.append('', 'b');
29    assert_equals(params + '', '=b&=b');
30}, 'Serialize empty name');
31
32test(function() {
33    var params = new URLSearchParams();
34    params.append('', '');
35    assert_equals(params + '', '=');
36    params.append('', '');
37    assert_equals(params + '', '=&=');
38}, 'Serialize empty name and value');
39
40test(function() {
41    var params = new URLSearchParams();
42    params.append('a', 'b+c');
43    assert_equals(params + '', 'a=b%2Bc');
44    params.delete('a');
45    params.append('a+b', 'c');
46    assert_equals(params + '', 'a%2Bb=c');
47}, 'Serialize +');
48
49test(function() {
50    var params = new URLSearchParams();
51    params.append('=', 'a');
52    assert_equals(params + '', '%3D=a');
53    params.append('b', '=');
54    assert_equals(params + '', '%3D=a&b=%3D');
55}, 'Serialize =');
56
57test(function() {
58    var params = new URLSearchParams();
59    params.append('&', 'a');
60    assert_equals(params + '', '%26=a');
61    params.append('b', '&');
62    assert_equals(params + '', '%26=a&b=%26');
63}, 'Serialize &');
64
65test(function() {
66    var params = new URLSearchParams();
67    params.append('a', '*-._');
68    assert_equals(params + '', 'a=*-._');
69    params.delete('a');
70    params.append('*-._', 'c');
71    assert_equals(params + '', '*-._=c');
72}, 'Serialize *-._');
73
74test(function() {
75    var params = new URLSearchParams();
76    params.append('a', 'b%c');
77    assert_equals(params + '', 'a=b%25c');
78    params.delete('a');
79    params.append('a%b', 'c');
80    assert_equals(params + '', 'a%25b=c');
81
82    params = new URLSearchParams('id=0&value=%')
83    assert_equals(params + '', 'id=0&value=%25')
84}, 'Serialize %');
85
86test(function() {
87    var params = new URLSearchParams();
88    params.append('a', 'b\0c');
89    assert_equals(params + '', 'a=b%00c');
90    params.delete('a');
91    params.append('a\0b', 'c');
92    assert_equals(params + '', 'a%00b=c');
93}, 'Serialize \\0');
94
95test(function() {
96    var params = new URLSearchParams();
97    params.append('a', 'b\uD83D\uDCA9c');
98    assert_equals(params + '', 'a=b%F0%9F%92%A9c');
99    params.delete('a');
100    params.append('a\uD83D\uDCA9b', 'c');
101    assert_equals(params + '', 'a%F0%9F%92%A9b=c');
102}, 'Serialize \uD83D\uDCA9');  // Unicode Character 'PILE OF POO' (U+1F4A9)
103
104test(function() {
105    var params;
106    params = new URLSearchParams('a=b&c=d&&e&&');
107    assert_equals(params.toString(), 'a=b&c=d&e=');
108    params = new URLSearchParams('a = b &a=b&c=d%20');
109    assert_equals(params.toString(), 'a+=+b+&a=b&c=d+');
110    // The lone '=' _does_ survive the roundtrip.
111    params = new URLSearchParams('a=&a=b');
112    assert_equals(params.toString(), 'a=&a=b');
113
114    params = new URLSearchParams('b=%2sf%2a');
115    assert_equals(params.toString(), 'b=%252sf*');
116
117    params = new URLSearchParams('b=%2%2af%2a');
118    assert_equals(params.toString(), 'b=%252*f*');
119
120    params = new URLSearchParams('b=%%2a');
121    assert_equals(params.toString(), 'b=%25*');
122}, 'URLSearchParams.toString');
123
124test(() => {
125    const url = new URL('http://www.example.com/?a=b,c');
126    const params = url.searchParams;
127
128    assert_equals(url.toString(), 'http://www.example.com/?a=b,c');
129    assert_equals(params.toString(), 'a=b%2Cc');
130
131    params.append('x', 'y');
132
133    assert_equals(url.toString(), 'http://www.example.com/?a=b%2Cc&x=y');
134    assert_equals(params.toString(), 'a=b%2Cc&x=y');
135}, 'URLSearchParams connected to URL');
136
137test(() => {
138    const url = new URL('http://www.example.com/');
139    const params = url.searchParams;
140
141    params.append('a\nb', 'c\rd');
142    params.append('e\n\rf', 'g\r\nh');
143
144    assert_equals(params.toString(), "a%0Ab=c%0Dd&e%0A%0Df=g%0D%0Ah");
145}, 'URLSearchParams must not do newline normalization');
146