| if (self.importScripts) { |
| importScripts('../resources/fetch-test-helpers.js'); |
| } |
| |
| promise_test(function() { |
| var response = new Response; |
| return response.text() |
| .then(function(text) { |
| assert_equals(text, '', |
| 'response.text() must return an empty string' + |
| 'if body is null'); |
| }); |
| }, 'Behavior of Response with no constructor arguments.'); |
| |
| promise_test(function() { |
| var response = new Response('test string'); |
| assert_equals( |
| response.headers.get('Content-Type'), |
| 'text/plain;charset=UTF-8', |
| 'A Response constructed with a string should have a Content-Type.'); |
| return response.text() |
| .then(function(text) { |
| assert_equals(text, 'test string', |
| 'Response body text should match the string on ' + |
| 'construction.'); |
| }); |
| }, 'Behavior of Response with string content.'); |
| |
| promise_test(function() { |
| var intView = new Int32Array([0, 1, 2, 3, 4, 55, 6, 7, 8, 9]); |
| var buffer = intView.buffer; |
| |
| var response = new Response(buffer); |
| assert_false(response.headers.has('Content-Type'), |
| 'A Response constructed with ArrayBuffer should not have a ' + |
| 'content type.'); |
| return response.arrayBuffer() |
| .then(function(buffer) { |
| var resultIntView = new Int32Array(buffer); |
| assert_array_equals( |
| resultIntView, [0, 1, 2, 3, 4, 55, 6, 7, 8, 9], |
| 'Response body ArrayBuffer should match ArrayBuffer ' + |
| 'it was constructed with.'); |
| }); |
| }, 'Behavior of Response with ArrayBuffer content.'); |
| |
| promise_test(function() { |
| var intView = new Int32Array([0, 1, 2, 3, 4, 55, 6, 7, 8, 9]); |
| |
| var response = new Response(intView); |
| assert_false(response.headers.has('Content-Type'), |
| 'A Response constructed with ArrayBufferView ' + |
| 'should not have a content type.'); |
| return response.arrayBuffer() |
| .then(function(buffer) { |
| var resultIntView = new Int32Array(buffer); |
| assert_array_equals( |
| resultIntView, [0, 1, 2, 3, 4, 55, 6, 7, 8, 9], |
| 'Response body ArrayBuffer should match ArrayBufferView ' + |
| 'it was constructed with.'); |
| }); |
| }, 'Behavior of Response with ArrayBufferView content without a slice.'); |
| |
| promise_test(function() { |
| var intView = new Int32Array([0, 1, 2, 3, 4, 55, 6, 7, 8, 9]); |
| var slice = intView.subarray(1, 4); // Should be [1, 2, 3] |
| var response = new Response(slice); |
| assert_false(response.headers.has('Content-Type'), |
| 'A Response constructed with ArrayBufferView ' + |
| 'should not have a content type.'); |
| return response.arrayBuffer() |
| .then(function(buffer) { |
| var resultIntView = new Int32Array(buffer); |
| assert_array_equals( |
| resultIntView, [1, 2, 3], |
| 'Response body ArrayBuffer should match ArrayBufferView ' + |
| 'slice it was constructed with.'); |
| }); |
| }, 'Behavior of Response with ArrayBufferView content with a slice.'); |
| |
| promise_test(function() { |
| var formData = new FormData(); |
| formData.append('sample string', '1234567890'); |
| formData.append('sample blob', new Blob(['blob content'])); |
| formData.append('sample file', |
| new File(['file content'], 'file.dat')); |
| var response = new Response(formData); |
| return response.text() |
| .then(function(result) { |
| var reg = new RegExp('multipart\/form-data; boundary=(.*)'); |
| var regResult = reg.exec(getContentType(response.headers)); |
| var boundary = regResult[1]; |
| var expected_body = |
| '--' + boundary + '\r\n' + |
| 'Content-Disposition: form-data; name="sample string"\r\n' + |
| '\r\n' + |
| '1234567890\r\n' + |
| '--' + boundary + '\r\n' + |
| 'Content-Disposition: form-data; name="sample blob"; ' + |
| 'filename="blob"\r\n' + |
| 'Content-Type: application/octet-stream\r\n' + |
| '\r\n' + |
| 'blob content\r\n' + |
| '--' + boundary + '\r\n' + |
| 'Content-Disposition: form-data; name="sample file"; ' + |
| 'filename="file.dat"\r\n' + |
| 'Content-Type: application/octet-stream\r\n' + |
| '\r\n' + |
| 'file content\r\n' + |
| '--' + boundary + '--\r\n'; |
| assert_equals( |
| result, expected_body, |
| 'Creating a Response with FormData body must succeed.'); |
| }); |
| }, 'Behavior of Response with FormData content'); |
| |
| promise_test(function() { |
| const urlSearchParams = new URLSearchParams(); |
| urlSearchParams.append('sample string', '1234567890'); |
| urlSearchParams.append('sample string 2', '1234567890 & 2'); |
| var response = new Response(urlSearchParams); |
| assert_equals( |
| response.headers.get('Content-Type'), |
| 'application/x-www-form-urlencoded;charset=UTF-8', |
| 'A Response constructed with a URLSearchParams should have a Content-Type.'); |
| return response.text() |
| .then(function(result) { |
| assert_equals( |
| result, 'sample+string=1234567890&sample+string+2=1234567890+%26+2', |
| 'Creating a Response with URLSearchParams body must succeed.'); |
| }); |
| }, 'Behavior of Response with URLSearchParams content'); |
| |
| promise_test(function() { |
| var headers = new Headers; |
| headers.set('Content-Language', 'ja'); |
| var response = new Response( |
| 'test string', {method: 'GET', headers: headers}); |
| assert_false(response.bodyUsed); |
| var response2 = response.clone(); |
| assert_false(response.bodyUsed, 'bodyUsed is not set by clone().'); |
| assert_false(response2.bodyUsed, 'bodyUsed is not set by clone().'); |
| response.headers.set('Content-Language', 'en'); |
| assert_equals( |
| response2.headers.get('Content-Language'), 'ja', 'Headers of cloned ' + |
| 'response should not change when original response headers are changed.'); |
| |
| var p = response.text(); |
| assert_true(response.bodyUsed, 'bodyUsed should be true when locked.'); |
| assert_false(response2.bodyUsed, |
| 'Cloned bodies should not share bodyUsed.'); |
| assert_throws({name: 'TypeError'}, |
| function() { response3 = response.clone(); }, |
| 'Response.clone() should throw if the body was used.'); |
| return p.then(function(text) { |
| assert_true(response.bodyUsed); |
| assert_false(response2.bodyUsed); |
| return response2.text(); |
| }).then(function(text) { |
| assert_equals(text, 'test string', |
| 'Response clone response body text should match.'); |
| assert_true(response2.bodyUsed); |
| }); |
| }, 'Behavior of bodyUsed in Response and clone behavior.'); |
| |
| promise_test(function() { |
| var response = new Response(null); |
| assert_equals( |
| response.headers.get('Content-Type'), |
| null, |
| 'A Response constructed with null body should have no Content-Type.'); |
| return response.text() |
| .then(function(text) { |
| assert_equals(text, '', |
| 'Response with null body accessed as text should ' + |
| 'resolve to the empty string.'); |
| }); |
| }, 'Behavior of Response passed null for body.'); |
| |
| promise_test(function() { |
| var response = new Response(); |
| assert_equals( |
| response.headers.get('Content-Type'), |
| null, |
| 'A Response constructed with no body should have no Content-Type.'); |
| return response.text() |
| .then(function(text) { |
| assert_equals(text, '', |
| 'Response with no body accessed as text should ' + |
| 'resolve to the empty string.'); |
| }); |
| }, 'Behavior of Response with no body.'); |
| |
| done(); |