-
Notifications
You must be signed in to change notification settings - Fork 1
/
schema.test.ts
100 lines (90 loc) · 2.46 KB
/
schema.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import * as fs from "node:fs"
import test from "ava"
import {
Schema,
types,
Instance,
values,
parseSchema,
encodeSchema,
decodeSchema,
decodeInstance,
encodeInstance,
} from "../src/index.js"
import { schemaSchema } from "../src/schema/schemaSchema.js"
import { mappingSchema } from "../src/mapping/mappingSchema.js"
const schema = new Schema({
"http://example.com/foo": types.product({
"http://example.com/foo/1": types.uri(),
}),
"http://example.com/bar": types.coproduct({
"http://example.com/bar/1": types.string,
"http://example.com/bar/2": types.product({
"http://example.com/bar/2/1": types.uri(),
"http://example.com/bar/2/2": types.reference("http://example.com/foo"),
}),
}),
})
const instance = new Instance(schema, {
"http://example.com/foo": [
{
id: 0,
value: values.product({
"http://example.com/foo/1": values.uri("http://wow.neat.cool.com"),
}),
},
],
"http://example.com/bar": [
{
id: 0,
value: values.coproduct(
"http://example.com/bar/1",
values.literal("hello world")
),
},
{
id: 1,
value: values.coproduct(
"http://example.com/bar/2",
values.product({
"http://example.com/bar/2/1": values.uri("http://another-uri.net"),
"http://example.com/bar/2/2": values.reference(0),
})
),
},
],
})
test("round-trip instance to binary and back", (t) => {
const data = encodeInstance(instance)
const i = decodeInstance(schema, data)
t.true(i.isEqualTo(instance))
t.true(instance.isEqualTo(i))
})
test("round-trip schema to binary and back", (t) => {
const data = encodeSchema(schema)
const s = decodeSchema(data)
t.true(s.isEqualTo(schema))
t.true(schema.isEqualTo(s))
})
test("validate schema schema", (t) => {
const input = fs.readFileSync("test/schema-schema.tasl", "utf-8")
const schema = parseSchema(input)
t.deepEqual(schema.toJSON(), schemaSchema.toJSON())
})
test("round-trip schema schema to binary and back", (t) => {
const data = encodeSchema(schemaSchema)
const s = decodeSchema(data)
t.true(s.isEqualTo(schemaSchema))
t.true(schemaSchema.isEqualTo(s))
})
test("validate mapping schema", (t) => {
const input = fs.readFileSync("test/mapping-schema.tasl", "utf-8")
const schema = parseSchema(input)
t.deepEqual(schema.toJSON(), mappingSchema.toJSON())
})
test("round-trip mapping schema to binary and back", (t) => {
const data = encodeSchema(mappingSchema)
const s = decodeSchema(data)
t.true(s.isEqualTo(mappingSchema))
t.true(mappingSchema.isEqualTo(s))
})