| 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(), $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(), |
| html: $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()); |
| } |