136 lines
7.4 KiB
Plaintext
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)))
|
|
}
|