summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan-Erik Rediger <janerik@fnordig.de>2018-09-13 14:31:11 +0200
committerJan-Erik Rediger <janerik@fnordig.de>2018-09-13 14:31:11 +0200
commit9499caa07b8441f51c20eadfa87592641c0e4ea9 (patch)
tree82f10db9cfb7c7035834c88bef7243f16875dbdf /src
parent343bbc5a80c9485bc2308830e027d99fe003132c (diff)
Add a test
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs102
1 files changed, 67 insertions, 35 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 326883d..a18b8fb 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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());
}
}