OLD | NEW |
---|---|
(Empty) | |
1 importScripts('worker-test-helpers.js'); | |
2 | |
3 test(function() { | |
4 var expectedMap = { | |
5 'Content-Language': 'ja', | |
6 'Content-Type': 'text/html; charset=UTF-8', | |
7 'X-ServiceWorker-Test': 'response test field' | |
8 }; | |
9 | |
10 var headers = new Headers; | |
11 Object.keys(expectedMap).forEach(function(key) { | |
12 headers.set(key, expectedMap[key]); | |
13 }); | |
14 | |
15 // 'size' | |
16 assert_equals(headers.size, 3, 'headers.size should match'); | |
17 | |
18 // 'has()', 'get()' | |
19 var key = 'Content-Type'; | |
20 assert_true(headers.has(key)); | |
21 assert_equals(headers.get(key), expectedMap[key]); | |
falken
2014/06/27 07:21:21
how about also testing assert_false(headers.has('d
horo
2014/06/27 07:50:37
Done.
| |
22 assert_equals(headers.get('dummy'), null); | |
23 | |
24 // 'delete()' | |
25 var deleteKey = 'Content-Type'; | |
26 headers.delete(deleteKey); | |
27 assert_equals(headers.size, 2, 'headers.size should have -1 size'); | |
28 Object.keys(expectedMap).forEach(function(key) { | |
29 if (key == deleteKey) | |
30 assert_false(headers.has(key)); | |
31 else | |
32 assert_true(headers.has(key)); | |
33 }); | |
34 | |
35 // 'set()' | |
36 var testCasesForSet = [ | |
37 // For a new key/value pair. | |
38 { key: 'Cache-Control', | |
39 value: 'max-age=3600', | |
40 isNewEntry: true }, | |
41 | |
42 // For an existing key. | |
43 { key: 'X-ServiceWorker-Test', | |
44 value: 'response test field - updated', | |
45 isUpdate: true }, | |
46 | |
47 // For setting a numeric value, expecting to see DOMString on getting. | |
48 { key: 'X-Numeric-Value', | |
49 value: 12345, | |
50 expectedValue: '12345', | |
51 isNewEntry: true }, | |
52 | |
53 // For case-sensitivity test. (FIXME: if we want HeaderMap to | |
54 // work in an case-insensitive way (as we do for headers in XHR) | |
55 // update the test and code) | |
56 { key: 'content-language', | |
57 value: 'fi', | |
58 isNewEntry: true } | |
59 ]; | |
60 | |
61 var expectedHeaderSize = headers.size; | |
62 testCasesForSet.forEach(function(testCase) { | |
63 var key = testCase.key; | |
64 var value = testCase.value; | |
65 var expectedValue = ('expectedValue' in testCase) ? testCase.expectedVal ue : testCase.value; | |
66 expectedHeaderSize = testCase.isNewEntry ? (expectedHeaderSize + 1) : ex pectedHeaderSize; | |
67 | |
68 headers.set(key, value); | |
69 assert_true(headers.has(key)); | |
70 assert_equals(headers.get(key), expectedValue); | |
71 if (testCase.isUpdate) | |
72 assert_true(headers.get(key) != expectedMap[key]); | |
73 assert_equals(headers.size, expectedHeaderSize); | |
74 | |
75 // Update expectedMap too for forEach() test below. | |
76 expectedMap[key] = expectedValue; | |
77 }); | |
78 | |
79 // 'forEach()' | |
80 headers.forEach(function(value, key) { | |
81 assert_true(key != deleteKey); | |
82 assert_true(key in expectedMap); | |
83 assert_equals(headers.get(key), expectedMap[key]); | |
84 }); | |
85 | |
86 // 'append()', 'getAll()' | |
87 var allValues = headers.getAll('X-ServiceWorker-Test'); | |
88 assert_equals(allValues.length, 1); | |
89 assert_equals(headers.size, 5); | |
90 headers.append('X-ServiceWorker-Test', 'response test field - append'); | |
91 assert_equals(headers.size, 6, 'headers.size should increase by 1.'); | |
92 assert_equals(headers.get('X-ServiceWorker-Test'), | |
93 'response test field - updated', | |
94 'the value of the first header added should be returned.'); | |
95 allValues = headers.getAll('X-ServiceWorker-Test'); | |
96 assert_equals(allValues.length, 2); | |
97 assert_equals(allValues[0], 'response test field - updated'); | |
98 assert_equals(allValues[1], 'response test field - append'); | |
99 headers.set('X-ServiceWorker-Test', 'response test field - set'); | |
100 assert_equals(headers.size, 5, 'the second header should be deleted'); | |
101 allValues = headers.getAll('X-ServiceWorker-Test'); | |
102 assert_equals(allValues.length, 1, 'the second header should be deleted'); | |
103 assert_equals(allValues[0], 'response test field - set'); | |
104 headers.append('X-ServiceWorker-Test', 'response test field - append'); | |
105 assert_equals(headers.size, 6, 'headers.size should increase by 1.') | |
106 headers.delete('X-ServiceWorker-Test'); | |
107 assert_equals(headers.size, 4, 'two headers should be deleted.') | |
108 | |
109 // new Headers with sequence<sequence<ByteString>> | |
110 headers = new Headers([['a', 'b'], ['c', 'd'], ['c', 'e']]); | |
111 assert_equals(headers.size, 3, 'headers.size should match'); | |
112 assert_equals(headers.get('a'), 'b'); | |
113 assert_equals(headers.get('c'), 'd'); | |
114 assert_equals(headers.getAll('c')[0], 'd'); | |
115 assert_equals(headers.getAll('c')[1], 'e'); | |
116 | |
117 // new Headers with Headers | |
118 var headers2 = new Headers(headers); | |
119 assert_equals(headers2.size, 3, 'headers.size should match'); | |
120 assert_equals(headers2.get('a'), 'b'); | |
121 assert_equals(headers2.get('c'), 'd'); | |
122 assert_equals(headers2.getAll('c')[0], 'd'); | |
123 assert_equals(headers2.getAll('c')[1], 'e'); | |
124 headers.set('a', 'x'); | |
125 assert_equals(headers.get('a'), 'x'); | |
126 assert_equals(headers2.get('a'), 'b'); | |
127 | |
128 // new Headers with Dictionary | |
129 headers = new Headers({'a': 'b', 'c': 'd'}); | |
130 assert_equals(headers.size, 2, 'headers.size should match'); | |
131 assert_equals(headers.get('a'), 'b'); | |
132 assert_equals(headers.get('c'), 'd'); | |
133 | |
134 // Throw errors | |
135 var invalidNames = ['', '(', ')', '<', '>', '@', ',', ';', ':', '\\', '"', | |
136 '/', '[', ']', '?', '=', '{', '}', '\u3042', 'a(b']; | |
137 invalidNames.forEach(function(name) { | |
138 assert_throws({name:'TypeError'}, | |
139 function() { headers.append(name, 'a'); }, | |
140 'Headers.append with an invalid name (' + name +') should throw'); | |
141 assert_throws({name:'TypeError'}, | |
142 function() { headers.delete(name); }, | |
143 'Headers.delete with an invalid name (' + name +') should throw'); | |
144 assert_throws({name:'TypeError'}, | |
145 function() { headers.get(name); }, | |
146 'Headers.get with an invalid name (' + name +') should thr ow'); | |
147 assert_throws({name:'TypeError'}, | |
148 function() { headers.getAll(name); }, | |
149 'Headers.getAll with an invalid name (' + name +') should throw'); | |
150 assert_throws({name:'TypeError'}, | |
151 function() { headers.has(name); }, | |
152 'Headers.has with an invalid name (' + name +') should thr ow'); | |
153 assert_throws({name:'TypeError'}, | |
154 function() { headers.set(name, 'a'); }, | |
155 'Headers.set with an invalid name (' + name +') should thr ow'); | |
156 assert_throws({name:'TypeError'}, | |
157 function() { | |
158 var obj = {}; | |
159 obj[name] = 'a'; | |
160 var headers = new Headers(obj); | |
161 }, | |
162 'new Headers with an invalid name (' + name +') should thr ow'); | |
163 assert_throws({name:'TypeError'}, | |
164 function() { var headers = new Headers([[name, 'a']]); }, | |
165 'new Headers with an invalid name (' + name +') should thr ow'); | |
166 }); | |
167 | |
168 var invalidValues = ['test \r data', 'test \n data']; | |
169 invalidValues.forEach(function(value) { | |
170 assert_throws({name:'TypeError'}, | |
171 function() { headers.append('a', value); }, | |
172 'Headers.append with an invalid value should throw'); | |
173 assert_throws({name:'TypeError'}, | |
174 function() { headers.set('a', value); }, | |
175 'Headers.set with an invalid value should throw'); | |
176 assert_throws({name:'TypeError'}, | |
177 function() { var headers = new Headers({'a': value}); }, | |
178 'new Headers with an invalid value should throw'); | |
179 assert_throws({name:'TypeError'}, | |
180 function() { var headers = new Headers([['a', value]]); }, | |
181 'new Headers with an invalid value should throw'); | |
182 }); | |
183 | |
184 assert_throws({name:'TypeError'}, | |
185 function() { var headers = new Headers([[]]); }, | |
186 'new Headers with an invalid value should throw'); | |
187 assert_throws({name:'TypeError'}, | |
188 function() { var headers = new Headers([['a']]); }, | |
189 'new Headers with an invalid value should throw'); | |
190 assert_throws({name:'TypeError'}, | |
191 function() { var headers = new Headers([['a', 'b'], []]); }, | |
192 'new Headers with an invalid value should throw'); | |
193 | |
194 // 'forEach()' with thisArg | |
195 var that = {}, saw_that; | |
196 headers = new Headers; | |
197 headers.set('a', 'b'); | |
198 headers.forEach(function() { saw_that = this; }, that); | |
199 assert_equals(saw_that, that, 'Passed thisArg should match'); | |
200 | |
201 headers.forEach(function() { 'use strict'; saw_that = this; }, 'abc'); | |
202 assert_equals(saw_that, 'abc', 'Passed non-object thisArg should match'); | |
203 | |
204 headers.forEach(function() { saw_that = this; }, null); | |
205 assert_equals(saw_that, self, 'Passed null thisArg should be replaced with g lobal object'); | |
206 | |
falken
2014/06/27 07:21:21
nit: extra newline here?
horo
2014/06/27 07:50:37
Done.
| |
207 }, 'Headers in ServiceWorkerGlobalScope'); | |
OLD | NEW |