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

101 lines
4.3 KiB
Plaintext

type Payload { values: List<Int>, label: Text, first: Int, second: Int }
type Floating { values: List<Float?>, optional: Float? }
type Failure { error First, error Second }
encode(values: List<Int>, label: Text) (answer: Text) {
payload = Payload { second = 2, label = label, values = values, first = 1 }
answer = dever.json.toText(dever.json.encode(payload))
}
projected(source: Payload) (answer: Text) {
payload = Payload { values = source.values, label = source.label, first = source.first, second = source.second }
answer = dever.json.toText(dever.json.encode(payload))
}
overwritten(values: List<Int>) (answer: Text) {
payload = Payload { values = values, label = "old", first = 1, second = 2 }
before = dever.json.toText(dever.json.encode(payload))
payload = Payload { values = [9], label = "new", first = 3, second = 2 }
payload.first = 4
answer = before + dever.json.toText(dever.json.encode(payload))
}
reused(values: List<Int>) (answer: Text) {
payload = Payload { values = values, label = "old", first = 1, second = 2 }
before = dever.json.toText(dever.json.encode(payload))
payload.first = 4
answer = before + dever.json.toText(dever.json.encode(payload))
}
intervening(source: Payload) (answer: Text) {
payload = Payload { values = source.values, label = source.label, first = source.first, second = source.second }
source.values = [9]
answer = dever.json.toText(dever.json.encode(payload))
}
escaping(values: List<Int>) (answer: Payload) {
payload = Payload { values = values, label = "old", first = 1, second = 2 }
answer = payload
}
finite(values: List<Float?>, optional: Float?) (answer: Json) {
payload = Floating { values = values, optional = optional }
answer = dever.json.encode(payload)
}
failed(value: dever.json.JsonResult.Parsed(document)) (answer: Bool) recover("检查视图有限值") { answer = false }
failed(value: dever.json.JsonResult.Failed(message)) (answer: Bool) recover("检查视图有限值") { answer = message == "non-finite Float cannot be encoded" }
firstFail(stop: true) (answer: Int) { fail(Failure.First) }
firstFail(stop: false) (answer: Int) { answer = 1 }
secondFail(stop: true) (answer: Int) { fail(Failure.Second) }
secondFail(stop: false) (answer: Int) { answer = 2 }
failureOrder(values: List<Int>, stop: Bool) (answer: Text) {
payload = Payload { values = values, second = secondFail(stop), first = firstFail(stop), label = "old" }
answer = dever.json.toText(dever.json.encode(payload))
}
faultEntry() (answer: Int) {
values = [1, 2, 3]
text = failureOrder(values, true)
answer = length(text) + sum(values)
}
verify() (answer: Bool) {
values = [1, 2, 3]
label = "old"
expected = "{\"values\":[1,2,3],\"label\":\"old\",\"first\":1,\"second\":2}"
source = Payload { values = values, label = label, first = 1, second = 2 }
answer = encode(values, label) == expected and projected(source) == expected
answer = answer and overwritten(values) == expected + "{\"values\":[9],\"label\":\"new\",\"first\":4,\"second\":2}"
answer = answer and reused(values) == expected + "{\"values\":[1,2,3],\"label\":\"old\",\"first\":4,\"second\":2}"
answer = answer and intervening(source) == expected and escaping(values) == source
answer = answer and failureOrder(values, false) == expected
answer = answer and sum(values) == 6 and label == "old" and sum(source.values) == 6
numbers = [float.parse("NaN")]
answer = answer and failed(result(finite(numbers, null))) and length(numbers) == 1
finite_values = [float.parse("1")]
answer = answer and failed(result(finite(finite_values, float.parse("inf")))) and length(finite_values) == 1
answer = answer and failed(result(finite([float.parse("-inf")], null)))
answer = answer and encode([1, 2, 3], "old") == expected
answer = answer and fragmentsVerify()
}
type Fragment { label: Text, value: Json }
fragments(values: List<Fragment?>) (answer: Text) {
answer = dever.json.toText(dever.json.encode(values))
}
fragmentsVerify() (answer: Bool) {
value = dever.json.fromText(" \n{\"a\":[1e9999,-0]}\t ")
row = Fragment { label = "雪\"", value = value }
expected = "[{\"label\":\"雪\\\"\",\"value\":{\"a\":[1e9999,-0]}},null]"
answer = fragments([row, null]) == expected and fragments([row, null]) == expected
answer = answer and dever.json.toText(value) == " \n{\"a\":[1e9999,-0]}\t "
}