use super::*; #[test] fn empty() { assert_eq!(HtmlWithLimit::new(0).finish(), ""); assert_eq!(HtmlWithLimit::new(60).finish(), ""); } #[test] fn basic() { let mut buf = HtmlWithLimit::new(60); buf.push("Hello "); buf.open_tag("em"); buf.push("world"); buf.close_tag(); buf.push("!"); assert_eq!(buf.finish(), "Hello world!"); } #[test] fn no_tags() { let mut buf = HtmlWithLimit::new(60); buf.push("Hello"); buf.push(" world!"); assert_eq!(buf.finish(), "Hello world!"); } #[test] fn limit_0() { let mut buf = HtmlWithLimit::new(0); buf.push("Hello "); buf.open_tag("em"); buf.push("world"); buf.close_tag(); buf.push("!"); assert_eq!(buf.finish(), ""); } #[test] fn exactly_limit() { let mut buf = HtmlWithLimit::new(12); buf.push("Hello "); buf.open_tag("em"); buf.push("world"); buf.close_tag(); buf.push("!"); assert_eq!(buf.finish(), "Hello world!"); } #[test] fn multiple_nested_tags() { let mut buf = HtmlWithLimit::new(60); buf.open_tag("p"); buf.push("This is a "); buf.open_tag("em"); buf.push("paragraph"); buf.open_tag("strong"); buf.push("!"); buf.close_tag(); buf.close_tag(); buf.close_tag(); assert_eq!(buf.finish(), "

This is a paragraph!

"); } #[test] fn forgot_to_close_tags() { let mut buf = HtmlWithLimit::new(60); buf.open_tag("p"); buf.push("This is a "); buf.open_tag("em"); buf.push("paragraph"); buf.open_tag("strong"); buf.push("!"); assert_eq!(buf.finish(), "

This is a paragraph!

"); } #[test] fn past_the_limit() { let mut buf = HtmlWithLimit::new(20); buf.open_tag("p"); (0..10).try_for_each(|n| { buf.open_tag("strong"); buf.push("word#")?; buf.push(&n.to_string())?; buf.close_tag(); ControlFlow::CONTINUE }); buf.close_tag(); assert_eq!( buf.finish(), "

\ word#0\ word#1\ word#2\

" ); } #[test] fn quickly_past_the_limit() { let mut buf = HtmlWithLimit::new(6); buf.open_tag("p"); buf.push("Hello"); buf.push(" World"); // intentionally not closing

before finishing assert_eq!(buf.finish(), "

Hello

"); } #[test] fn close_too_many() { let mut buf = HtmlWithLimit::new(60); buf.open_tag("p"); buf.push("Hello"); buf.close_tag(); // This call does not panic because there are valid cases // where `close_tag()` is called with no tags left to close. // So `close_tag()` does nothing in this case. buf.close_tag(); assert_eq!(buf.finish(), "

Hello

"); }