UNPKG

fetch-headers

Version:
186 lines (164 loc) 5.55 kB
// META: title=Headers set-cookie special cases // META: global=window,worker const headerList = [ ['set-cookie', 'foo=bar'], ['Set-Cookie', 'fizz=buzz; domain=example.com'] ] const setCookie2HeaderList = [ ['set-cookie2', 'foo2=bar2'], ['Set-Cookie2', 'fizz2=buzz2; domain=example2.com'] ] function assert_nested_array_equals (actual, expected) { assert_equals(actual.length, expected.length, 'Array length is not equal') for (let i = 0; i < expected.length; i++) { assert_array_equals(actual[i], expected[i]) } } test(function () { new Headers({ 'Set-Cookie': 'foo=bar' }) }, 'Create headers with a single set-cookie header in object') test(function () { new Headers([headerList[0]]) }, 'Create headers with a single set-cookie header in list') test(function () { new Headers(headerList) }, 'Create headers with multiple set-cookie header in list') test(function () { const headers = new Headers(headerList) assert_equals( headers.get('set-cookie'), 'foo=bar, fizz=buzz; domain=example.com' ) }, 'Headers.prototype.get combines set-cookie headers in order') test(function () { const headers = new Headers(headerList) const list = [...headers] assert_nested_array_equals(list, [ ['set-cookie', 'foo=bar'], ['set-cookie', 'fizz=buzz; domain=example.com'] ]) }, 'Headers iterator does not combine set-cookie headers') test(function () { const headers = new Headers(setCookie2HeaderList) const list = [...headers] assert_nested_array_equals(list, [ ['set-cookie2', 'foo2=bar2, fizz2=buzz2; domain=example2.com'] ]) }, 'Headers iterator does not special case set-cookie2 headers') test(function () { const headers = new Headers([...headerList, ...setCookie2HeaderList]) const list = [...headers] assert_nested_array_equals(list, [ ['set-cookie', 'foo=bar'], ['set-cookie', 'fizz=buzz; domain=example.com'], ['set-cookie2', 'foo2=bar2, fizz2=buzz2; domain=example2.com'] ]) }, 'Headers iterator does not combine set-cookie & set-cookie2 headers') test(function () { // Values are in non alphabetic order, and the iterator should yield in the // headers in the exact order of the input. const headers = new Headers([ ['set-cookie', 'z=z'], ['set-cookie', 'a=a'], ['set-cookie', 'n=n'] ]) const list = [...headers] assert_nested_array_equals(list, [ ['set-cookie', 'z=z'], ['set-cookie', 'a=a'], ['set-cookie', 'n=n'] ]) }, 'Headers iterator preserves set-cookie ordering') test( function () { const headers = new Headers([ ['xylophone-header', '1'], ['best-header', '2'], ['set-cookie', '3'], ['a-cool-header', '4'], ['set-cookie', '5'], ['a-cool-header', '6'], ['best-header', '7'] ]) const list = [...headers] assert_nested_array_equals(list, [ ['a-cool-header', '4, 6'], ['best-header', '2, 7'], ['set-cookie', '3'], ['set-cookie', '5'], ['xylophone-header', '1'] ]) }, 'Headers iterator preserves per header ordering, but sorts keys alphabetically' ) test( function () { const headers = new Headers([ ['xylophone-header', '7'], ['best-header', '6'], ['set-cookie', '5'], ['a-cool-header', '4'], ['set-cookie', '3'], ['a-cool-header', '2'], ['best-header', '1'] ]) const list = [...headers] assert_nested_array_equals(list, [ ['a-cool-header', '4, 2'], ['best-header', '6, 1'], ['set-cookie', '5'], ['set-cookie', '3'], ['xylophone-header', '7'] ]) }, 'Headers iterator preserves per header ordering, but sorts keys alphabetically (and ignores value ordering)' ) test(function () { const headers = new Headers(headerList) headers.set('set-cookie', 'foo2=bar2') const list = [...headers] assert_nested_array_equals(list, [ ['set-cookie', 'foo2=bar2'] ]) }, 'Headers.prototype.set works for set-cookie') test(function () { const headers = new Headers() assert_array_equals(headers.getSetCookie(), []) }, 'Headers.prototype.getSetCookie with no headers present') test(function () { const headers = new Headers([headerList[0]]) assert_array_equals(headers.getSetCookie(), ['foo=bar']) }, 'Headers.prototype.getSetCookie with one header') test(function () { const headers = new Headers(headerList) assert_array_equals(headers.getSetCookie(), [ 'foo=bar', 'fizz=buzz; domain=example.com' ]) }, 'Headers.prototype.getSetCookie with multiple headers') test(function () { const headers = new Headers([['set-cookie', '']]) assert_array_equals(headers.getSetCookie(), ['']) }, 'Headers.prototype.getSetCookie with an empty header') test(function () { const headers = new Headers([['set-cookie', 'x'], ['set-cookie', 'x']]) assert_array_equals(headers.getSetCookie(), ['x', 'x']) }, 'Headers.prototype.getSetCookie with two equal headers') test(function () { const headers = new Headers([ ['set-cookie2', 'x'], ['set-cookie', 'y'], ['set-cookie2', 'z'] ]) assert_array_equals(headers.getSetCookie(), ['y']) }, 'Headers.prototype.getSetCookie ignores set-cookie2 headers') test(function () { // Values are in non alphabetic order, and the iterator should yield in the // headers in the exact order of the input. const headers = new Headers([ ['set-cookie', 'z=z'], ['set-cookie', 'a=a'], ['set-cookie', 'n=n'] ]) assert_array_equals(headers.getSetCookie(), ['z=z', 'a=a', 'n=n']) }, 'Headers.prototype.getSetCookie preserves header ordering')