summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-03-15 12:36:30 -0300
committerEuAndreh <eu@euandre.org>2024-03-15 12:36:30 -0300
commit355ddb6f5b1c9ea6eed0aa84251bc821b193e3a7 (patch)
treee2fd5211e7a641800907949ad51e19c256f845c5
parentsrc/hero.mjs: Add comboForLabel() (diff)
downloadpapod-355ddb6f5b1c9ea6eed0aa84251bc821b193e3a7.tar.gz
papod-355ddb6f5b1c9ea6eed0aa84251bc821b193e3a7.tar.xz
src/hero.mjs: Add emitHeaders()
-rw-r--r--src/hero.mjs6
-rw-r--r--tests/js/hero.mjs24
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,