use std::sync::Arc;
use crate::test;
use super::{test::PathGlob, PathNode};
#[test]
fn glob_should_match_path() {
test::setup();
let root = Arc::new(PathNode::Root);
let path_a = Arc::new(PathNode::Array {
parent: Arc::clone(&root),
index: 1,
});
let path_b = Arc::new(PathNode::Object {
parent: Arc::clone(&path_a),
key: r#""name""#.into(),
});
let path_c = PathNode::Object {
parent: Arc::clone(&path_b),
key: r#""gene""#.into(),
};
assert!(PathGlob::from("$").matches(&root));
assert!(PathGlob::from("*").matches(&root));
assert!(!PathGlob::from("*").matches(&path_a));
assert!(PathGlob::from("*.*").matches(&path_a));
assert!(PathGlob::from("$.*").matches(&path_a));
assert!(PathGlob::from("$.1").matches(&path_a));
assert!(!PathGlob::from("*").matches(&path_b));
assert!(!PathGlob::from("*.*").matches(&path_b));
assert!(PathGlob::from("*.*.*").matches(&path_b));
assert!(PathGlob::from("$.*.*").matches(&path_b));
assert!(PathGlob::from("$.1.*").matches(&path_b));
assert!(PathGlob::from("$.*.name").matches(&path_b));
assert!(PathGlob::from("$.1.name").matches(&path_b));
assert!(PathGlob::from("$.1.name.gene").matches(&path_c));
}