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::{Parser, Selector, SelectorMut};
7 use serde_json::Value;
8 
9 mod common;
10 
11 #[test]
selector_mut()12 fn selector_mut() {
13     setup();
14 
15     let mut selector_mut = SelectorMut::default();
16 
17     let mut nums = Vec::new();
18     let result = selector_mut
19         .str_path(r#"$.store..price"#)
20         .unwrap()
21         .value(read_json("./benchmark/example.json"))
22         .replace_with(&mut |v| {
23             if let Value::Number(n) = v {
24                 nums.push(n.as_f64().unwrap());
25             }
26             Some(Value::String("a".to_string()))
27         })
28         .unwrap()
29         .take()
30         .unwrap();
31 
32     assert_eq!(
33         nums,
34         vec![8.95_f64, 12.99_f64, 8.99_f64, 22.99_f64, 19.95_f64]
35     );
36 
37     let mut selector = Selector::default();
38     let result = selector
39         .str_path(r#"$.store..price"#)
40         .unwrap()
41         .value(&result)
42         .select()
43         .unwrap();
44 
45     assert_eq!(
46         vec![
47             &json!("a"),
48             &json!("a"),
49             &json!("a"),
50             &json!("a"),
51             &json!("a")
52         ],
53         result
54     );
55 }
56 
57 #[test]
selector_node_ref()58 fn selector_node_ref() {
59     let node = Parser::compile("$.*").unwrap();
60     let mut selector = Selector::default();
61     selector.compiled_path(&node);
62     assert!(std::ptr::eq(selector.node_ref().unwrap(), &node));
63 }
64 
65 #[test]
selector_delete()66 fn selector_delete() {
67     setup();
68 
69     let mut selector_mut = SelectorMut::default();
70 
71     let result = selector_mut
72         .str_path(r#"$.store..price[?(@>13)]"#)
73         .unwrap()
74         .value(read_json("./benchmark/example.json"))
75         .delete()
76         .unwrap()
77         .take()
78         .unwrap();
79 
80     let mut selector = Selector::default();
81     let result = selector
82         .str_path(r#"$.store..price"#)
83         .unwrap()
84         .value(&result)
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 
106     let result = selector_mut
107         .str_path(r#"$.store..price[?(@>13)]"#)
108         .unwrap()
109         .value(read_json("./benchmark/example.json"))
110         .remove()
111         .unwrap()
112         .take()
113         .unwrap();
114 
115     let mut selector = Selector::default();
116     let result = selector
117         .str_path(r#"$.store..price"#)
118         .unwrap()
119         .value(&result)
120         .select()
121         .unwrap();
122 
123     assert_eq!(
124         result,
125         vec![
126             &json!(8.95),
127             &json!(12.99),
128             &json!(8.99)
129         ]
130     );
131 }
132