diff options
author | Jan-Erik Rediger <janerik@fnordig.de> | 2018-09-13 14:31:11 +0200 |
---|---|---|
committer | Jan-Erik Rediger <janerik@fnordig.de> | 2018-09-13 14:31:11 +0200 |
commit | 9499caa07b8441f51c20eadfa87592641c0e4ea9 (patch) | |
tree | 82f10db9cfb7c7035834c88bef7243f16875dbdf /src | |
parent | 343bbc5a80c9485bc2308830e027d99fe003132c (diff) |
Add a test
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 102 |
1 files changed, 67 insertions, 35 deletions
@@ -31,45 +31,77 @@ impl Preprocessor for Mermaid { } } -impl Mermaid { - fn add_mermaid(chapter: &mut Chapter) -> Result<String> { - let mut buf = String::with_capacity(chapter.content.len()); - let mut mermaid_content = String::new(); - let mut in_mermaid_block = false; - let events = Parser::new(&chapter.content).map(|e| { - if let Event::Start(Tag::CodeBlock(code)) = e.clone() { - if code == "mermaid" { - in_mermaid_block = true; - mermaid_content.clear(); - return None; - } else { - return Some(e); - } - } - - if !in_mermaid_block { +fn add_mermaid(content: &str) -> Result<String> { + let mut buf = String::with_capacity(content.len()); + let mut mermaid_content = String::new(); + let mut in_mermaid_block = false; + let events = Parser::new(content).map(|e| { + if let Event::Start(Tag::CodeBlock(code)) = e.clone() { + if code == "mermaid" { + in_mermaid_block = true; + mermaid_content.clear(); + return None; + } else { return Some(e); } + } + + if !in_mermaid_block { + return Some(e); + } + + match e { + Event::End(Tag::CodeBlock(code)) => { + assert_eq!("mermaid", code, "After an opening mermaid code block we expect it to close again"); + in_mermaid_block = false; - match e { - Event::End(Tag::CodeBlock(code)) => { - assert_eq!("mermaid", code, "After an opening mermaid code block we expect it to close again"); - in_mermaid_block = false; - - let mermaid_code = format!("<div class=\"mermaid\">{}</div>\n\n", mermaid_content); - return Some(Event::Text(mermaid_code.into())); - }, - Event::Text(code) => { - mermaid_content.push_str(&code); - } - _ => return Some(e), + let mermaid_code = format!("<div class=\"mermaid\">{}</div>\n\n", mermaid_content); + return Some(Event::Text(mermaid_code.into())); + }, + Event::Text(code) => { + mermaid_content.push_str(&code); } + _ => return Some(e), + } - None - }); - let events = events.filter_map(|e| e); - cmark(events, &mut buf, None) - .map(|_| buf) - .map_err(|err| Error::from(format!("Markdown serialization failed: {}", err))) + None + }); + let events = events.filter_map(|e| e); + cmark(events, &mut buf, None) + .map(|_| buf) + .map_err(|err| Error::from(format!("Markdown serialization failed: {}", err))) +} + +impl Mermaid { + fn add_mermaid(chapter: &mut Chapter) -> Result<String> { + add_mermaid(&chapter.content) + } +} + +#[cfg(test)] +mod test { + use super::add_mermaid; + + #[test] + fn adds_toc() { + let content = r#"# Chapter + +```mermaid +graph TD +A --> B +``` + +Text +"#; + + let expected = r#"# Chapter + +<div class="mermaid">graph TD +A --> B +</div> + +Text"#; + + assert_eq!(expected, add_mermaid(content).unwrap()); } } |