diff options
author | EuAndreh <eu@euandre.org> | 2024-03-15 12:36:30 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-03-15 12:36:30 -0300 |
commit | 355ddb6f5b1c9ea6eed0aa84251bc821b193e3a7 (patch) | |
tree | e2fd5211e7a641800907949ad51e19c256f845c5 | |
parent | src/hero.mjs: Add comboForLabel() (diff) | |
download | papod-355ddb6f5b1c9ea6eed0aa84251bc821b193e3a7.tar.gz papod-355ddb6f5b1c9ea6eed0aa84251bc821b193e3a7.tar.xz |
src/hero.mjs: Add emitHeaders()
-rw-r--r-- | src/hero.mjs | 6 | ||||
-rw-r--r-- | tests/js/hero.mjs | 24 |
2 files changed, 30 insertions, 0 deletions
diff --git a/src/hero.mjs b/src/hero.mjs index 6838473..a9397ef 100644 --- a/src/hero.mjs +++ b/src/hero.mjs @@ -279,6 +279,12 @@ export const handleRequest = async (table, reqHandle) => { return await handlerFn(request); }; +export const emitHeaders = obj => + Object.keys(obj) + .sort(u.strSortFn) + .map(name => `${name}: ${obj[name]}`) + .join("\r\n"); + export const makeRequestListener = table => async (req, res) => { const { status, headers, body } = await handleRequest(table, req); res.writeHead(status, headers); diff --git a/tests/js/hero.mjs b/tests/js/hero.mjs index 171e01f..d57152f 100644 --- a/tests/js/hero.mjs +++ b/tests/js/hero.mjs @@ -31,6 +31,7 @@ import { handle404, make404Handler, handleRequest, + emitHeaders, makeRequestListener, actionsFn, lineHandlerFn, @@ -1142,6 +1143,28 @@ const test_handleRequest = async t => { }); }; +const test_emitHeaders = async t => { + t.start("emitHeaders()"); + + await t.test("empty values", () => { + assert.equal(emitHeaders({}), ""); + assert.equal(emitHeaders({ "": "" }), ": "); + assert.equal(emitHeaders({ " ": " " }), " : "); + assert.equal(emitHeaders({ "_": "_" }), "_: _"); + }); + + await t.test("newlines are forwarded", () => { + assert.equal(emitHeaders({"\na\n": "\nb\n"}), "\na\n: \nb\n"); + }); + + await t.test("keys are always sorted", () => { + assert.equal( + emitHeaders({ "a": "one", "Z": "two" }), + "a: one\r\nZ: two", + ); + }); +}; + const test_makeRequestListener = async t => { t.start("makeRequestListener()"); @@ -1834,6 +1857,7 @@ await runner.runTests([ test_extractQueryParams, test_make404Handler, test_handleRequest, + test_emitHeaders, test_makeRequestListener, test_actionsFn, test_lineHandlerFn, |