diff options
Diffstat (limited to 'ui/lib/swatch/json.test.js')
| -rw-r--r-- | ui/lib/swatch/json.test.js | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/ui/lib/swatch/json.test.js b/ui/lib/swatch/json.test.js new file mode 100644 index 0000000..e01017d --- /dev/null +++ b/ui/lib/swatch/json.test.js @@ -0,0 +1,36 @@ +import * as json from './json.js'; +import { expect, describe, it } from 'vitest'; + +describe('encode', async () => { + it('converts atoms', async () => { + expect(json.encode(0)).toStrictEqual('0'); + expect(json.encode('hello')).toStrictEqual('"hello"'); + expect(json.encode(null)).toStrictEqual('null'); + expect(json.encode(true)).toStrictEqual('true'); + }); + + it('converts lists with indentation', async () => { + expect(json.encode([])).toStrictEqual('[]'); + expect(json.encode(['hello', 'world'])).toStrictEqual('[\n "hello",\n "world"\n]'); + }); + + it('converts objects with indentation', async () => { + expect(json.encode({})).toStrictEqual('{}'); + expect(json.encode({ field: 'value' })).toStrictEqual('{\n "field": "value"\n}'); + }); +}); + +describe('decode', async () => { + it('converts valid json values', async () => { + expect(json.decode('0')).toStrictEqual(0); + expect(json.decode('null')).toStrictEqual(null); + expect(json.decode('{}')).toStrictEqual({}); + expect(json.decode('[1, 2, "3"]')).toStrictEqual([1, 2, '3']); + }); + + it('converts invalid json to `undefined`', async () => { + expect(json.decode('')).toBeUndefined(); + expect(json.decode('{"foo":')).toBeUndefined(); + expect(json.decode('arbitrary nonsense')).toBeUndefined(); + }); +}); |
