@@ -5095,3 +5095,89 @@ fn error_invalid_json_in_data_directive() {
5095 result.diagnostics
5095 result.diagnostics
5099+// ---------------------------------------------------------------------------
5100+// @markdown file embedding tests
5101+// ---------------------------------------------------------------------------
5104+fn markdown_file_renders_content() {
5105+ let dir = std::env::temp_dir().join("htmlang_test_markdown_file");
5106+ let _ = std::fs::remove_dir_all(&dir);
5107+ std::fs::create_dir_all(&dir).unwrap();
5108+ let md_path = dir.join("article.md");
5109+ std::fs::write(&md_path, "# Hello\n\nThis is **bold** text.\n").unwrap();
5111+ let input = "@markdown article.md\n";
5112+ let result = htmlang::parser::parse_with_base(input, Some(&dir));
5113+ let html = htmlang::codegen::generate(&result.document);
5114+ let _ = std::fs::remove_dir_all(&dir);
5120+ .all(|d| d.severity != htmlang::parser::Severity::Error),
5121+ "no errors expected, got: {:?}",
5125+ html.contains("<h1>Hello</h1>"),
5126+ "should render heading from md file, got: {}",
5130+ html.contains("<strong>bold</strong>"),
5131+ "should render bold from md file, got: {}",
5137+fn markdown_file_with_variable_path() {
5138+ let dir = std::env::temp_dir().join("htmlang_test_markdown_var");
5139+ let _ = std::fs::remove_dir_all(&dir);
5140+ std::fs::create_dir_all(&dir).unwrap();
5141+ let md_path = dir.join("post.md");
5142+ std::fs::write(&md_path, "# Post Title\n").unwrap();
5144+ let input = "@let file post.md\n@markdown $file\n";
5145+ let result = htmlang::parser::parse_with_base(input, Some(&dir));
5146+ let html = htmlang::codegen::generate(&result.document);
5147+ let _ = std::fs::remove_dir_all(&dir);
5153+ .all(|d| d.severity != htmlang::parser::Severity::Error),
5154+ "no errors expected, got: {:?}",
5158+ html.contains("<h1>Post Title</h1>"),
5159+ "should resolve variable path for markdown file, got: {}",
5165+fn markdown_file_missing_reports_error() {
5166+ let dir = std::env::temp_dir().join("htmlang_test_markdown_missing");
5167+ let _ = std::fs::remove_dir_all(&dir);
5168+ std::fs::create_dir_all(&dir).unwrap();
5170+ let input = "@markdown nonexistent.md\n";
5171+ let result = htmlang::parser::parse_with_base(input, Some(&dir));
5172+ let _ = std::fs::remove_dir_all(&dir);
5174+ let has_err = result.diagnostics.iter().any(|d| {
5175+ d.severity == htmlang::parser::Severity::Error
5176+ && d.message.contains("cannot read markdown")
5180+ "expected missing file error, got: {:?}",