@mjackson/headers
Version:
A toolkit for working with HTTP headers in JavaScript
91 lines (86 loc) • 3.16 kB
text/typescript
import * as assert from 'node:assert/strict';
import { describe, it } from 'node:test';
import { parseParams } from './param-values.ts';
describe('parseParams', () => {
it('correctly parses a string of parameters for a Content-Type header', () => {
assert.deepEqual(parseParams('text/html; charset=utf-8'), [
['text/html', undefined],
['charset', 'utf-8'],
]);
assert.deepEqual(parseParams('application/json'), [['application/json', undefined]]);
assert.deepEqual(parseParams('multipart/form-data; boundary=----WebKitFormBoundaryABC123'), [
['multipart/form-data', undefined],
['boundary', '----WebKitFormBoundaryABC123'],
]);
});
it('correctly parses a string of parameters for a Content-Disposition header', () => {
assert.deepEqual(parseParams('form-data; name=fieldName'), [
['form-data', undefined],
['name', 'fieldName'],
]);
assert.deepEqual(parseParams('form-data; name="fieldName"; filename="filename.jpg"'), [
['form-data', undefined],
['name', 'fieldName'],
['filename', 'filename.jpg'],
]);
assert.deepEqual(
parseParams("attachment; filename=photo.jpg; filename*=UTF-8''%E7%85%A7%E7%89%87.jpg"),
[
['attachment', undefined],
['filename', 'photo.jpg'],
['filename*', "UTF-8''%E7%85%A7%E7%89%87.jpg"],
],
);
assert.deepEqual(
parseParams('attachment; filename="photo.jpg"; filename*="UTF-8\'\'%E7%85%A7%E7%89%87.jpg"'),
[
['attachment', undefined],
['filename', 'photo.jpg'],
['filename*', "UTF-8''%E7%85%A7%E7%89%87.jpg"],
],
);
});
it('correctly parses a string of parameters for a Set-Cookie header', () => {
assert.deepEqual(parseParams('session_id=abc123; Path=/; HttpOnly; Secure'), [
['session_id', 'abc123'],
['Path', '/'],
['HttpOnly', undefined],
['Secure', undefined],
]);
assert.deepEqual(parseParams('user_pref="dark_mode"; Max-Age=31536000; SameSite=Lax'), [
['user_pref', 'dark_mode'],
['Max-Age', '31536000'],
['SameSite', 'Lax'],
]);
assert.deepEqual(
parseParams(
'preferences={"font":"Arial","size":"12pt"}; Expires=Fri, 31 Dec 2023 23:59:59 GMT',
),
[
['preferences', '{"font":"Arial","size":"12pt"}'],
['Expires', 'Fri, 31 Dec 2023 23:59:59 GMT'],
],
);
assert.deepEqual(parseParams('cart_items="[\\"item1\\",\\"item2\\"]"; Path=/cart; HttpOnly'), [
['cart_items', '["item1","item2"]'],
['Path', '/cart'],
['HttpOnly', undefined],
]);
assert.deepEqual(parseParams('account_type="premium,\\"gold\\""; Domain=example.com; Secure'), [
['account_type', 'premium,"gold"'],
['Domain', 'example.com'],
['Secure', undefined],
]);
assert.deepEqual(
parseParams('a2f_token=987654; Path=/2fa; Secure; HttpOnly; SameSite=Strict; Max-Age=300'),
[
['a2f_token', '987654'],
['Path', '/2fa'],
['Secure', undefined],
['HttpOnly', undefined],
['SameSite', 'Strict'],
['Max-Age', '300'],
],
);
});
});