mirror of
https://github.com/gorules/zen.git
synced 2026-10-04 16:02:18 +00:00
* feat: expression static analysis * fix: cargo fmt * fix: python workflow * fix: python workflow * fix: python workflow * fix: ignore miri test bound by clock * fix: memory leaks
155 lines
3.4 KiB
TOML
155 lines
3.4 KiB
TOML
# Reference span tracking for rename refactoring
|
|
# path[i] corresponds to spans[i] — path for matching, spans for replacement
|
|
|
|
[[test]]
|
|
name = "simple identifier reference"
|
|
expression = "x"
|
|
input = '{"x": 1}'
|
|
references = [
|
|
{ path = ["x"], spans = [[0, 1]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "member chain reference"
|
|
expression = "customer.firstName"
|
|
input = '{"customer": {"firstName": "John"}}'
|
|
references = [
|
|
{ path = ["customer", "firstName"], spans = [[0, 8], [9, 18]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "two member references in binary"
|
|
expression = "customer.firstName + customer.lastName"
|
|
input = '{"customer": {"firstName": "John", "lastName": "Doe"}}'
|
|
references = [
|
|
{ path = ["customer", "firstName"], spans = [[0, 8], [9, 18]] },
|
|
{ path = ["customer", "lastName"], spans = [[21, 29], [30, 38]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "deep member chain"
|
|
expression = "a.b.c.d"
|
|
input = '{"a": {"b": {"c": {"d": 1}}}}'
|
|
references = [
|
|
{ path = ["a", "b", "c", "d"], spans = [[0, 1], [2, 3], [4, 5], [6, 7]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "iteration collection reference"
|
|
expression = "map(items as item, item.price)"
|
|
input = '{"items": [{"price": 10}]}'
|
|
references = [
|
|
{ path = ["items"], spans = [[4, 9]] },
|
|
{ path = ["item", "price"], spans = [[19, 23], [24, 29]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "iteration with external ref"
|
|
expression = "filter(items as item, item.price > minPrice)"
|
|
input = '{"items": [{"price": 5}], "minPrice": 3}'
|
|
references = [
|
|
{ path = ["items"], spans = [[7, 12]] },
|
|
{ path = ["item", "price"], spans = [[22, 26], [27, 32]] },
|
|
{ path = ["minPrice"], spans = [[35, 43]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "nested iteration references"
|
|
expression = "map(groups as group, map(group.items as item, item.total))"
|
|
input = '{"groups": [{"items": [{"total": 1}]}]}'
|
|
references = [
|
|
{ path = ["groups"], spans = [[4, 10]] },
|
|
{ path = ["group", "items"], spans = [[25, 30], [31, 36]] },
|
|
{ path = ["item", "total"], spans = [[46, 50], [51, 56]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "assignment does not produce references for writes"
|
|
expression = "customer.fullName = customer.firstName + customer.lastName"
|
|
input = '{"customer": {"firstName": "John", "lastName": "Doe"}}'
|
|
references = [
|
|
{ path = ["customer", "firstName"], spans = [[20, 28], [29, 38]] },
|
|
{ path = ["customer", "lastName"], spans = [[41, 49], [50, 58]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "locals do not produce references"
|
|
expression = "x = a + b; x * 2"
|
|
input = '{"a": 1, "b": 2}'
|
|
references = [
|
|
{ path = ["a"], spans = [[4, 5]] },
|
|
{ path = ["b"], spans = [[8, 9]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "conditional references"
|
|
expression = "active ? price : discount"
|
|
input = '{"active": true, "price": 100, "discount": 10}'
|
|
references = [
|
|
{ path = ["active"], spans = [[0, 6]] },
|
|
{ path = ["price"], spans = [[9, 14]] },
|
|
{ path = ["discount"], spans = [[17, 25]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "no references for literals"
|
|
expression = "1 + 2 * 3"
|
|
references = []
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|
|
|
|
[[test]]
|
|
name = "template string references"
|
|
expression = '`${first} ${last}`'
|
|
input = '{"first": "John", "last": "Doe"}'
|
|
references = [
|
|
{ path = ["first"], spans = [[3, 8]] },
|
|
{ path = ["last"], spans = [[12, 16]] },
|
|
]
|
|
|
|
[test.loose]
|
|
|
|
[test.strict]
|