mirror of
https://github.com/fluencelabs/jsonpath
synced 2025-03-31 14:01:05 +00:00
253 lines
4.9 KiB
Rust
253 lines
4.9 KiB
Rust
#[macro_use]
|
|
extern crate serde_json;
|
|
|
|
use common::{read_json, select_and_then_compare, setup};
|
|
|
|
mod common;
|
|
|
|
#[test]
|
|
fn array_range_default() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$.school.friends[1, 2]",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!([
|
|
{"id": 1, "name": "Vincent Cannon" },
|
|
{"id": 2, "name": "Gray Berry"}
|
|
]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_all() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[ : ]",
|
|
json!(["first", "second"]),
|
|
json!(["first", "second"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_all() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[::]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_only_step_value() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[::2]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["first", "third", "fifth"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_only_start_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[1::]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["second", "third", "forth", "fifth"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_empty_step_value() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[1:2:]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["second"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_empty_end_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[1::2]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["second", "forth"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_by_1() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[0:3:1]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["first", "second", "third"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_step_by_2() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[0:3:2]",
|
|
json!(["first", "second", "third", "forth", "fifth"]),
|
|
json!(["first", "third"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_only_negative_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[-4:]",
|
|
json!(["first", "second", "third"]),
|
|
json!(["first", "second", "third"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_only_end_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$[:4]",
|
|
json!(["first", "second", "third"]),
|
|
json!(["first", "second", "third"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_only_from_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$.school.friends[1: ]",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!([
|
|
{"id": 1, "name": "Vincent Cannon" },
|
|
{"id": 2, "name": "Gray Berry"}
|
|
]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_range_only_nagative_end_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$.school.friends[:-2]",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!([
|
|
{"id": 0, "name": "Millicent Norman"}
|
|
]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$..friends[2].name",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!(["Gray Berry", "Gray Berry"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_all_index() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$..friends[*].name",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!([
|
|
"Vincent Cannon",
|
|
"Gray Berry",
|
|
"Millicent Norman",
|
|
"Vincent Cannon",
|
|
"Gray Berry"
|
|
]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_all_and_then_key() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$['school']['friends'][*].['name']",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!(["Millicent Norman", "Vincent Cannon", "Gray Berry"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_index_and_then_key() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$['school']['friends'][0].['name']",
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!(["Millicent Norman"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn array_multiple_key() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
r#"$.["eyeColor", "name"]"#,
|
|
read_json("./benchmark/data_obj.json"),
|
|
json!(["blue", "Leonor Herman"]),
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn bugs40_bracket_notation_after_recursive_descent() {
|
|
setup();
|
|
|
|
select_and_then_compare(
|
|
"$..[0]",
|
|
json!([
|
|
"first",
|
|
{
|
|
"key": [
|
|
"first nested",
|
|
{
|
|
"more": [
|
|
{"nested": ["deepest", "second"]},
|
|
["more", "values"]
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]),
|
|
json!([
|
|
"first",
|
|
"first nested",
|
|
{
|
|
"nested" : [
|
|
"deepest",
|
|
"second"
|
|
]
|
|
},
|
|
"deepest",
|
|
"more"
|
|
]),
|
|
);
|
|
} |