OLD | NEW |
1 importScripts('worker-testharness.js'); | 1 importScripts('worker-testharness.js'); |
2 | 2 |
3 test(function() { | 3 test(function() { |
4 function size(headers) { | 4 function size(headers) { |
5 var count = 0; | 5 var count = 0; |
6 for (var header of headers) { | 6 for (var header of headers) { |
7 ++count; | 7 ++count; |
8 } | 8 } |
9 return count; | 9 return count; |
10 } | 10 } |
11 | 11 |
12 var expectedMap = { | 12 var expectedMap = { |
13 'content-language': 'ja', | 13 'content-language': 'ja', |
14 'content-type': 'text/html; charset=UTF-8', | 14 'content-type': 'text/html; charset=UTF-8', |
15 'x-serviceworker-test': 'response test field' | 15 'x-serviceworker-test': 'response test field' |
16 }; | 16 }; |
17 | 17 |
18 var headers = new Headers; | 18 var headers = new Headers; |
19 headers.set('Content-Language', 'ja'); | 19 headers.set('Content-Language', 'ja'); |
20 headers.set('Content-Type', 'text/html; charset=UTF-8'); | 20 headers.set('Content-Type', 'text/html; charset=UTF-8'); |
21 headers.set('X-ServiceWorker-Test', 'text/html; charset=UTF-8'); | 21 headers.set('X-ServiceWorker-Test', 'text/html; charset=UTF-8'); |
22 | 22 |
23 assert_equals(size(headers), 3, 'headers size should match'); | 23 assert_equals(size(headers), 3, 'headers size should match'); |
24 | 24 |
25 // 'has()', 'get()' | 25 // 'has()', 'get()' |
26 var key = 'Content-Type'; | 26 var key = 'Content-Type'; |
27 assert_true(headers.has(key)); | 27 assert_true(headers.has(key)); |
28 assert_true(headers.has(key.toUpperCase())); | 28 assert_true(headers.has(key.toUpperCase())); |
29 assert_equals(headers.get(key), expectedMap[key.toLowerCase()]); | 29 assert_equals(headers.get(key), expectedMap[key.toLowerCase()]); |
30 assert_equals(headers.get(key.toUpperCase()), expectedMap[key.toLowerCase()]
); | 30 assert_equals(headers.get(key.toUpperCase()), |
| 31 expectedMap[key.toLowerCase()]); |
31 assert_equals(headers.get('dummy'), null); | 32 assert_equals(headers.get('dummy'), null); |
32 assert_false(headers.has('dummy')); | 33 assert_false(headers.has('dummy')); |
33 | 34 |
34 // 'delete()' | 35 // 'delete()' |
35 var deleteKey = 'Content-Type'; | 36 var deleteKey = 'Content-Type'; |
36 headers.delete(deleteKey); | 37 headers.delete(deleteKey); |
37 assert_equals(size(headers), 2, 'headers size should have -1 size'); | 38 assert_equals(size(headers), 2, 'headers size should have -1 size'); |
38 Object.keys(expectedMap).forEach(function(key) { | 39 Object.keys(expectedMap).forEach(function(key) { |
39 if (key == deleteKey.toLowerCase()) | 40 if (key == deleteKey.toLowerCase()) |
40 assert_false(headers.has(key)); | 41 assert_false(headers.has(key)); |
41 else | 42 else |
42 assert_true(headers.has(key)); | 43 assert_true(headers.has(key)); |
43 }); | 44 }); |
44 | 45 |
45 // 'set()' | 46 // 'set()' |
46 var testCasesForSet = [ | 47 var testCasesForSet = [ |
47 // For a new key/value pair. | 48 // For a new key/value pair. |
48 { key: 'Cache-Control', | 49 { key: 'Cache-Control', |
49 value: 'max-age=3600', | 50 value: 'max-age=3600', |
50 isNewEntry: true }, | 51 isNewEntry: true }, |
51 | 52 |
52 // For an existing key. | 53 // For an existing key. |
53 { key: 'X-ServiceWorker-Test', | 54 { key: 'X-ServiceWorker-Test', |
54 value: 'response test field - updated', | 55 value: 'response test field - updated', |
55 isUpdate: true }, | 56 isUpdate: true }, |
56 | 57 |
57 // For setting a numeric value, expecting to see DOMString on getting. | 58 // For setting a numeric value, expecting to see DOMString on getting. |
58 { key: 'X-Numeric-Value', | 59 { key: 'X-Numeric-Value', |
59 value: 12345, | 60 value: 12345, |
60 expectedValue: '12345', | 61 expectedValue: '12345', |
61 isNewEntry: true }, | 62 isNewEntry: true }, |
62 | 63 |
63 // For case-insensitivity test. | 64 // For case-insensitivity test. |
64 { key: 'content-language', | 65 { key: 'content-language', |
65 value: 'fi', | 66 value: 'fi', |
66 isUpdate: true } | 67 isUpdate: true } |
67 ]; | 68 ]; |
68 | 69 |
69 var expectedHeaderSize = size(headers); | 70 var expectedHeaderSize = size(headers); |
70 testCasesForSet.forEach(function(testCase) { | 71 testCasesForSet.forEach(function(testCase) { |
71 var key = testCase.key; | 72 var key = testCase.key; |
72 var value = testCase.value; | 73 var value = testCase.value; |
73 var expectedValue = ('expectedValue' in testCase) ? testCase.expectedVal
ue : testCase.value; | 74 var expectedValue = ('expectedValue' in testCase) ? |
74 expectedHeaderSize = testCase.isNewEntry ? (expectedHeaderSize + 1) : ex
pectedHeaderSize; | 75 testCase.expectedValue : testCase.value; |
| 76 expectedHeaderSize = testCase.isNewEntry ? |
| 77 (expectedHeaderSize + 1) : expectedHeaderSize; |
75 | 78 |
76 headers.set(key, value); | 79 headers.set(key, value); |
77 assert_true(headers.has(key)); | 80 assert_true(headers.has(key)); |
78 assert_equals(headers.get(key), expectedValue); | 81 assert_equals(headers.get(key), expectedValue); |
79 if (testCase.isUpdate) | 82 if (testCase.isUpdate) |
80 assert_true(headers.get(key) != expectedMap[key.toLowerCase()]); | 83 assert_true(headers.get(key) != expectedMap[key.toLowerCase()]); |
81 assert_equals(size(headers), expectedHeaderSize); | 84 assert_equals(size(headers), expectedHeaderSize); |
82 | 85 |
83 // Update expectedMap too for forEach() test below. | 86 // Update expectedMap too for forEach() test below. |
84 expectedMap[key.toLowerCase()] = expectedValue; | 87 expectedMap[key.toLowerCase()] = expectedValue; |
85 }); | 88 }); |
86 | 89 |
87 // '[Symbol.iterator]()' | 90 // '[Symbol.iterator]()' |
88 for (var header of headers) { | 91 for (var header of headers) { |
89 var key = header[0], value = header[1]; | 92 var key = header[0], value = header[1]; |
90 assert_true(key != deleteKey.toLowerCase()); | 93 assert_true(key != deleteKey.toLowerCase()); |
91 assert_true(key in expectedMap); | 94 assert_true(key in expectedMap); |
92 assert_equals(headers.get(key), expectedMap[key]); | 95 assert_equals(headers.get(key), expectedMap[key]); |
93 } | 96 } |
94 | 97 |
95 // 'append()', 'getAll()' | 98 // 'append()', 'getAll()' |
96 var allValues = headers.getAll('X-ServiceWorker-Test'); | 99 var allValues = headers.getAll('X-ServiceWorker-Test'); |
97 assert_equals(allValues.length, 1); | 100 assert_equals(allValues.length, 1); |
98 assert_equals(size(headers), 4); | 101 assert_equals(size(headers), 4); |
99 headers.append('X-SERVICEWORKER-TEST', 'response test field - append'); | 102 headers.append('X-SERVICEWORKER-TEST', 'response test field - append'); |
100 assert_equals(size(headers), 5, 'headers size should increase by 1.'); | 103 assert_equals(size(headers), 5, 'headers size should increase by 1.'); |
101 assert_equals(headers.get('X-SERVICEWORKER-Test'), | 104 assert_equals(headers.get('X-SERVICEWORKER-Test'), |
102 'response test field - updated', | 105 'response test field - updated', |
103 'the value of the first header added should be returned.'); | 106 'the value of the first header added should be returned.'); |
104 allValues = headers.getAll('X-SERVICEWorker-TEST'); | 107 allValues = headers.getAll('X-SERVICEWorker-TEST'); |
105 assert_equals(allValues.length, 2); | 108 assert_equals(allValues.length, 2); |
106 assert_equals(allValues[0], 'response test field - updated'); | 109 assert_equals(allValues[0], 'response test field - updated'); |
107 assert_equals(allValues[1], 'response test field - append'); | 110 assert_equals(allValues[1], 'response test field - append'); |
108 headers.set('X-SERVICEWorker-Test', 'response test field - set'); | 111 headers.set('X-SERVICEWorker-Test', 'response test field - set'); |
109 assert_equals(size(headers), 4, 'the second header should be deleted'); | 112 assert_equals(size(headers), 4, 'the second header should be deleted'); |
110 allValues = headers.getAll('X-ServiceWorker-Test'); | 113 allValues = headers.getAll('X-ServiceWorker-Test'); |
111 assert_equals(allValues.length, 1, 'the second header should be deleted'); | 114 assert_equals(allValues.length, 1, 'the second header should be deleted'); |
112 assert_equals(allValues[0], 'response test field - set'); | 115 assert_equals(allValues[0], 'response test field - set'); |
113 headers.append('X-ServiceWorker-TEST', 'response test field - append'); | 116 headers.append('X-ServiceWorker-TEST', 'response test field - append'); |
114 assert_equals(size(headers), 5, 'headers size should increase by 1.') | 117 assert_equals(size(headers), 5, 'headers size should increase by 1.'); |
115 headers.delete('X-ServiceWORKER-Test'); | 118 headers.delete('X-ServiceWORKER-Test'); |
116 assert_equals(size(headers), 3, 'two headers should be deleted.') | 119 assert_equals(size(headers), 3, 'two headers should be deleted.'); |
117 | 120 |
118 // new Headers with sequence<sequence<ByteString>> | 121 // new Headers with sequence<sequence<ByteString>> |
119 headers = new Headers([['a', 'b'], ['c', 'd'], ['c', 'e']]); | 122 headers = new Headers([['a', 'b'], ['c', 'd'], ['c', 'e']]); |
120 assert_equals(size(headers), 3, 'headers size should match'); | 123 assert_equals(size(headers), 3, 'headers size should match'); |
121 assert_equals(headers.get('a'), 'b'); | 124 assert_equals(headers.get('a'), 'b'); |
122 assert_equals(headers.get('c'), 'd'); | 125 assert_equals(headers.get('c'), 'd'); |
123 assert_equals(headers.getAll('c')[0], 'd'); | 126 assert_equals(headers.getAll('c')[0], 'd'); |
124 assert_equals(headers.getAll('c')[1], 'e'); | 127 assert_equals(headers.getAll('c')[1], 'e'); |
125 | 128 |
126 // new Headers with Headers | 129 // new Headers with Headers |
(...skipping 10 matching lines...) Expand all Loading... |
137 // new Headers with Dictionary | 140 // new Headers with Dictionary |
138 headers = new Headers({'a': 'b', 'c': 'd'}); | 141 headers = new Headers({'a': 'b', 'c': 'd'}); |
139 assert_equals(size(headers), 2, 'headers size should match'); | 142 assert_equals(size(headers), 2, 'headers size should match'); |
140 assert_equals(headers.get('a'), 'b'); | 143 assert_equals(headers.get('a'), 'b'); |
141 assert_equals(headers.get('c'), 'd'); | 144 assert_equals(headers.get('c'), 'd'); |
142 | 145 |
143 // Throw errors | 146 // Throw errors |
144 var invalidNames = ['', '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', | 147 var invalidNames = ['', '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', |
145 '/', '[', ']', '?', '=', '{', '}', '\u3042', 'a(b']; | 148 '/', '[', ']', '?', '=', '{', '}', '\u3042', 'a(b']; |
146 invalidNames.forEach(function(name) { | 149 invalidNames.forEach(function(name) { |
147 assert_throws({name:'TypeError'}, | 150 assert_throws({name: 'TypeError'}, |
148 function() { headers.append(name, 'a'); }, | 151 function() { headers.append(name, 'a'); }, |
149 'Headers.append with an invalid name (' + name +') should
throw'); | 152 'Headers.append with an invalid name (' + name + |
150 assert_throws({name:'TypeError'}, | 153 ') should throw'); |
| 154 assert_throws({name: 'TypeError'}, |
151 function() { headers.delete(name); }, | 155 function() { headers.delete(name); }, |
152 'Headers.delete with an invalid name (' + name +') should
throw'); | 156 'Headers.delete with an invalid name (' + name + |
153 assert_throws({name:'TypeError'}, | 157 ') should throw'); |
| 158 assert_throws({name: 'TypeError'}, |
154 function() { headers.get(name); }, | 159 function() { headers.get(name); }, |
155 'Headers.get with an invalid name (' + name +') should thr
ow'); | 160 'Headers.get with an invalid name (' + name + |
156 assert_throws({name:'TypeError'}, | 161 ') should throw'); |
| 162 assert_throws({name: 'TypeError'}, |
157 function() { headers.getAll(name); }, | 163 function() { headers.getAll(name); }, |
158 'Headers.getAll with an invalid name (' + name +') should
throw'); | 164 'Headers.getAll with an invalid name (' + name + |
159 assert_throws({name:'TypeError'}, | 165 ') should throw'); |
| 166 assert_throws({name: 'TypeError'}, |
160 function() { headers.has(name); }, | 167 function() { headers.has(name); }, |
161 'Headers.has with an invalid name (' + name +') should thr
ow'); | 168 'Headers.has with an invalid name (' + name + |
162 assert_throws({name:'TypeError'}, | 169 ') should throw'); |
| 170 assert_throws({name: 'TypeError'}, |
163 function() { headers.set(name, 'a'); }, | 171 function() { headers.set(name, 'a'); }, |
164 'Headers.set with an invalid name (' + name +') should thr
ow'); | 172 'Headers.set with an invalid name (' + name + |
165 assert_throws({name:'TypeError'}, | 173 ') should throw'); |
| 174 assert_throws({name: 'TypeError'}, |
166 function() { | 175 function() { |
167 var obj = {}; | 176 var obj = {}; |
168 obj[name] = 'a'; | 177 obj[name] = 'a'; |
169 var headers = new Headers(obj); | 178 var headers = new Headers(obj); |
170 }, | 179 }, |
171 'new Headers with an invalid name (' + name +') should thr
ow'); | 180 'new Headers with an invalid name (' + name + |
172 assert_throws({name:'TypeError'}, | 181 ') should throw'); |
| 182 assert_throws({name: 'TypeError'}, |
173 function() { var headers = new Headers([[name, 'a']]); }, | 183 function() { var headers = new Headers([[name, 'a']]); }, |
174 'new Headers with an invalid name (' + name +') should thr
ow'); | 184 'new Headers with an invalid name (' + name + |
175 }); | 185 ') should throw'); |
| 186 }); |
176 | 187 |
177 var invalidValues = ['test \r data', 'test \n data']; | 188 var invalidValues = ['test \r data', 'test \n data']; |
178 invalidValues.forEach(function(value) { | 189 invalidValues.forEach(function(value) { |
179 assert_throws({name:'TypeError'}, | 190 assert_throws({name: 'TypeError'}, |
180 function() { headers.append('a', value); }, | 191 function() { headers.append('a', value); }, |
181 'Headers.append with an invalid value should throw'); | 192 'Headers.append with an invalid value should throw'); |
182 assert_throws({name:'TypeError'}, | 193 assert_throws({name: 'TypeError'}, |
183 function() { headers.set('a', value); }, | 194 function() { headers.set('a', value); }, |
184 'Headers.set with an invalid value should throw'); | 195 'Headers.set with an invalid value should throw'); |
185 assert_throws({name:'TypeError'}, | 196 assert_throws({name: 'TypeError'}, |
186 function() { var headers = new Headers({'a': value}); }, | 197 function() { var headers = new Headers({'a': value}); }, |
187 'new Headers with an invalid value should throw'); | 198 'new Headers with an invalid value should throw'); |
188 assert_throws({name:'TypeError'}, | 199 assert_throws({name: 'TypeError'}, |
189 function() { var headers = new Headers([['a', value]]); }, | 200 function() { var headers = new Headers([['a', value]]); }, |
190 'new Headers with an invalid value should throw'); | 201 'new Headers with an invalid value should throw'); |
191 }); | 202 }); |
192 | 203 |
193 assert_throws({name:'TypeError'}, | 204 assert_throws({name: 'TypeError'}, |
194 function() { var headers = new Headers([[]]); }, | 205 function() { var headers = new Headers([[]]); }, |
195 'new Headers with a sequence with less than two strings should
throw'); | 206 'new Headers with a sequence with less than two strings ' + |
196 assert_throws({name:'TypeError'}, | 207 'should throw'); |
| 208 assert_throws({name: 'TypeError'}, |
197 function() { var headers = new Headers([['a']]); }, | 209 function() { var headers = new Headers([['a']]); }, |
198 'new Headers with a sequence with less than two strings should
throw'); | 210 'new Headers with a sequence with less than two strings ' + |
199 assert_throws({name:'TypeError'}, | 211 'should throw'); |
| 212 assert_throws({name: 'TypeError'}, |
200 function() { var headers = new Headers([['a', 'b'], []]); }, | 213 function() { var headers = new Headers([['a', 'b'], []]); }, |
201 'new Headers with a sequence with less than two strings should
throw'); | 214 'new Headers with a sequence with less than two strings ' + |
202 assert_throws({name:'TypeError'}, | 215 'should throw'); |
203 function() { var headers = new Headers([['a', 'b'], ['x', 'y',
'z']]); }, | 216 assert_throws({name: 'TypeError'}, |
204 'new Headers with a sequence with more than two strings should
throw'); | 217 function() { var headers = new Headers([['a', 'b'], |
205 }, 'Headers in ServiceWorkerGlobalScope'); | 218 ['x', 'y', 'z']]); }, |
| 219 'new Headers with a sequence with more than two strings ' + |
| 220 'should throw'); |
| 221 }, 'Headers in ServiceWorkerGlobalScope'); |
OLD | NEW |