diff --git a/tests/rendered_output.rs b/tests/rendered_output.rs index 696de857..c7618335 100644 --- a/tests/rendered_output.rs +++ b/tests/rendered_output.rs @@ -5,7 +5,6 @@ use crate::dummy_book::{assert_contains_strings, DummyBook}; use anyhow::Context; use mdbook::config::Config; use mdbook::errors::*; -use mdbook::utils::fs::write_file; use mdbook::MDBook; use pretty_assertions::assert_eq; use select::document::Document; @@ -13,8 +12,6 @@ use select::predicate::{Attr, Class, Name, Predicate}; use std::ffi::OsStr; use std::fs; use std::path::Path; -use std::str::FromStr; -use tempfile::Builder as TempFileBuilder; use walkdir::{DirEntry, WalkDir}; const BOOK_ROOT: &str = concat!(env!("CARGO_MANIFEST_DIR"), "/tests/dummy_book"); @@ -172,28 +169,6 @@ fn toc_fallback_html() -> Result { Ok(Document::from(html.as_str())) } -#[test] -fn check_second_toc_level() { - let doc = toc_js_html().unwrap(); - let mut should_be = Vec::from(TOC_SECOND_LEVEL); - should_be.sort_unstable(); - - let pred = descendants!( - Class("chapter"), - Name("li"), - Name("li"), - Name("a").and(Class("toggle").not()) - ); - - let mut children_of_children: Vec<_> = doc - .find(pred) - .map(|elem| elem.text().trim().to_string()) - .collect(); - children_of_children.sort(); - - assert_eq!(children_of_children, should_be); -} - #[test] fn check_first_toc_level() { let doc = toc_js_html().unwrap(); diff --git a/tests/testsuite/main.rs b/tests/testsuite/main.rs index 162f850a..cc9bef92 100644 --- a/tests/testsuite/main.rs +++ b/tests/testsuite/main.rs @@ -19,6 +19,7 @@ mod rendering; mod search; mod test; mod theme; +mod toc; mod prelude { pub use crate::book_test::BookTest; diff --git a/tests/testsuite/toc.rs b/tests/testsuite/toc.rs new file mode 100644 index 00000000..2787b995 --- /dev/null +++ b/tests/testsuite/toc.rs @@ -0,0 +1,55 @@ +//! Tests for table of contents (sidebar). + +use crate::prelude::*; +use select::document::Document; +use select::predicate::{Class, Name, Predicate}; + +const TOC_SECOND_LEVEL: &[&str] = &[ + "1.1. Nested Index", + "1.2. Nested two", + "3.1. Deep Nest 2", + "3.1.1. Deep Nest 3", +]; + +/// Apply a series of predicates to some root predicate, where each +/// successive predicate is the descendant of the last one. Similar to how you +/// might do `ul.foo li a` in CSS to access all anchor tags in the `foo` list. +macro_rules! descendants { + ($root:expr, $($child:expr),*) => { + $root + $( + .descendant($child) + )* + }; +} + +/// Read the TOC (`book/toc.js`) nested HTML and expose it as a DOM which we +/// can search with the `select` crate +fn toc_js_html() -> Document { + let mut test = BookTest::from_dir("toc/basic_toc"); + test.build(); + let html = test.toc_js_html(); + Document::from(html.as_str()) +} + +#[test] +fn check_second_toc_level() { + let doc = toc_js_html(); + let mut should_be = Vec::from(TOC_SECOND_LEVEL); + should_be.sort_unstable(); + + let pred = descendants!( + Class("chapter"), + Name("li"), + Name("li"), + Name("a").and(Class("toggle").not()) + ); + + let mut children_of_children: Vec<_> = doc + .find(pred) + .map(|elem| elem.text().trim().to_string()) + .collect(); + children_of_children.sort(); + + assert_eq!(children_of_children, should_be); +} diff --git a/tests/testsuite/toc/basic_toc/book.toml b/tests/testsuite/toc/basic_toc/book.toml new file mode 100644 index 00000000..cebbd270 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/book.toml @@ -0,0 +1,2 @@ +[book] +title = "basic_toc" diff --git a/tests/testsuite/toc/basic_toc/src/README.md b/tests/testsuite/toc/basic_toc/src/README.md new file mode 100644 index 00000000..8ad6862f --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/README.md @@ -0,0 +1 @@ +# With Readme diff --git a/tests/testsuite/toc/basic_toc/src/SUMMARY.md b/tests/testsuite/toc/basic_toc/src/SUMMARY.md new file mode 100644 index 00000000..9060ce68 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/SUMMARY.md @@ -0,0 +1,23 @@ +# Summary + +[Prefix 1](prefix1.md) +[Prefix 2](prefix2.md) + +- [With Readme](README.md) + - [Nested Index](nested/index.md) + - [Nested two](nested/two.md) +- [Draft]() + +--- + +# Deep Nest + +- [Deep Nest 1](deep/index.md) + - [Deep Nest 2](deep/a/index.md) + - [Deep Nest 3](deep/a/b/index.md) + [Deep Nest 4](deep/a/b/c/index.md) + +--- + +[Suffix 1](suffix1.md) +[Suffix 2](suffix2.md) diff --git a/tests/testsuite/toc/basic_toc/src/deep/a/b/index.md b/tests/testsuite/toc/basic_toc/src/deep/a/b/index.md new file mode 100644 index 00000000..2bd51169 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/deep/a/b/index.md @@ -0,0 +1 @@ +# Deep Nest 3 diff --git a/tests/testsuite/toc/basic_toc/src/deep/a/index.md b/tests/testsuite/toc/basic_toc/src/deep/a/index.md new file mode 100644 index 00000000..01fcd70c --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/deep/a/index.md @@ -0,0 +1 @@ +# Deep Nest 2 diff --git a/tests/testsuite/toc/basic_toc/src/deep/index.md b/tests/testsuite/toc/basic_toc/src/deep/index.md new file mode 100644 index 00000000..847f336d --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/deep/index.md @@ -0,0 +1 @@ +# Deep Nest 1 diff --git a/tests/testsuite/toc/basic_toc/src/nested/index.md b/tests/testsuite/toc/basic_toc/src/nested/index.md new file mode 100644 index 00000000..ecbbbc86 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/nested/index.md @@ -0,0 +1 @@ +# Nested Index diff --git a/tests/testsuite/toc/basic_toc/src/nested/two.md b/tests/testsuite/toc/basic_toc/src/nested/two.md new file mode 100644 index 00000000..e600bff7 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/nested/two.md @@ -0,0 +1 @@ +# Nested two diff --git a/tests/testsuite/toc/basic_toc/src/prefix1.md b/tests/testsuite/toc/basic_toc/src/prefix1.md new file mode 100644 index 00000000..4ddb4143 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/prefix1.md @@ -0,0 +1 @@ +# Prefix 1 diff --git a/tests/testsuite/toc/basic_toc/src/prefix2.md b/tests/testsuite/toc/basic_toc/src/prefix2.md new file mode 100644 index 00000000..11ff4958 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/prefix2.md @@ -0,0 +1 @@ +# Prefix 2 diff --git a/tests/testsuite/toc/basic_toc/src/suffix1.md b/tests/testsuite/toc/basic_toc/src/suffix1.md new file mode 100644 index 00000000..59a81900 --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/suffix1.md @@ -0,0 +1 @@ +# Suffix 1 diff --git a/tests/testsuite/toc/basic_toc/src/suffix2.md b/tests/testsuite/toc/basic_toc/src/suffix2.md new file mode 100644 index 00000000..2bf99ebe --- /dev/null +++ b/tests/testsuite/toc/basic_toc/src/suffix2.md @@ -0,0 +1 @@ +# Suffix 2