use xot::Xot;
#[test]
fn test_text_content_str() {
let mut xot = Xot::new();
let doc = xot.parse(r#"text"#).unwrap();
let doc_el = xot.document_element(doc).unwrap();
assert_eq!(xot.text_content_str(doc_el), Some("text"));
}
#[test]
fn test_text_content_str_no_text() {
let mut xot = Xot::new();
let doc = xot.parse(r#""#).unwrap();
let doc_el = xot.document_element(doc).unwrap();
assert_eq!(xot.text_content_str(doc_el), Some(""));
}
#[test]
fn test_text_content_str_mixed_content() {
let mut xot = Xot::new();
let doc = xot.parse(r#"text"#).unwrap();
let doc_el = xot.document_element(doc).unwrap();
assert_eq!(xot.text_content_str(doc_el), None);
}
#[test]
fn test_compare() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"text"#).unwrap();
let doc2 = xot.parse(r#"text"#).unwrap();
assert!(xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_different_text() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"text A"#).unwrap();
let doc2 = xot.parse(r#"text B"#).unwrap();
assert!(!xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_different_structure() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#""#).unwrap();
let doc2 = xot.parse(r#""#).unwrap();
assert!(!xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_different_namespace() {
let mut xot = Xot::new();
let doc1 = xot
.parse(r#""#)
.unwrap();
let doc2 = xot
.parse(r#""#)
.unwrap();
assert!(!xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_same_attributes() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#""#).unwrap();
let doc2 = xot.parse(r#""#).unwrap();
assert!(xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_different_attributes() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#""#).unwrap();
let doc2 = xot.parse(r#""#).unwrap();
assert!(!xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_different_attributes_extra() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#""#).unwrap();
let doc2 = xot.parse(r#""#).unwrap();
assert!(!xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_value_the_same_structure_different() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"T1P1
P2
T2P3
"#
).unwrap();
let doc2 = xot.parse(r#"T1P1
P2
T2P3
"#).unwrap();
assert!(!xot.deep_equal(doc1, doc2));
}
#[test]
fn test_compare_children() {
let mut xot = Xot::new();
let root1 = xot
.parse(r#"AlphaGammaAlpha"#)
.unwrap();
let root2 = xot.parse(r#"AlphaGamma"#).unwrap();
let doc1 = xot.document_element(root1).unwrap();
let doc2 = xot.document_element(root2).unwrap();
let doc1_b0 = xot.first_child(doc1).unwrap();
let doc1_b1 = xot.next_sibling(doc1_b0).unwrap();
let doc2_b0 = xot.first_child(doc2).unwrap();
assert!(xot.deep_equal_children(doc1_b0, doc2_b0));
assert!(!xot.deep_equal_children(doc1_b1, doc2_b0));
}
#[test]
fn test_advanced_compare_text() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"text"#).unwrap();
let doc2 = xot.parse(r#"TEXT"#).unwrap();
// case insensitive compare
assert!(xot.advanced_deep_equal(
doc1,
doc2,
|_| true,
|a, b| a.to_lowercase() == b.to_lowercase()
));
}
#[test]
fn test_advanced_compare_text2() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"text"#).unwrap();
let doc2 = xot.parse(r#"different"#).unwrap();
// case insensitive compare doesn't matter, it's still different
assert!(!xot.advanced_deep_equal(
doc1,
doc2,
|_| true,
|a, b| a.to_lowercase() == b.to_lowercase()
));
}
#[test]
fn test_advanced_compare_attribute_text() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"text"#).unwrap();
let doc2 = xot.parse(r#"text"#).unwrap();
// no text compares as equal, so this is not equal
assert!(xot.advanced_deep_equal(
doc1,
doc2,
|_| true,
|a, b| a.to_lowercase() == b.to_lowercase()
));
}
#[test]
fn test_advanced_compare_filter() {
let mut xot = Xot::new();
let doc1 = xot.parse(r#"text"#).unwrap();
let doc2 = xot.parse(r#"text"#).unwrap();
// compare, disregarding comments
assert!(xot.advanced_deep_equal(doc1, doc2, |node| !xot.is_comment(node), |a, b| a == b));
}
#[test]
fn test_first_child_with_namespace() {
let mut xot = Xot::new();
let doc = xot.parse(r#"bar"#).unwrap();
let element = xot.document_element(doc).unwrap();
let value = xot.value(xot.first_child(element).unwrap());
if let xot::Value::Text(text) = value {
assert_eq!(text.get(), "bar");
} else {
unreachable!();
}
}
#[test]
fn test_first_child_with_attribute() {
let mut xot = Xot::new();
let doc = xot.parse(r#"bar"#).unwrap();
let element = xot.document_element(doc).unwrap();
let value = xot.value(xot.first_child(element).unwrap());
if let xot::Value::Text(text) = value {
assert_eq!(text.get(), "bar");
} else {
unreachable!();
}
}
#[test]
fn test_first_child_missing_with_attribute() {
let mut xot = Xot::new();
let doc = xot.parse(r#""#).unwrap();
let element = xot.document_element(doc).unwrap();
assert_eq!(xot.first_child(element), None);
}
#[test]
fn test_last_child_with_attribute() {
let mut xot = Xot::new();
let doc = xot.parse(r#"bar"#).unwrap();
let element = xot.document_element(doc).unwrap();
let value = xot.value(xot.last_child(element).unwrap());
if let xot::Value::Text(text) = value {
assert_eq!(text.get(), "bar");
} else {
unreachable!();
}
}
#[test]
fn test_last_child_missing_with_attribute() {
let mut xot = Xot::new();
let doc = xot.parse(r#""#).unwrap();
let element = xot.document_element(doc).unwrap();
assert_eq!(xot.last_child(element), None);
}
#[test]
fn test_previous_sibling_with_attribute() {
let mut xot = Xot::new();
let doc = xot.parse(r#"bar"#).unwrap();
let doc = xot.document_element(doc).unwrap();
let bar = xot.first_child(doc).unwrap();
assert_eq!(xot.previous_sibling(bar), None);
}
#[test]
fn test_next_sibling_with_attribute() {
let mut xot = Xot::new();
let doc = xot.parse(r#"bar"#).unwrap();
let doc = xot.document_element(doc).unwrap();
let bar = xot.first_child(doc).unwrap();
assert_eq!(xot.next_sibling(bar), None);
}
#[test]
fn test_children() {
let mut xot = Xot::new();
let doc = xot.parse(r#"bar"#).unwrap();
let doc = xot.document_element(doc).unwrap();
let children = xot.children(doc).collect::>();
assert_eq!(children.len(), 1);
}
#[test]
fn test_document_element_for_fragment_with_single_element() {
let mut xot = Xot::new();
let doc = xot.parse_fragment(r#"text"#).unwrap();
let doc_el = xot.document_element(doc).unwrap();
assert_eq!(xot.text_content_str(doc_el), Some("text"));
}
#[test]
fn test_document_element_for_fragment_with_multiple_elements() {
let mut xot = Xot::new();
let doc = xot.parse_fragment(r#"text"#).unwrap();
let doc_el = xot.document_element(doc).unwrap();
assert_eq!(xot.text_content_str(doc_el), Some("text"));
}
#[test]
fn test_document_element_for_fragment_without_elements() {
let mut xot = Xot::new();
let doc = xot.parse_fragment(r#""#).unwrap();
assert!(matches!(
xot.document_element(doc),
Err(xot::Error::NoElementAtTopLevel)
));
}