/ proof-of-concept / cymsimweb
Sign in
proof-of-concept / cymsimweb
cymsimweb / tests / config.test.ts
53 lines · 2.2 KBBlameHistoryRaw
1import test from "node:test";
2import assert from "node:assert/strict";
3import { configToYaml, normalizeConfig, parseConfigYaml, validateConfig } from "../src/config/yaml.ts";
4import { defaultConfig } from "../src/config/schema.ts";
5import { PRESETS } from "../src/config/presets.ts";
6import { fixture } from "./helpers.ts";
8test("presets parse without issues", () => {
9 for (const p of PRESETS) {
10 const { config, issues } = parseConfigYaml(p.yaml);
11 assert.ok(config, p.id);
12 assert.deepEqual(issues, [], `${p.id}: ${JSON.stringify(issues)}`);
13 }
14});
16test("round trip through YAML preserves the configuration", () => {
17 const { config } = parseConfigYaml(PRESETS[2].yaml);
18 const back = parseConfigYaml(configToYaml(config!));
19 assert.deepEqual(back.config, config);
20 assert.deepEqual(back.issues, []);
21});
23test("Python fixture config normalizes to itself", () => {
24 const { config, issues } = normalizeConfig(fixture.config);
25 assert.deepEqual(issues, []);
26 assert.deepEqual(config, fixture.config);
27});
29test("partial documents take defaults", () => {
30 const { config, issues } = parseConfigYaml("hits:\n - time: 0.1\n exciter: {kind: stick}\nnumerics:\n duration: 0.5\n");
31 assert.deepEqual(issues, []);
32 assert.equal(config!.numerics.duration, 0.5);
33 assert.equal(config!.material.E, 1.1e11);
34 assert.equal(config!.hits[0].exciter.kind, "stick");
35 assert.equal(config!.hits[0].time, 0.1);
36});
38test("unknown keys, wrong types and bad values are reported", () => {
39 let r = parseConfigYaml("material:\n youngs: 1\n E: abc\n");
40 assert.ok(r.issues.some((i) => i.path === "material.youngs" && i.message === "unknown field"));
41 assert.ok(r.issues.some((i) => i.path === "material.E"));
42 r = parseConfigYaml("hits:\n - exciter: {kind: hammer}\n");
43 assert.ok(r.issues.some((i) => i.path === "hits[0].exciter.kind"));
44 r = parseConfigYaml("bogus: 1\n");
45 assert.ok(r.issues.some((i) => i.path === "bogus"));
46 r = parseConfigYaml("material: [1, 2\n");
47 assert.equal(r.config, null);
48 const cfg = defaultConfig();
49 cfg.hits[0].r = 0.23;
50 assert.ok(validateConfig(cfg).some((i) => i.path === "hits[0].r"));
51 cfg.hits = [];
52 assert.ok(validateConfig(cfg).some((i) => i.path === "hits"));
53});
↑↓ move↵openescclose