1个不稳定版本
0.5.1 | 2023年7月2日 |
---|
#1404 在 文本处理
36KB
759 行
为rsonpath
提供声明式TOML驱动的测试用例生成。
该框架的全部卖点在于我们可以通过编写简单的TOML配置文件来声明完整的查询引擎测试文档和查询。
[input]
description = "short json with objects and lists, given as an example on jsonpath com"
is_compressed = false
[input.source]
json_string = '''
{
"firstName": "John",
"lastName": "doe",
"age": 26,
"address": {
"streetAddress": "naist street",
"city": "Nara",
"postalCode": "630-0192"
},
"phoneNumbers": [
{
"type": "iPhone",
"number": "0123-4567-8888"
},
{
"type": "home",
"number": "0123-4567-8910"
}
]
}
'''
[[queries]]
description = "select exact path with name and index selectors"
query = "$.phoneNumbers[0].type"
[queries.results]
count = 1
bytes = [239]
nodes = ['"iPhone"']
[[queries]]
description = "descendant search for 'number'"
query = "$..number"
[queries.results]
count = 2
bytes = [271, 359]
nodes = ['"0123-4567-8888"', '"0123-4567-8910"']
[[queries]]
description = "select first number directly"
query = "$.phoneNumbers[0]"
[queries.results]
count = 1
bytes = [217]
nodes = ['''{
"type": "iPhone",
"number": "0123-4567-8888"
}''']
工作原理
此库提供了一个公共入口点,即generate_tests
,它接受一个包含源TOML配置的目录路径以及一个辅助JSON输出目录路径。
- 它读取所有TOML文件并将它们解析为在
model
中声明的结构。 - 它使用
compression
模块创建所有声称为非压缩的文档的压缩版本(input.is_compressed
为false)。这将创建一个具有相同名称的新TOML文件,位于compressed
子目录中,其输入源被处理为精简后的JSON。 - 具有内联
input.source
的每个TOML文档都会创建一个包含给定输入的JSON文件。这样做有两个原因:一是测试MmapInput
需要一个实际的文件;二是将这些字符串内联放入生成的测试.rs
文件会使它变得过大。 - 为每个声明的查询为每个文档生成测试用例,使用两个引擎、所有声明的结果类型以及所有支持的输入模式。这由
gen
驱动。
大输入
input.source
属性可以包含作为json_string
属性的JSON字符串,也可以包含实际JSON文件在large_file
属性中的相对路径。这用于twitter和wikidata文件,因为它们需要多个兆字节,并使TOML文件难以编辑。
依赖项
~1.2–9MB
~75K SLoC