//! Tests for named core filters, sorted by name. pub mod common; use common::give; use serde_json::json; #[test] fn has() { /* TODO: reenable these tests let err = Error::Index(Val::Null, Val::Int(0)); fail(json!(null), "has(0)", err); let err = Error::Index(Val::Int(0), Val::Null); fail(json!(0), "has([][0])", err); let err = Error::Index(Val::Int(0), Val::Int(1)); fail(json!(0), "has(1)", err); let err = Error::Index(Val::Str("a".to_string().into()), Val::Int(0)); fail(json!("a"), "has(0)", err); */ give(json!([0, null]), "has(0)", json!(true)); give(json!([0, null]), "has(1)", json!(true)); give(json!([0, null]), "has(2)", json!(false)); give(json!({"a": 1, "b": null}), r#"has("a")"#, json!(true)); give(json!({"a": 1, "b": null}), r#"has("b")"#, json!(true)); give(json!({"a": 1, "b": null}), r#"has("c")"#, json!(false)); } yields!(indices_str, r#""a,b, cd, efg" | indices(", ")"#, [3, 7]); yields!( indices_arr_num, "[0, 1, 2, 1, 3, 1, 4] | indices(1)", [1, 3, 5] ); yields!( indices_arr_arr, "[0, 1, 2, 3, 1, 4, 2, 5, 1, 2, 6, 7] | indices([1, 2])", [1, 8] ); yields!(indices_arr_str, r#"["a", "b", "c"] | indices("b")"#, [1]); yields!(indices_arr_empty, "[0, 1] | indices([])", json!([])); yields!(indices_arr_larger, "[1, 2] | indices([1, 2, 3])", json!([])); yields!(indices_arr_overlap, "[0, 0, 0] | indices([0, 0])", [0, 1]); yields!(indices_str_overlap, r#""aaa" | indices("aa")"#, [0, 1]); yields!(indices_str_gb1, r#""🇬🇧!" | indices("!")"#, [2]); yields!(indices_str_gb2, r#""🇬🇧🇬🇧" | indices("🇬🇧")"#, [0, 2]); #[test] fn keys_unsorted() { give(json!([0, null, "a"]), "keys_unsorted", json!([0, 1, 2])); give(json!({"a": 1, "b": 2}), "keys_unsorted", json!(["a", "b"])); /* TODO: reenable these tests let err = |v| Error::Type(v, Type::Iter); fail(json!(0), "keys_unsorted", err(Val::Int(0))); fail(json!(null), "keys_unsorted", err(Val::Null)); */ } yields!(length_str_foo, r#""ƒoo" | length"#, 3); yields!(length_str_namaste, r#""नमस्ते" | length"#, 6); yields!(length_obj, r#"{"a": 5, "b": 3} | length"#, 2); yields!(length_int_pos, " 2 | length", 2); yields!(length_int_neg, "-2 | length", 2); yields!(length_float_pos, " 2.5 | length", 2.5); yields!(length_float_neg, "-2.5 | length", 2.5); #[test] fn tojson() { // TODO: correct this give(json!(1.0), "tojson", json!("1.0")); give(json!(0), "1.0 | tojson", json!("1.0")); give(json!(0), "1.1 | tojson", json!("1.1")); give(json!(0), "0.0 / 0.0 | tojson", json!("null")); give(json!(0), "1.0 / 0.0 | tojson", json!("null")); }