@@ -6,7 +6,7 @@ use std::sync::Arc;
66use jiter:: { JsonValue , LazyIndexMap } ;
77use smallvec:: smallvec;
88
9- use batson:: get:: { contains, get_bool, get_int, get_length, get_str} ;
9+ use batson:: get:: { contains, get_batson , get_bool, get_int, get_length, get_str} ;
1010use batson:: { batson_to_json_string, compare_json_values, decode_to_json_value, encode_from_json} ;
1111
1212#[ test]
@@ -187,6 +187,73 @@ fn test_get_length() {
187187 assert_eq ! ( get_length( & bytes, & [ "foo" . into( ) , 1 . into( ) ] ) . unwrap( ) . unwrap( ) , 2 ) ;
188188}
189189
190+ #[ test]
191+ fn test_get_batson ( ) {
192+ let bytes = json_to_batson ( br#"{"foo": [null, {"a": 1, "b": 22}, 4294967299]}"# ) ;
193+
194+ assert_eq ! ( get_batson( & bytes, & [ ] ) . unwrap( ) . unwrap( ) , bytes) ;
195+
196+ let null_bytes = get_batson ( & bytes, & [ "foo" . into ( ) , 0 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
197+ assert_eq ! ( null_bytes, [ 0u8 ] . as_ref( ) ) ;
198+ assert_eq ! ( batson_to_json_string( & null_bytes) . unwrap( ) , "null" ) ;
199+
200+ let foo_bytes = get_batson ( & bytes, & [ "foo" . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
201+ assert_eq ! (
202+ batson_to_json_string( & foo_bytes) . unwrap( ) ,
203+ r#"[null,{"a":1,"b":22},4294967299]"#
204+ ) ;
205+
206+ let missing = get_batson ( & bytes, & [ "bar" . into ( ) ] ) . unwrap ( ) ;
207+ assert ! ( missing. is_none( ) ) ;
208+
209+ let missing = get_batson ( & bytes, & [ "foo" . into ( ) , "bar" . into ( ) ] ) . unwrap ( ) ;
210+ assert ! ( missing. is_none( ) ) ;
211+
212+ let obj_bytes = get_batson ( & bytes, & [ "foo" . into ( ) , 1 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
213+ assert_eq ! ( batson_to_json_string( & obj_bytes) . unwrap( ) , r#"{"a":1,"b":22}"# ) ;
214+
215+ let a_bytes = get_batson ( & bytes, & [ "foo" . into ( ) , 1 . into ( ) , "a" . into ( ) ] )
216+ . unwrap ( )
217+ . unwrap ( ) ;
218+ assert_eq ! ( batson_to_json_string( & a_bytes) . unwrap( ) , "1" ) ;
219+
220+ let b_bytes = get_batson ( & bytes, & [ "foo" . into ( ) , 1 . into ( ) , "b" . into ( ) ] )
221+ . unwrap ( )
222+ . unwrap ( ) ;
223+ assert_eq ! ( batson_to_json_string( & b_bytes) . unwrap( ) , "22" ) ;
224+
225+ let int_bytes = get_batson ( & bytes, & [ "foo" . into ( ) , 2 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
226+ assert_eq ! ( batson_to_json_string( & int_bytes) . unwrap( ) , "4294967299" ) ;
227+ }
228+
229+ #[ test]
230+ fn test_get_batson_u8array ( ) {
231+ let bytes = json_to_batson ( br#"[1, 2, 0, 255, 128]"# ) ;
232+
233+ assert_eq ! ( get_batson( & bytes, & [ ] ) . unwrap( ) . unwrap( ) , bytes) ;
234+
235+ let zeroth_bytes = get_batson ( & bytes, & [ 0 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
236+ assert_eq ! ( batson_to_json_string( & zeroth_bytes) . unwrap( ) , "1" ) ;
237+
238+ let first_bytes = get_batson ( & bytes, & [ 1 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
239+ assert_eq ! ( batson_to_json_string( & first_bytes) . unwrap( ) , "2" ) ;
240+
241+ let second_bytes = get_batson ( & bytes, & [ 2 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
242+ assert_eq ! ( batson_to_json_string( & second_bytes) . unwrap( ) , "0" ) ;
243+
244+ let third_bytes = get_batson ( & bytes, & [ 3 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
245+ assert_eq ! ( batson_to_json_string( & third_bytes) . unwrap( ) , "255" ) ;
246+
247+ let fourth_bytes = get_batson ( & bytes, & [ 4 . into ( ) ] ) . unwrap ( ) . unwrap ( ) ;
248+ assert_eq ! ( batson_to_json_string( & fourth_bytes) . unwrap( ) , "128" ) ;
249+
250+ let missing = get_batson ( & bytes, & [ 5 . into ( ) ] ) . unwrap ( ) ;
251+ assert ! ( missing. is_none( ) ) ;
252+
253+ let missing = get_batson ( & bytes, & [ 4 . into ( ) , 0 . into ( ) ] ) . unwrap ( ) ;
254+ assert ! ( missing. is_none( ) ) ;
255+ }
256+
190257#[ test]
191258fn test_to_json ( ) {
192259 let bytes = json_to_batson ( br" [true, 123] " ) ;
0 commit comments