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