Index: LayoutTests/http/tests/serviceworker/resources/headermap-worker.js |
diff --git a/LayoutTests/http/tests/serviceworker/resources/headermap-worker.js b/LayoutTests/http/tests/serviceworker/resources/headermap-worker.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c6c746cc410cf7f9f0b176219fc61487e4bd9e11 |
--- /dev/null |
+++ b/LayoutTests/http/tests/serviceworker/resources/headermap-worker.js |
@@ -0,0 +1,98 @@ |
+importScripts('worker-test-helpers.js'); |
+ |
+test(function() { |
+ var expectedMap = { |
+ 'Content-Language': 'ja', |
+ 'Content-Type': 'text/html; charset=UTF-8', |
+ 'X-ServiceWorker-Test': 'response test field' |
+ }; |
+ |
+ var headers = new HeaderMap; |
+ Object.keys(expectedMap).forEach(function(key) { |
+ headers.set(key, expectedMap[key]); |
+ }); |
+ |
+ // 'size' |
+ assert_equals(headers.size, 3, 'headers.size should match'); |
+ |
+ // 'has()', 'get()' |
+ var key = 'Content-Type'; |
+ assert_true(headers.has(key)); |
+ assert_equals(headers.get(key), expectedMap[key]); |
+ |
+ // 'delete()' |
+ var deleteKey = 'Content-Type'; |
+ headers.delete(deleteKey); |
+ assert_equals(headers.size, 2, 'headers.size should have -1 size'); |
+ Object.keys(expectedMap).forEach(function(key) { |
+ if (key == deleteKey) |
+ assert_false(headers.has(key)); |
+ else |
+ assert_true(headers.has(key)); |
+ }); |
+ |
+ // 'set()' |
+ var testCasesForSet = [ |
+ // For a new key/value pair. |
+ { key: 'Cache-Control', |
+ value: 'max-age=3600', |
+ isNewEntry: true }, |
+ |
+ // For an existing key. |
+ { key: 'X-ServiceWorker-Test', |
+ value: 'response test field - updated', |
+ isUpdate: true }, |
+ |
+ // For setting a numeric value, expecting to see DOMString on getting. |
+ { key: 'X-Numeric-Value', |
+ value: 12345, |
+ expectedValue: '12345', |
+ isNewEntry: true }, |
+ |
+ // For case-sensitivity test. (FIXME: if we want HeaderMap to |
+ // work in an case-insensitive way (as we do for headers in XHR) |
+ // update the test and code) |
+ { key: 'content-language', |
+ value: 'fi', |
+ isNewEntry: true } |
+ ]; |
+ |
+ var expectedHeaderSize = headers.size; |
+ testCasesForSet.forEach(function(testCase) { |
+ var key = testCase.key; |
+ var value = testCase.value; |
+ var expectedValue = ('expectedValue' in testCase) ? testCase.expectedValue : testCase.value; |
+ expectedHeaderSize = testCase.isNewEntry ? (expectedHeaderSize + 1) : expectedHeaderSize; |
+ |
+ headers.set(key, value); |
+ assert_true(headers.has(key)); |
+ assert_equals(headers.get(key), expectedValue); |
+ if (testCase.isUpdate) |
+ assert_true(headers.get(key) != expectedMap[key]); |
+ assert_equals(headers.size, expectedHeaderSize); |
+ |
+ // Update expectedMap too for forEach() test below. |
+ expectedMap[key] = expectedValue; |
+ }); |
+ |
+ // 'forEach()' |
+ headers.forEach(function(value, key) { |
+ assert_true(key != deleteKey); |
+ assert_true(key in expectedMap); |
+ assert_equals(headers.get(key), expectedMap[key]); |
+ }); |
+ |
+ // 'forEach()' with thisArg |
+ var that = {}, saw_that; |
+ headers = new HeaderMap; |
+ headers.set('a', 'b'); |
+ headers.forEach(function() { saw_that = this; }, that); |
+ assert_equals(saw_that, that, 'Passed thisArg should match'); |
+ |
+ headers.forEach(function() { 'use strict'; saw_that = this; }, 'abc'); |
+ assert_equals(saw_that, 'abc', 'Passed non-object thisArg should match'); |
+ |
+ headers.forEach(function() { saw_that = this; }, null); |
+ assert_equals(saw_that, self, 'Passed null thisArg should be replaced with global object'); |
+ |
+}, 'HeaderMap in ServiceWorkerGlobalScope'); |