'use strict'; require('../common'); const assert = require('assert'); const inspect = require('util').inspect; const { _checkIsHttpToken, _checkInvalidHeaderChar } = require('_http_common'); // Good header field names [ 'TCN', 'ETag', 'date', 'alt-svc', 'Content-Type', '0', 'Set-Cookie2', 'Set_Cookie', 'foo`bar^', 'foo|bar', '~foobar', 'FooBar!', '#Foo', '$et-Cookie', '%%Test%%', 'Test&123', 'It\'s_fun', '2*3', '4+2', '3.14159265359' ].forEach(function(str) { assert.strictEqual( _checkIsHttpToken(str), true, `_checkIsHttpToken(${inspect(str)}) unexpectedly failed`); }); // Bad header field names [ ':', '@@', '中文呢', // unicode '((((())))', ':alternate-protocol', 'alternate-protocol:', 'foo\nbar', 'foo\rbar', 'foo\r\nbar', 'foo\x00bar', '\x7FMe!', '{Start', '(Start', '[Start', 'End}', 'End)', 'End]', '"Quote"', 'This,That' ].forEach(function(str) { assert.strictEqual( _checkIsHttpToken(str), false, `_checkIsHttpToken(${inspect(str)}) unexpectedly succeeded`); }); // Good header field values [ 'foo bar', 'foo\tbar', '0123456789ABCdef', '!@#$%^&*()-_=+\\;\':"[]{}<>,./?|~`' ].forEach(function(str) { assert.strictEqual( _checkInvalidHeaderChar(str), false, `_checkInvalidHeaderChar(${inspect(str)}) unexpectedly failed`); }); // Bad header field values [ 'foo\rbar', 'foo\nbar', 'foo\r\nbar', '中文呢', // unicode '\x7FMe!', 'Testing 123\x00', 'foo\vbar', 'Ding!\x07' ].forEach(function(str) { assert.strictEqual( _checkInvalidHeaderChar(str), true, `_checkInvalidHeaderChar(${inspect(str)}) unexpectedly succeeded`); });