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