use libyang::{Entry, YangStore, to_entry};
use std::rc::Rc;
fn load(name: &str, yang_dir: &str) -> Rc<Entry> {
let mut store = YangStore::new();
store.add_path(yang_dir);
store.read_with_resolve(name).expect("parse / resolve");
store.identity_resolve();
let module = store.find_module(name).expect("module found");
to_entry(&store, module)
}
fn find_child<'a>(ent: &'a Rc<Entry>, name: &str) -> Option<Rc<Entry>> {
ent.dir.borrow().iter().find(|e| e.name == name).cloned()
}
#[test]
fn choice_cases_flatten_into_parent_dir() {
let root = load("choice-sample", "tests/yang");
let options = find_child(&root, "options").expect("options");
let ao_keychain = find_child(&options, "ao-keychain").expect("ao-keychain reachable");
let md5_keychain = find_child(&options, "md5-keychain").expect("md5-keychain reachable");
assert_eq!(ao_keychain.choice.borrow().as_deref(), Some("option"));
assert_eq!(ao_keychain.case.borrow().as_deref(), Some("ao"));
assert_eq!(md5_keychain.choice.borrow().as_deref(), Some("option"));
assert_eq!(md5_keychain.case.borrow().as_deref(), Some("md5"));
assert!(
find_child(&options, "option").is_none(),
"choice node 'option' should not appear in parent dir"
);
}