extern crate rhtml2md; extern crate spectral; use rhtml2md::parse_html; use std::fs::File; use std::io::prelude::*; use spectral::prelude::*; use indoc::indoc; #[test] #[ignore] fn test_marcfs() { let mut html = String::new(); let mut html_file = File::open("test-samples/marcfs-readme.html").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); let result = parse_html(&html); println!("{}", result); } #[test] #[ignore] fn test_cheatsheet() { let mut html = String::new(); let mut md = String::new(); let mut html_file = File::open("test-samples/markdown-cheatsheet.html").unwrap(); let mut md_file = File::open("test-samples/markdown-cheatsheet.md").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); md_file.read_to_string(&mut md).expect("File must be readable"); let md_parsed = parse_html(&html); println!("{}", md_parsed); //assert_eq!(md, md_parsed); } /// newlines after list shouldn't be converted into text of the last list element #[test] fn test_list_newlines() { let mut html = String::new(); let mut html_file = File::open("test-samples/dybr-bug-with-list-newlines.html").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); let result = parse_html(&html); assert_that(&result).contains(".\n\nxxx xxxx"); assert_that(&result).contains("xx x.\n\nxxxxx:"); } #[test] fn test_lists_from_text() { let mut html = String::new(); let mut html_file = File::open("test-samples/dybr-bug-with-lists-from-text.html").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); let result = parse_html(&html); assert_that(&result).contains("\\- x xxxx xxxxx xx xxxxxxxxxx"); assert_that(&result).contains("\\- x xxxx xxxxxxxx xxxxxxxxx xxxxxx xxx x xxxxxxxx xxxx"); assert_that(&result).contains("\\- xxxx xxxxxxxx"); } #[test] fn test_strong_inside_link() { let mut html = String::new(); let mut html_file = File::open("test-samples/dybr-bug-with-strong-inside-link.html").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); let result = parse_html(&html); assert_that(&result).contains("[**Just God**](http://fanfics.me/ficXXXXXXX)"); } #[test] fn test_tables_with_newlines() { let mut html = String::new(); let mut html_file = File::open("test-samples/dybr-bug-with-tables-masked.html").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); let result = parse_html(&html); // all lines starting with | should end with | as well let invalid_table_lines: Vec<&str> = result.lines() .filter(|line| line.starts_with("|")) .filter(|line| !line.ends_with("|")) .collect(); assert_that(&invalid_table_lines).is_empty(); } #[test] fn test_tables_crash2() { let mut html = String::new(); let mut html_file = File::open("test-samples/dybr-bug-with-tables-2-masked.html").unwrap(); html_file.read_to_string(&mut html).expect("File must be readable"); let table_with_vertical_header = parse_html(&html); assert_that!(table_with_vertical_header).contains(indoc! {" |Current Conditions:|Open all year. No reservations. No services.| |-------------------|--------------------------------------------| | Reservations: | No reservations. | | Fees | No fee. | | Water: | No water. |" }); }