duper_value.test.ts
1 import { DuperValue } from ".."; 2 3 describe("DuperValue", () => { 4 it("casts to types provided by user", () => { 5 expect(DuperValue.Object({}).type).toEqual("Object"); 6 expect(DuperValue.Array([]).type).toEqual("Array"); 7 expect(DuperValue.Tuple([]).type).toEqual("Tuple"); 8 expect(DuperValue.String("").type).toEqual("String"); 9 expect(DuperValue.Bytes(new Uint8Array(0)).type).toEqual("Bytes"); 10 expect(DuperValue.Bytes([0x61, 0x62, 0x63]).type).toEqual("Bytes"); 11 expect(DuperValue.Bytes("Hello world!").type).toEqual("Bytes"); 12 if ("Temporal" in globalThis) { 13 expect( 14 DuperValue.Temporal((globalThis as any).Temporal.Now.instant()).type, 15 ).toEqual("Temporal"); 16 } 17 expect(DuperValue.Temporal("2025-11-08").type).toEqual("Temporal"); 18 expect(DuperValue.Float(34).type).toEqual("Float"); 19 expect(DuperValue.Integer(34).type).toEqual("Integer"); 20 expect(DuperValue.Integer(35n).type).toEqual("Integer"); 21 expect(DuperValue.Boolean(true).type).toEqual("Boolean"); 22 expect(DuperValue.Null(null).type).toEqual("Null"); 23 expect(DuperValue.Null().type).toEqual("Null"); 24 }); 25 26 it("raises error for invalid values", () => { 27 expect(() => DuperValue.Object(1234 as any)).toThrow(); 28 expect(() => DuperValue.Array({} as any)).toThrow(); 29 expect(() => DuperValue.String(new Uint8Array(0) as any)).toThrow(); 30 expect(() => DuperValue.Bytes(0xdeadbeef as any)).toThrow(); 31 expect(() => DuperValue.Temporal(new Date())).toThrow(); 32 expect(() => DuperValue.Float("fish" as any)).toThrow(); 33 expect(() => DuperValue.Integer("35n" as any)).toThrow(); 34 expect(() => DuperValue.Boolean("true" as any)).toThrow(); 35 }); 36 });