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#"
T1

P1

P2

T2

P3

"# ).unwrap(); let doc2 = xot.parse(r#"
T1

P1

P2

T2

P3

"#).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) )); }