use arquery::{CompoundSelector, MatchType, Scope, Selector};
fn assert_as_single_tag(compound_selector: &CompoundSelector, tag_name: &str) {
assert_eq!(compound_selector.parts.len(), 1);
if let &Selector::TagName(ref string) = compound_selector.parts.last().unwrap() {
assert_eq!(string, tag_name)
} else {
panic!(format!("Did not match tag name \"{}\"", tag_name));
}
}
#[test]
fn it_can_parse_a_single_tag_selector() {
let compound_selectors = CompoundSelector::parse("apples").unwrap();
assert_eq!(compound_selectors.len(), 1);
assert_eq!(compound_selectors[0].scope, Scope::IndirectChild);
assert_as_single_tag(&compound_selectors[0], "apples");
}
#[test]
fn it_can_parse_a_nested_tag_selectors() {
let compound_selectors = CompoundSelector::parse("basket apple").unwrap();
assert_eq!(compound_selectors.len(), 2);
assert_eq!(compound_selectors[0].scope, Scope::IndirectChild);
assert_as_single_tag(&compound_selectors[0], "basket");
assert_eq!(compound_selectors[1].scope, Scope::IndirectChild);
assert_as_single_tag(&compound_selectors[1], "apple");
}
#[test]
fn it_can_parse_a_direct_child_selector() {
let compound_selectors = CompoundSelector::parse("basket > apple").unwrap();
assert_eq!(compound_selectors.len(), 2);
assert_eq!(compound_selectors[0].scope, Scope::IndirectChild);
assert_as_single_tag(&compound_selectors[0], "basket");
assert_eq!(compound_selectors[1].scope, Scope::DirectChild);
assert_as_single_tag(&compound_selectors[1], "apple");
}
#[test]
fn it_can_parse_the_attribute_selector() {
let compound_selectors = CompoundSelector::parse(r#"[attribute="true-value"]"#).unwrap();
assert_eq!(compound_selectors.len(), 1);
assert_eq!(compound_selectors[0].parts.len(), 1);
if let Selector::Attribute(ref attribute, match_type, ref value) =
compound_selectors[0].parts[0]
{
assert_eq!(attribute, "attribute");
assert_eq!(match_type, MatchType::Equals);
assert_eq!(value, "true-value");
} else {
panic!("Could not parse the attribute selector");
}
}
#[test]
fn it_can_parse_the_id_selector() {
let compound_selectors = CompoundSelector::parse("#the-id").unwrap();
assert_eq!(compound_selectors.len(), 1);
assert_eq!(compound_selectors[0].parts.len(), 1);
if let Selector::Id(ref value) = compound_selectors[0].parts[0] {
assert_eq!(value, "the-id");
} else {
panic!("Could not parse the ID selector");
}
}