// use std::collections::HashMap; // use undeepend::xml::sax_parser::parse_string; // use undeepend::xml::{Attribute, SaxError, SaxHandler}; // use undeepend::xml::dom_parser::DomSaxHandler; // // #[test] // fn test_xml_header() { // let test_xml = include_str!("resources/header.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // println!("{:?}", testhandler); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.end_document_called, 1); // } // // #[test] // fn test_single_element_short() { // let test_xml = include_str!("resources/header.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.start_element_called, 1); // assert!(!testhandler.elements.is_empty()); // assert_eq!(testhandler.elements[0], ""); // assert_eq!(testhandler.end_document_called, 1); // } // // #[test] // fn test_single_element() { // let test_xml = include_str!("resources/element.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.start_element_called, 1); // assert!(!testhandler.elements.is_empty()); // assert_eq!(testhandler.elements[0], ""); // assert_eq!(testhandler.end_document_called, 1); // } // // #[test] // fn test_single_element_single_attribute() { // let test_xml = include_str!("resources/element_with_attribute.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.start_element_called, 1); // assert!(!testhandler.elements.is_empty()); // assert_eq!(testhandler.elements[0], r#""#); // assert_eq!(testhandler.end_element_called, 1); // assert_eq!(testhandler.end_document_called, 1); // } // // #[test] // fn test_ignore_comment() { // let test_xml = include_str!("resources/comment.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.start_element_called, 1); // assert!(!testhandler.elements.is_empty()); // assert_eq!( // testhandler.elements[0], // r#""# // ); // assert_eq!(testhandler.end_element_called, 1); // assert_eq!(testhandler.end_document_called, 1); // } // // #[test] // fn test_bad_comment() { // let test_xml = include_str!("resources/illegal_dashes_comment.xml"); // let mut testhandler = TestHandler::new(); // match parse_string(test_xml, Box::new(&mut testhandler)) { // Err(e) => assert_eq!(e, SaxError::BadCharacter), // Ok(_) => assert!(false), // } // } // // #[test] // fn test_namespaces() { // let test_xml = include_str!("resources/namespaces.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.start_element_called, 4); // assert!(!testhandler.elements.is_empty()); // assert_eq!(testhandler.elements[0], r#""#); // assert_eq!( // testhandler.elements[1], // r#""# // ); // assert_eq!( // testhandler.elements[2], // r#""# // ); // assert_eq!(testhandler.elements[3], r#""#); // assert_eq!(testhandler.end_element_called, 4); // assert_eq!(testhandler.end_document_called, 1); // } // // #[test] // fn test_namespace_prefixes() { // let test_xml = include_str!("resources/namespaces-prefix.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, Box::new(&mut testhandler)) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.start_document_called, 1); // assert_eq!(testhandler.start_element_called, 5); // assert!(!testhandler.elements.is_empty()); // assert_eq!(testhandler.elements[0], r#""#); // assert_eq!( // testhandler.elements[1], // r#""# // ); // assert_eq!( // testhandler.elements[2], // r#""# // ); // assert_eq!( // testhandler.elements[3], // r#""# // ); // assert_eq!(testhandler.elements[4], r#""#); // assert_eq!(testhandler.end_element_called, 5); // assert_eq!(testhandler.end_document_called, 1); // assert_eq!(testhandler.mappings.len(), 2); // assert_eq!(testhandler.mappings["books"], "http://example.com/books"); // assert_eq!(testhandler.mappings["covers"], "http://example.com/covers"); // } // // #[test] // fn characters(){ // let test_xml = include_str!("resources/characters.xml"); // let mut testhandler = TestHandler::new(); // parse_string(test_xml, DomSaxHandler{}) // .expect("Failed to parse test xml"); // assert_eq!(testhandler.characters[0], "Hello World"); // } // #[derive(Debug)] // struct TestHandler { // start_document_called: usize, // end_document_called: usize, // start_element_called: usize, // end_element_called: usize, // elements: Vec, // mappings: HashMap, // characters: Vec, // } // // impl TestHandler { // pub fn new() -> Self { // Self { // start_document_called: 0, // end_document_called: 0, // start_element_called: 0, // end_element_called: 0, // elements: vec![], // mappings: HashMap::new(), // characters: vec![], // } // } // } // // impl SaxHandler for TestHandler { // fn start_document(&mut self) { // self.start_document_called += 1; // } // // fn end_document(&mut self) { // self.end_document_called += 1; // } // // fn start_prefix_mapping(&mut self, prefix: &str, uri: &str) { // self.mappings.insert(prefix.to_string(), uri.to_string()); // } // // fn start_element( // &mut self, // uri: Option, // _local_name: &str, // qualified_name: &str, // attributes: Vec, // ) { // self.start_element_called += 1; // let atts = attributes // .iter() // .map(|att| format!(r#"{}="{}""#, att.name, att.value)) // .collect::>() // .join(" "); // // let divider = if atts.is_empty() { "" } else { " " }; // self.elements // .push(format!("<{}{}{}>", qualified_name, divider, atts)); // } // // fn end_element(&mut self, _uri: Option, _local_name: &str, _qualified_name: &str) { // self.end_element_called += 1; // } // // fn characters(&mut self, chars: &[char]) { // self.characters.push(chars.iter().cloned().collect()); // } // // fn error(&mut self, _error: &str) { // todo!() // } // }