Files
core/test/rust/fixtures/json.dever
T
2026-11-03 03:32:07 +00:00

136 lines
7.4 KiB
Plaintext

type Failure {
error Missing
}
readNumber(value: Json?) (number: Int) {
number = selectNumber(value)
}
selectNumber(value: null) (number: Int) {
fail(Failure.Missing)
}
selectNumber(value: Json) (number: Int) {
number = dever.json.asInteger(value)
}
verify() (answer: Bool) {
value = dever.json.fromText("{\"count\":42,\"ratio\":1e+03,\"name\":\"dever\"}")
encoded = dever.json.encode(value)
snapshot = dever.json.toText(value)
count = readNumber(dever.json.propertyValue(value, "count"))
answer = count == 42 and snapshot == dever.json.toText(encoded) and snapshot == "{\"count\":42,\"ratio\":1e+03,\"name\":\"dever\"}"
raw = dever.json.fromText(" 1e9999 ")
answer = answer and dever.json.toText(dever.json.encode(raw)) == " 1e9999 "
}
documentVerify() (answer: Bool) {
document = dever.json.parse("{\"count\":42,\"name\":\"dever\"}")
count = dever.json.property(document, document.root, "count")
values = dever.json.parse("[1,2]")
first = dever.json.element(values, values.root, 0)
empty = dever.json.parse("{}")
nested = dever.json.parse("{\"\":[{},[]]}")
answer = count == 0 and first == 0 and dever.json.stringify(document) == "{\"count\":42,\"name\":\"dever\"}" and dever.json.stringify(empty) == "{}" and dever.json.property(empty, empty.root, "missing") == null and dever.json.stringify(nested) == "{\"\":[{},[]]}"
}
invalid() (answer: Int) {
value = dever.json.fromText("{")
answer = 1
}
type Payload {
amount: Decimal
id: Id
names: List<Text>
optional: Int?
}
encodeVerify() (answer: Bool) {
payload = Payload { amount = 12.5, id = dever.id.fromText("item"), names = ["雪"], optional = null }
encoded = dever.json.toText(dever.json.encode(payload))
answer = encoded == "{\"amount\":\"12.5\",\"id\":\"item\",\"names\":[\"雪\"],\"optional\":null}"
answer = answer and dever.json.toText(dever.json.encode([true, false])) == "[true,false]"
answer = answer and dever.json.toText(dever.json.encode(payload.optional)) == "null"
answer = answer and dever.json.toText(dever.json.encode(42)) == "42"
answer = answer and dever.json.toText(dever.json.encode(true)) == "true"
answer = answer and dever.json.toText(dever.json.encode("雪\n\"")) == "\"雪\\n\\\"\""
answer = answer and dever.json.toText(dever.json.encode(float.parse("-0.0"))) == "-0.0"
object = dever.json.object({"a" = dever.json.integer(1), "b" = dever.json.array([dever.json.boolean(true), dever.json.string("雪"), dever.json.nullValue()])})
answer = answer and dever.json.toText(object) == "{\"a\":1,\"b\":[true,\"雪\",null]}"
}
manualVerify() (answer: Bool) {
document = dever.json.value.Document {
root = 2
nodes = [
dever.json.value.Value.Null,
dever.json.value.Value.Number("1e9999"),
dever.json.value.Value.Object({"answer" = 1})
]
}
answer = dever.json.stringify(document) == "{\"answer\":1e9999}"
answer = answer and dever.json.node(document, 1) == dever.json.value.Value.Number("1e9999")
answer = answer and dever.json.node(document, 0) == dever.json.value.Value.Null
answer = answer and dever.json.node(document, 2) == dever.json.value.Value.Object({"answer" = 1})
answer = answer and dever.json.node(document, -1) == null and dever.json.property(document, 0, "answer") == null
document.root = 0
answer = answer and dever.json.stringify(document) == "null" and length(document.nodes) == 3
empty = dever.json.value.Value.Object({})
filled = dever.json.value.Value.Object({"first" = 1, "second" = 2})
answer = answer and objectSize(empty) == 0 and objectSize(filled) == 2
copied = put(objectMembers(filled), "third", 3)
answer = answer and length(copied) == 3 and objectSize(filled) == 2
answer = answer and length(objectMembers(empty)) == 0
answer = answer and objectSize(dever.json.value.Value.Array([0, 1])) == 0
}
objectSize(value: dever.json.value.Value.Object(members)) (answer: Int) { answer = length(members) }
objectSize(value: dever.json.value.Value.Null) (answer: Int) { answer = 0 }
objectSize(value: dever.json.value.Value.Boolean(flag)) (answer: Int) { answer = 0 }
objectSize(value: dever.json.value.Value.Number(raw)) (answer: Int) { answer = 0 }
objectSize(value: dever.json.value.Value.String(text)) (answer: Int) { answer = 0 }
objectSize(value: dever.json.value.Value.Array(children)) (answer: Int) { answer = 0 }
objectMembers(value: dever.json.value.Value.Object(members)) (answer: Map<Text, Int>) { answer = members }
objectMembers(value: dever.json.value.Value.Null) (answer: Map<Text, Int>) { answer = {} }
objectMembers(value: dever.json.value.Value.Boolean(flag)) (answer: Map<Text, Int>) { answer = {} }
objectMembers(value: dever.json.value.Value.Number(raw)) (answer: Map<Text, Int>) { answer = {} }
objectMembers(value: dever.json.value.Value.String(text)) (answer: Map<Text, Int>) { answer = {} }
objectMembers(value: dever.json.value.Value.Array(children)) (answer: Map<Text, Int>) { answer = {} }
nativeValueVerify() (answer: Bool) {
empty = dever.json.value.Value.Object({})
value = dever.json.value.Value.Object({"answer" = 1})
answer = objectSize(empty) == 0 and objectSize(value) == 1
answer = answer and objectMembers(value) == {"answer" = 1}
answer = answer and length(objectMembers(dever.json.value.Value.Null)) == 0
}
propertyFailed(result: dever.json.PropertyResult.Found(value)) (answer: Bool) recover("测试非对象失败") { answer = false }
propertyFailed(result: dever.json.PropertyResult.Failed(message)) (answer: Bool) recover("测试非对象失败") { answer = length(message) > 0 }
writeFailed(result: dever.json.value.WriteResult.Written(text)) (answer: Bool) recover("检查手工文档错误") { answer = false }
writeFailed(result: dever.json.value.WriteResult.Failed(node, message)) (answer: Bool) recover("检查手工文档错误") { answer = node == 1 and length(message) > 0 }
encodeFailed(result: dever.json.JsonResult.Parsed(value)) (answer: Bool) recover("检查非有限数编码错误") { answer = false }
encodeFailed(result: dever.json.JsonResult.Failed(message)) (answer: Bool) recover("检查非有限数编码错误") { answer = length(message) > 0 }
failureVerify() (answer: Bool) {
value = dever.json.fromText("42")
document = dever.json.value.Document { root = 1, nodes = [dever.json.value.Value.Null, dever.json.value.Value.Array([1])] }
property = propertyFailed(result(dever.json.propertyValue(value, "name")))
write = writeFailed(result(dever.json.stringify(document)))
encode = encodeFailed(result(dever.json.encode(float.parse("NaN"))))
deepest = dever.json.fromText("[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]")
array = encodeFailed(result(dever.json.array([deepest])))
answer = property and write and encode and array
missing = dever.json.value.Document { root = 1, nodes = [dever.json.value.Value.Null] }
negative = dever.json.value.Document { root = 1, nodes = [dever.json.value.Value.Null, dever.json.value.Value.Array([-1])] }
large = dever.json.value.Document { root = 1, nodes = [dever.json.value.Value.Null, dever.json.value.Value.Array([4294967296])] }
answer = answer and writeFailed(result(dever.json.stringify(missing)))
answer = answer and writeFailed(result(dever.json.stringify(negative)))
answer = answer and writeFailed(result(dever.json.stringify(large)))
invalid = dever.json.value.Document { root = 1, nodes = [dever.json.value.Value.Null, dever.json.value.Value.Number("invalid")] }
answer = answer and writeFailed(result(dever.json.stringify(invalid)))
}