1 extern crate jsonpath_lib as jsonpath;
2 #[macro_use]
3 extern crate serde_json;
4 
5 use common::{read_json, setup};
6 use jsonpath::{Selector, SelectorMut};
7 use jsonpath::JsonValueUpdater;
8 use serde_json::Value;
9 
10 mod common;
11 
12 #[test]
selector_mut()13 fn selector_mut() {
14     setup();
15 
16     let mut selector_mut = SelectorMut::default();
17 
18     let mut nums = Vec::new();
19     let mut json = read_json("./benchmark/example.json");
20     let mut updater = JsonValueUpdater::new(|v| {
21         if let Value::Number(n) = v {
22             nums.push(n.as_f64().unwrap());
23         }
24         Some(Value::String("a".to_string()))
25     });
26     selector_mut
27         .str_path(r#"$.store..price"#)
28         .unwrap()
29         .value(&mut json)
30         .replace_with(&mut updater)
31         .unwrap();
32 
33     assert_eq!(
34         nums,
35         vec![8.95_f64, 12.99_f64, 8.99_f64, 22.99_f64, 19.95_f64]
36     );
37 
38     let mut selector = Selector::default();
39     let result = selector
40         .str_path(r#"$.store..price"#)
41         .unwrap()
42         .value(&json)
43         .select()
44         .unwrap();
45 
46     assert_eq!(
47         vec![
48             &json!("a"),
49             &json!("a"),
50             &json!("a"),
51             &json!("a"),
52             &json!("a")
53         ],
54         result
55     );
56 }
57 
58 // #[test]
59 // fn selector_node_ref() {
60 //     let node = Parser::compile("$.*").unwrap();
61 //     let mut selector = Selector::default();
62 //     selector.compiled_path(&node);
63 //     assert!(std::ptr::eq(selector.node_ref().unwrap(), &node));
64 // }
65 
66 #[test]
selector_delete()67 fn selector_delete() {
68     setup();
69 
70     let mut selector_mut = SelectorMut::default();
71     let mut json = read_json("./benchmark/example.json");
72     let mut updater = JsonValueUpdater::new(|_v| Some(Value::Null));
73     selector_mut
74         .str_path(r#"$.store..price[?(@>13)]"#)
75         .unwrap()
76         .value(&mut json)
77         .replace_with(&mut updater)
78         .unwrap();
79 
80     let mut selector = Selector::default();
81     let result = selector
82         .str_path(r#"$.store..price"#)
83         .unwrap()
84         .value(&json)
85         .select()
86         .unwrap();
87 
88     assert_eq!(
89         result,
90         vec![
91             &json!(8.95),
92             &json!(12.99),
93             &json!(8.99),
94             &Value::Null,
95             &Value::Null
96         ]
97     );
98 }
99 
100 #[test]
selector_remove()101 fn selector_remove() {
102     setup();
103 
104     let mut selector_mut = SelectorMut::default();
105     let mut json = read_json("./benchmark/example.json");
106     let mut updater = JsonValueUpdater::new(|_v| None);
107     selector_mut
108         .str_path(r#"$.store..price[?(@>13)]"#)
109         .unwrap()
110         .value(&mut json)
111         .replace_with(&mut updater)
112         .unwrap();
113 
114     let mut selector = Selector::default();
115     let result = selector
116         .str_path(r#"$.store..price"#)
117         .unwrap()
118         .value(&json)
119         .select()
120         .unwrap();
121 
122     assert_eq!(
123         result,
124         vec![
125             &json!(8.95),
126             &json!(12.99),
127             &json!(8.99)
128         ]
129     );
130 }
131