/ duper-js-node / tests / duper_value.test.ts
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  });