summaryrefslogtreecommitdiffstats
path: root/src/librustdoc/html/length_limit/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/librustdoc/html/length_limit/tests.rs')
-rw-r--r--src/librustdoc/html/length_limit/tests.rs120
1 files changed, 120 insertions, 0 deletions
diff --git a/src/librustdoc/html/length_limit/tests.rs b/src/librustdoc/html/length_limit/tests.rs
new file mode 100644
index 000000000..2d02b8a16
--- /dev/null
+++ b/src/librustdoc/html/length_limit/tests.rs
@@ -0,0 +1,120 @@
+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>");
+}