refactor: extract typed frontend formatters

This commit is contained in:
sjg
2026-08-01 16:42:54 +02:00
parent 40accb9697
commit ab3fe4bbb7
4 changed files with 228 additions and 214 deletions
@@ -0,0 +1,37 @@
// SPDX-FileCopyrightText: 2026 Stan Grams <sjg@haxx.space>
//
// SPDX-License-Identifier: GPL-2.0-or-later
import assert from "node:assert/strict";
import test from "node:test";
import vm from "node:vm";
import { build } from "esbuild";
async function loadFormats() {
const result = await build({
entryPoints: [new URL("../src/core/format.ts", import.meta.url).pathname],
bundle: true,
format: "cjs",
platform: "browser",
target: "es2022",
write: false,
});
const module = { exports: {} };
vm.runInNewContext(result.outputFiles[0].text, { module, exports: module.exports });
return module.exports;
}
test("frequency parsing respects explicit units and WFM shorthand", async () => {
const { parseFrequencyInput } = await loadFormats();
assert.equal(parseFrequencyInput("145.500 MHz", 1000, "FM"), 145_500_000);
assert.equal(parseFrequencyInput("99.5", 100_000, "WFM"), 99_500_000);
assert.equal(parseFrequencyInput("995", 100_000, "WFM"), 99_500_000);
assert.equal(parseFrequencyInput("not a frequency", 1000, "USB"), null);
});
test("frequency and byte formatters handle display boundaries", async () => {
const { formatByteSize, formatFrequencyForHumans, formatWavelength } = await loadFormats();
assert.equal(formatFrequencyForHumans(145_500_000), "145.500 MHz");
assert.equal(formatByteSize(1536), "1.5 KB");
assert.equal(formatWavelength(299_792_458), "1 m");
});