Viewing is open to everyone. Downloading and starring need a GitHub sign-in. Sign in with GitHub

options.test.mjs

v0.1.0-build.85 Latest Commit ede38f5

Size
4.3 KB
Lines
87
Language
javascript
SHA-256
9ea6d0cc3a1d…
View on GitHub

Sign in with GitHub to download. Each download is recorded with your GitHub username.

1// Pure-JS tests: option validation.
2import test from 'node:test';
3import assert from 'node:assert/strict';
4import {
5 encodeOptions, rasterOptions, svgOptions, pdfOptions, styleSpec, parseColour, telemetryMode, payloadBytes,
6 rgbaFrame, certifyOptions,
7} from '../js/options.mjs';
8
9test('encode options', () => {
10 assert.deepEqual(encodeOptions(), { version: 0, level: 1, layout: 0 });
11 assert.deepEqual(encodeOptions({ version: 31, level: 'H', layout: 'print' }), { version: 31, level: 3, layout: 1 });
12 assert.equal(encodeOptions({ level: 'q' }).level, 2);
13 assert.throws(() => encodeOptions({ version: 32 }), RangeError);
14 assert.throws(() => encodeOptions({ version: 1.5 }), TypeError);
15 assert.throws(() => encodeOptions({ level: 'X' }), RangeError);
16 assert.throws(() => encodeOptions({ layout: 'poster' }), RangeError);
17 assert.throws(() => encodeOptions('M'), TypeError);
18});
19
20test('raster options', () => {
21 const d = rasterOptions();
22 assert.equal(d.size, 512);
23 assert.equal(d.policy, 0);
24 assert.equal(d.transparent, false);
25 assert.equal(d.supersample, 4);
26 assert.equal(d.minFeaturePx, 1);
27 assert.equal(d.materials, true);
28 assert.equal(d.style, null);
29 assert.equal(rasterOptions({ policy: 'hybrid' }).policy, 2);
30 assert.throws(() => rasterOptions({ size: 15 }), RangeError);
31 assert.throws(() => rasterOptions({ size: 16385 }), RangeError);
32 assert.throws(() => rasterOptions({ size: '512' }), TypeError);
33 assert.throws(() => rasterOptions({ policy: 'smooth' }), RangeError);
34 assert.throws(() => rasterOptions({ transparent: 1 }), TypeError);
35 assert.throws(() => rasterOptions({ minFeaturePx: 0 }), RangeError);
36 assert.throws(() => rasterOptions({ supersample: 9 }), RangeError);
37 assert.throws(() => rasterOptions({ logo: { width: 2, height: 2, data: new Uint8Array(3) } }), RangeError);
38});
39
40test('style specs', () => {
41 assert.equal(styleSpec({}), null);
42 assert.deepEqual(styleSpec({ preset: 'concept' }), { preset: 1, rgb: [], num: [], logoHref: null });
43 const s = styleSpec({ style: { background: '#123', ink: [1, 2, 3], inkShade: { r: 4, g: 5, b: 6 }, policy: 'adaptive', modules: 'circle', logoPlate: true } });
44 assert.equal(s.preset, 0);
45 assert.deepEqual(s.rgb, [[0, 0x11, 0x22, 0x33], [1, 0x11, 0x22, 0x33], [2, 1, 2, 3], [3, 4, 5, 6]]);
46 assert.deepEqual(s.num, [[2, 2], [9, 1], [10, 1]]);
47 assert.deepEqual(styleSpec({ style: { accents: ['#ff0000', '#00ff00'] } }).num, [[0, 2]]);
48 assert.throws(() => styleSpec({ style: { colour: '#000' } }), TypeError);
49 assert.throws(() => styleSpec({ style: { policy: 'lenient' } }), RangeError);
50 assert.throws(() => styleSpec({ style: { accents: [1, 2, 3, 4, 5] } }), RangeError);
51 assert.throws(() => styleSpec({ style: { bevel: 2 } }), RangeError);
52 assert.throws(() => styleSpec({ preset: 'neon' }), RangeError);
53 assert.throws(() => parseColour('#12'), RangeError);
54 assert.throws(() => parseColour([0, 0, 256]), RangeError);
55});
56
57test('svg / pdf / certify options', () => {
58 assert.equal(svgOptions().scale, 16);
59 assert.equal(svgOptions({ size: 310 }).scale, 10);
60 assert.throws(() => svgOptions({ scale: 0 }), RangeError);
61 assert.deepEqual(pdfOptions(), { widthPt: 144, transparent: false, style: null });
62 assert.throws(() => pdfOptions({ widthPt: 0 }), RangeError);
63 const c = certifyOptions({ transparent: true, backdrop: { colours: ['#fff', '#000'] } });
64 assert.deepEqual(c.colours, [[255, 255, 255], [0, 0, 0]]);
65 assert.equal(c.pxPerModule, -1);
66 assert.equal(c.trials, 0);
67 assert.throws(() => certifyOptions({ model: { trials: 17 } }), RangeError);
68});
69
70test('telemetry mode validation never falls back to 1', () => {
71 for (const v of [0, 1, 2]) assert.equal(telemetryMode(v), v);
72 for (const v of [3, -1, 1.5, '1', true, null, undefined, NaN, 'off']) {
73 assert.throws(() => telemetryMode(v), RangeError, String(v));
74 }
75});
76
77test('payload bytes and frames', () => {
78 assert.deepEqual([...payloadBytes('é')], [0xc3, 0xa9]);
79 const src = Uint8Array.of(1, 2, 3, 4);
80 const view = payloadBytes(src.subarray(1, 3));
81 assert.deepEqual([...view], [2, 3]);
82 view[0] = 9;
83 assert.equal(src[1], 2, 'payload is copied');
84 assert.throws(() => payloadBytes(42), TypeError);
85 assert.throws(() => rgbaFrame({ width: 2, height: 2, data: [0] }), TypeError);
86 assert.equal(rgbaFrame({ width: 1, height: 1, data: new Uint8ClampedArray(4) }).width, 1);
87});