120 lines
2.8 KiB
Rust
120 lines
2.8 KiB
Rust
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 <em>world</em>!");
|
|
}
|
|
|
|
#[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 <em>world</em>!");
|
|
}
|
|
|
|
#[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(), "<p>This is a <em>paragraph<strong>!</strong></em></p>");
|
|
}
|
|
|
|
#[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(), "<p>This is a <em>paragraph<strong>!</strong></em></p>");
|
|
}
|
|
|
|
#[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(),
|
|
"<p>\
|
|
<strong>word#0</strong>\
|
|
<strong>word#1</strong>\
|
|
<strong>word#2</strong>\
|
|
</p>"
|
|
);
|
|
}
|
|
|
|
#[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 <p> before finishing
|
|
assert_eq!(buf.finish(), "<p>Hello</p>");
|
|
}
|
|
|
|
#[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(), "<p>Hello</p>");
|
|
}
|