//! End-to-end tests for the HTML renderer. //! //! Pipeline: source text → `VimwikiSyntax::parse` → `HtmlRenderer::render`. use nuwiki_core::ast::LinkTarget; use nuwiki_core::render::{HtmlRenderer, Renderer}; use nuwiki_core::syntax::vimwiki::VimwikiSyntax; use nuwiki_core::syntax::SyntaxPlugin; fn render(src: &str) -> String { let doc = VimwikiSyntax::new().parse(src); HtmlRenderer::new().render_to_string(&doc).unwrap() } // ===== Block elements ===== #[test] fn empty_document_renders_to_empty_string() { assert_eq!(render(""), ""); } #[test] fn heading_levels() { for level in 1..=6 { let bars = "=".repeat(level); let out = render(&format!("{bars} Title {bars}\n")); assert!(out.starts_with(&format!("Title"))); } } #[test] fn centered_heading_gets_centered_class() { let out = render(" = T =\n"); assert!(out.contains("

T

")); } #[test] fn paragraph_wraps_inline_content() { let out = render("Hello world\n"); assert_eq!(out.trim(), "

Hello world

"); } #[test] fn horizontal_rule() { let out = render("----\n"); assert!(out.contains("
")); } #[test] fn blockquote_lines_become_paragraphs() { let out = render("> first\n> second\n"); assert!(out.contains("
")); assert!(out.contains("

first

")); assert!(out.contains("

second

")); } #[test] fn preformatted_block_emits_pre_code_with_language_class() { let out = render("{{{rust\nfn main() {}\n}}}\n"); assert!(out.contains("
"));
    assert!(out.contains("fn main() {}"));
    assert!(out.contains("
")); } #[test] fn math_block_emits_div() { let out = render("{{$\nx=1\n}}$\n"); assert!(out.contains("
")); assert!(out.contains("x=1")); } #[test] fn unordered_list_with_checkbox() { let out = render("- [X] done\n- not done\n"); assert!(out.contains("