79 lines
2 KiB
Rust
79 lines
2 KiB
Rust
use super::{Toc, TocBuilder, TocEntry};
|
|
|
|
#[test]
|
|
fn builder_smoke() {
|
|
let mut builder = TocBuilder::new();
|
|
|
|
// this is purposely not using a fancy macro like below so
|
|
// that we're sure that this is doing the correct thing, and
|
|
// there's been no macro mistake.
|
|
macro_rules! push {
|
|
($level: expr, $name: expr) => {
|
|
assert_eq!(builder.push($level, $name.to_string(), "".to_string()), $name);
|
|
};
|
|
}
|
|
push!(2, "0.1");
|
|
push!(1, "1");
|
|
{
|
|
push!(2, "1.1");
|
|
{
|
|
push!(3, "1.1.1");
|
|
push!(3, "1.1.2");
|
|
}
|
|
push!(2, "1.2");
|
|
{
|
|
push!(3, "1.2.1");
|
|
push!(3, "1.2.2");
|
|
}
|
|
}
|
|
push!(1, "2");
|
|
push!(1, "3");
|
|
{
|
|
push!(4, "3.0.0.1");
|
|
{
|
|
push!(6, "3.0.0.1.0.1");
|
|
}
|
|
push!(4, "3.0.0.2");
|
|
push!(2, "3.1");
|
|
{
|
|
push!(4, "3.1.0.1");
|
|
}
|
|
}
|
|
|
|
macro_rules! toc {
|
|
($(($level: expr, $name: expr, $(($sub: tt))* )),*) => {
|
|
Toc {
|
|
entries: vec![
|
|
$(
|
|
TocEntry {
|
|
level: $level,
|
|
name: $name.to_string(),
|
|
sec_number: $name.to_string(),
|
|
id: "".to_string(),
|
|
children: toc!($($sub),*)
|
|
}
|
|
),*
|
|
]
|
|
}
|
|
}
|
|
}
|
|
let expected = toc!(
|
|
(2, "0.1",),
|
|
(
|
|
1,
|
|
"1",
|
|
((2, "1.1", ((3, "1.1.1",))((3, "1.1.2",))))((
|
|
2,
|
|
"1.2",
|
|
((3, "1.2.1",))((3, "1.2.2",))
|
|
))
|
|
),
|
|
(1, "2",),
|
|
(
|
|
1,
|
|
"3",
|
|
((4, "3.0.0.1", ((6, "3.0.0.1.0.1",))))((4, "3.0.0.2",))((2, "3.1", ((4, "3.1.0.1",))))
|
|
)
|
|
);
|
|
assert_eq!(expected, builder.into_toc());
|
|
}
|