From 4c06c8554c35887f8f5147783953b2b7e7c2327f Mon Sep 17 00:00:00 2001 From: Titus Wormer Date: Wed, 8 Jun 2022 15:52:16 +0200 Subject: . --- tests/code_fenced.rs | 266 ++++++++++++ tests/code_indented.rs | 196 +++++++++ tests/heading_atx.rs | 208 ++++++++++ tests/html_flow.rs | 1058 +++++++++++++++++++++++++++++++++++++++++++++++ tests/lib.rs | 8 + tests/thematic_break.rs | 181 ++++++++ 6 files changed, 1917 insertions(+) create mode 100644 tests/code_fenced.rs create mode 100644 tests/code_indented.rs create mode 100644 tests/heading_atx.rs create mode 100644 tests/html_flow.rs create mode 100644 tests/lib.rs create mode 100644 tests/thematic_break.rs (limited to 'tests') diff --git a/tests/code_fenced.rs b/tests/code_fenced.rs new file mode 100644 index 0000000..46fa9cb --- /dev/null +++ b/tests/code_fenced.rs @@ -0,0 +1,266 @@ +extern crate micromark; +use micromark::micromark; + +#[test] +fn code_fenced() { + assert_eq!( + micromark("```\n<\n >\n```"), + "
<\n >\n
", + "should support fenced code w/ grave accents" + ); + + assert_eq!( + micromark("~~~\n<\n >\n~~~"), + "
<\n >\n
", + "should support fenced code w/ tildes" + ); + + // To do: code (text). + // assert_eq!( + // micromark("``\nfoo\n``"), + // "

foo

", + // "should not support fenced code w/ less than three markers" + // ); + + assert_eq!( + micromark("```\naaa\n~~~\n```"), + "
aaa\n~~~\n
", + "should not support a tilde closing sequence for a grave accent opening sequence" + ); + + assert_eq!( + micromark("~~~\naaa\n```\n~~~"), + "
aaa\n```\n
", + "should not support a grave accent closing sequence for a tilde opening sequence" + ); + + assert_eq!( + micromark("````\naaa\n```\n``````"), + "
aaa\n```\n
", + "should support a closing sequence longer, but not shorter than, the opening" + ); + + assert_eq!( + micromark("~~~~\naaa\n~~~\n~~~~"), + "
aaa\n~~~\n
", + "should support a closing sequence equal to, but not shorter than, the opening" + ); + + assert_eq!( + micromark("```"), + "
\n", + "should support an eof right after an opening sequence" + ); + + assert_eq!( + micromark("`````\n\n```\naaa\n"), + "
\n```\naaa\n
\n", + "should support an eof somewhere in content" + ); + + // To do: blockquote. + // assert_eq!( + // micromark("> ```\n> aaa\n\nbbb"), + // "
\n
aaa\n
\n
\n

bbb

", + // "should support no closing sequence in a block quote" + // ); + + assert_eq!( + micromark("```\n\n \n```"), + "
\n  \n
", + "should support blank lines in fenced code" + ); + + assert_eq!( + micromark("```\n```"), + "
", + "should support empty fenced code" + ); + + assert_eq!( + micromark(" ```\n aaa\naaa\n```"), + "
aaa\naaa\n
", + "should remove up to one space from the content if the opening sequence is indented w/ 1 space" + ); + + assert_eq!( + micromark(" ```\naaa\n aaa\naaa\n ```"), + "
aaa\naaa\naaa\n
", + "should remove up to two space from the content if the opening sequence is indented w/ 2 spaces" + ); + + assert_eq!( + micromark(" ```\n aaa\n aaa\n aaa\n ```"), + "
aaa\n aaa\naaa\n
", + "should remove up to three space from the content if the opening sequence is indented w/ 3 spaces" + ); + + assert_eq!( + micromark(" ```\n aaa\n ```"), + "
```\naaa\n```\n
", + "should not support indenteding the opening sequence w/ 4 spaces" + ); + + assert_eq!( + micromark("```\naaa\n ```"), + "
aaa\n
", + "should support an indented closing sequence" + ); + + assert_eq!( + micromark(" ```\naaa\n ```"), + "
aaa\n
", + "should support a differently indented closing sequence than the opening sequence" + ); + + assert_eq!( + micromark("```\naaa\n ```\n"), + "
aaa\n    ```\n
\n", + "should not support an indented closing sequence w/ 4 spaces" + ); + + // To do: code (text). + // assert_eq!( + // micromark("``` ```\naaa"), + // "

\naaa

", + // "should not support grave accents in the opening fence after the opening sequence" + // ); + + assert_eq!( + micromark("~~~~~~\naaa\n~~~ ~~\n"), + "
aaa\n~~~ ~~\n
\n", + "should not support spaces in the closing sequence" + ); + + assert_eq!( + micromark("foo\n```\nbar\n```\nbaz"), + "

foo

\n
bar\n
\n

baz

", + "should support interrupting paragraphs" + ); + + // To do: setext. + // assert_eq!( + // micromark("foo\n---\n~~~\nbar\n~~~\n# baz"), + // "

foo

\n
bar\n
\n

baz

", + // "should support interrupting other content" + // ); + + assert_eq!( + micromark("```ruby\ndef foo(x)\n return 3\nend\n```"), + "
def foo(x)\n  return 3\nend\n
", + "should support the info string as a `language-` class (1)" + ); + + assert_eq!( + micromark("````;\n````"), + "
", + "should support the info string as a `language-` class (2)" + ); + + assert_eq!( + micromark("~~~~ ruby startline=3 $%@#$\ndef foo(x)\n return 3\nend\n~~~~~~~"), + "
def foo(x)\n  return 3\nend\n
", + "should support the info string as a `language-` class, but not the meta string" + ); + + // To do: code (text). + // assert_eq!( + // micromark("``` aa ```\nfoo"), + // "

aa\nfoo

", + // "should not support grave accents in the meta string" + // ); + + assert_eq!( + micromark("~~~ aa ``` ~~~\nfoo\n~~~"), + "
foo\n
", + "should support grave accents and tildes in the meta string of tilde fenced code" + ); + + assert_eq!( + micromark("```\n``` aaa\n```"), + "
``` aaa\n
", + "should not support info string on closing sequences" + ); + + // Our own: + assert_eq!( + micromark("``` "), + "
\n", + "should support an eof after whitespace, after the start fence sequence" + ); + + assert_eq!( + micromark("``` js\nalert(1)\n```"), + "
alert(1)\n
", + "should support whitespace between the sequence and the info string" + ); + + assert_eq!( + micromark("```js"), + "
\n", + "should support an eof after the info string" + ); + + assert_eq!( + micromark("``` js \nalert(1)\n```"), + "
alert(1)\n
", + "should support whitespace after the info string" + ); + + assert_eq!( + micromark("```\n "), + "
  \n
\n", + "should support an eof after whitespace in content" + ); + + assert_eq!( + micromark(" ```\n "), + "
\n", + "should support an eof in the prefix, in content" + ); + + // To do: strings. + // assert_eq!( + // micromark("```j\\+s©"), + // "
\n", + // "should support character escapes and character references in info strings" + // ); + + assert_eq!( + micromark(" ```\naaa\n ```"), + "
aaa\n ```\n
\n", + "should not support a closing sequence w/ too much indent, regardless of opening sequence (1)" + ); + + // To do: blockquote. + // assert_eq!( + // micromark("> ```\n>\n>\n>\n\na"), + // "
\n
\n\n\n
\n
\n

a

", + // "should not support a closing sequence w/ too much indent, regardless of opening sequence (2)" + // ); + + // assert_eq!( + // micromark("> ```a\nb"), + // "
\n
\n
\n

b

", + // "should not support lazyness (1)" + // ); + + // assert_eq!( + // micromark("> a\n```b"), + // "
\n

a

\n
\n
\n", + // "should not support lazyness (2)" + // ); + + // assert_eq!( + // micromark("> ```a\n```"), + // "
\n
\n
\n
\n", + // "should not support lazyness (3)" + // ); + + // To do: extensions. + // assert_eq!( + // micromark("```", {extensions: [{disable: {null: ["codeFenced"]}}]}), + // "

```

", + // "should support turning off code (fenced)" + // ); +} diff --git a/tests/code_indented.rs b/tests/code_indented.rs new file mode 100644 index 0000000..f5926c0 --- /dev/null +++ b/tests/code_indented.rs @@ -0,0 +1,196 @@ +extern crate micromark; +use micromark::micromark; + +#[test] +fn code_indented() { + assert_eq!( + micromark(" a simple\n indented code block"), + "
a simple\n  indented code block\n
", + "should support indented code" + ); + + // To do: list. + // assert_eq!( + // micromark(" - foo\n\n bar"), + // "", + // "should prefer list item content over indented code (1)" + // ); + + // assert_eq!( + // micromark("1. foo\n\n - bar"), + // "
    \n
  1. \n

    foo

    \n
      \n
    • bar
    • \n
    \n
  2. \n
", + // "should prefer list item content over indented code (2)" + // ); + + assert_eq!( + micromark(" \n *hi*\n\n - one"), + "
<a/>\n*hi*\n\n- one\n
", + "should support blank lines in indented code (1)" + ); + + assert_eq!( + micromark(" chunk1\n\n chunk2\n \n \n \n chunk3"), + "
chunk1\n\nchunk2\n\n\n\nchunk3\n
", + "should support blank lines in indented code (2)" + ); + + assert_eq!( + micromark(" chunk1\n \n chunk2"), + "
chunk1\n  \n  chunk2\n
", + "should support blank lines in indented code (3)" + ); + + // To do: paragraphs. + // assert_eq!( + // micromark("Foo\n bar"), + // "

Foo\nbar

", + // "should not support interrupting paragraphs" + // ); + + // To do: paragraphs. + // assert_eq!( + // micromark(" foo\nbar"), + // "
foo\n
\n

bar

", + // "should support paragraphs directly after indented code" + // ); + + // To do: setext. + // assert_eq!( + // micromark("# Heading\n foo\nHeading\n------\n foo\n----"), + // "

Heading

\n
foo\n
\n

Heading

\n
foo\n
\n
", + // "should mix w/ other content" + // ); + + assert_eq!( + micromark(" foo\n bar"), + "
    foo\nbar\n
", + "should support extra whitespace on the first line" + ); + + assert_eq!( + micromark("\n \n foo\n "), + "
foo\n
", + "should not support initial blank lines" + ); + + assert_eq!( + micromark(" foo "), + "
foo  \n
", + "should support trailing whitespace" + ); + + // To do: blockquote. + // assert_eq!( + // micromark("> a\nb"), + // "
\n
a\n
\n
\n

b

", + // "should not support lazyness (1)" + // ); + + // assert_eq!( + // micromark("> a\n b"), + // "
\n

a\nb

\n
", + // "should not support lazyness (2)" + // ); + + // assert_eq!( + // micromark("> a\n b"), + // "
\n

a\nb

\n
", + // "should not support lazyness (3)" + // ); + + // assert_eq!( + // micromark("> a\n b"), + // "
\n

a\nb

\n
", + // "should not support lazyness (4)" + // ); + + // assert_eq!( + // micromark("> a\n b"), + // "
\n
a\n
\n
\n
b\n
", + // "should not support lazyness (5)" + // ); + + // assert_eq!( + // micromark("> a\n b"), + // "
\n
a\n
\n
\n
 b\n
", + // "should not support lazyness (6)" + // ); + + // assert_eq!( + // micromark("> a\n b"), + // "
\n
a\n
\n
\n
  b\n
", + // "should not support lazyness (7)" + // ); + + // To do: extensions. + // assert_eq!( + // micromark(" a", {extensions: [{disable: {null: ["codeIndented"]}}]}), + // "

a

", + // "should support turning off code (indented, 1)" + // ); + + // assert_eq!( + // micromark("> a\n b", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "
\n

a\nb

\n
", + // "should support turning off code (indented, 2)" + // ); + + // assert_eq!( + // micromark("- a\n b", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "", + // "should support turning off code (indented, 3)" + // ); + + // assert_eq!( + // micromark("- a\n - b", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "", + // "should support turning off code (indented, 4)" + // ); + + // assert_eq!( + // micromark("- a\n - b", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "", + // "should support turning off code (indented, 5)" + // ); + + // assert_eq!( + // micromark("```\na\n ```", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "
a\n
", + // "should support turning off code (indented, 6)" + // ); + + // assert_eq!( + // micromark("a ", { + // allowDangerousHtml: true, + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "

a

", + // "should support turning off code (indented, 7)" + // ); + + // assert_eq!( + // micromark("- Foo\n---", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "\n
", + // "should support turning off code (indented, 8)" + // ); + + // assert_eq!( + // micromark("- Foo\n ---", { + // extensions: [{disable: {null: ["codeIndented"]}}] + // }), + // "", + // "should support turning off code (indented, 9)" + // ); +} diff --git a/tests/heading_atx.rs b/tests/heading_atx.rs new file mode 100644 index 0000000..b75d058 --- /dev/null +++ b/tests/heading_atx.rs @@ -0,0 +1,208 @@ +extern crate micromark; +use micromark::micromark; +#[test] +fn heading_atx() { + assert_eq!( + micromark("# foo"), + "

foo

", + "should support a heading w/ rank 1" + ); + + assert_eq!( + micromark("## foo"), + "

foo

", + "should support a heading w/ rank 2" + ); + + assert_eq!( + micromark("### foo"), + "

foo

", + "should support a heading w/ rank 3" + ); + + assert_eq!( + micromark("#### foo"), + "

foo

", + "should support a heading w/ rank 4" + ); + + assert_eq!( + micromark("##### foo"), + "
foo
", + "should support a heading w/ rank 5" + ); + + assert_eq!( + micromark("###### foo"), + "
foo
", + "should support a heading w/ rank 6" + ); + + assert_eq!( + micromark("####### foo"), + "

####### foo

", + "should not support a heading w/ rank 7" + ); + + assert_eq!( + micromark("#5 bolt"), + "

#5 bolt

", + "should not support a heading for a number sign not followed by whitespace (1)" + ); + + assert_eq!( + micromark("#hashtag"), + "

#hashtag

", + "should not support a heading for a number sign not followed by whitespace (2)" + ); + + // To do: phrasing. + // assert_eq!( + // micromark("\\## foo"), + // "

## foo

", + // "should not support a heading for an escaped number sign" + // ); + + // assert_eq!( + // micromark("# foo *bar* \\*baz\\*"), + // "

foo bar *baz*

", + // "should support text content in headings" + // ); + + assert_eq!( + micromark("# foo "), + "

foo

", + "should support arbitrary initial and final whitespace" + ); + + assert_eq!( + micromark(" ### foo"), + "

foo

", + "should support an initial space" + ); + + assert_eq!( + micromark(" ## foo"), + "

foo

", + "should support two initial spaces" + ); + + assert_eq!( + micromark(" # foo"), + "

foo

", + "should support three initial spaces" + ); + + assert_eq!( + micromark(" # foo"), + "
# foo\n
", + "should not support four initial spaces" + ); + + // To do: lazy. + // assert_eq!( + // micromark("foo\n # bar"), + // "

foo\n# bar

", + // "should not support four initial spaces when interrupting" + // ); + + assert_eq!( + micromark("## foo ##"), + "

foo

", + "should support a closing sequence (1)" + ); + + assert_eq!( + micromark(" ### bar ###"), + "

bar

", + "should support a closing sequence (2)" + ); + + assert_eq!( + micromark("# foo ##################################"), + "

foo

", + "should support a closing sequence w/ an arbitrary number of number signs (1)" + ); + + assert_eq!( + micromark("##### foo ##"), + "
foo
", + "should support a closing sequence w/ an arbitrary number of number signs (2)" + ); + + assert_eq!( + micromark("### foo ### "), + "

foo

", + "should support trailing whitespace after a closing sequence" + ); + + assert_eq!( + micromark("### foo ### b"), + "

foo ### b

", + "should not support other content after a closing sequence" + ); + + assert_eq!( + micromark("# foo#"), + "

foo#

", + "should not support a closing sequence w/o whitespace before it" + ); + + // Phrasing. + // assert_eq!( + // micromark("### foo \\###"), + // "

foo ###

", + // "should not support an “escaped” closing sequence (1)" + // ); + + // assert_eq!( + // micromark("## foo #\\##"), + // "

foo ###

", + // "should not support an “escaped” closing sequence (2)" + // ); + + // assert_eq!( + // micromark("# foo \\#"), + // "

foo #

", + // "should not support an “escaped” closing sequence (3)" + // ); + + assert_eq!( + micromark("****\n## foo\n****"), + "
\n

foo

\n
", + "should support atx headings when not surrounded by blank lines" + ); + + assert_eq!( + micromark("Foo bar\n# baz\nBar foo"), + "

Foo bar

\n

baz

\n

Bar foo

", + "should support atx headings interrupting paragraphs" + ); + + // Line endings. + assert_eq!( + micromark("## \n#\n### ###"), + "

\n

\n

", + "should support empty atx headings" + ); + + // To do: block quote. + // assert_eq!( + // micromark("> #\na"), + // "
\n

\n
\n

a

", + // "should not support lazyness (1)" + // ); + + // assert_eq!( + // micromark("> a\n#"), + // "
\n

a

\n
\n

", + // "should not support lazyness (2)" + // ); + + // Extensions: + // assert_eq!( + // micromark("# a", {extensions: [{disable: {null: ["headingAtx"]}}]}), + // "

# a

", + // "should support turning off heading (atx)" + // ); +} diff --git a/tests/html_flow.rs b/tests/html_flow.rs new file mode 100644 index 0000000..51d1a2a --- /dev/null +++ b/tests/html_flow.rs @@ -0,0 +1,1058 @@ +extern crate micromark; +use micromark::{micromark, micromark_with_options, CompileOptions}; + +const DANGER: &CompileOptions = &CompileOptions { + allow_dangerous_html: true, +}; + +#[test] +fn html_flow() { + assert_eq!( + micromark(""), + "<!-- asd -->", + "should support a heading w/ rank 1" + ); + + assert_eq!( + micromark_with_options("", DANGER), + "", + "should support a heading w/ rank 1" + ); + + // To do: extensions. + // assert_eq!( + // micromark_with_options("", {extensions: [{disable: {null: ["htmlFlow"]}}]}), + // "

<x>

", + // "should support turning off html (flow)" + // ); +} + +#[test] +fn html_flow_1_raw() { + assert_eq!( + micromark_with_options( + "

+import Text.HTML.TagSoup
+
+main :: IO ()
+main = print $ parseTags tags
+
+okay", + DANGER + ), + "

+import Text.HTML.TagSoup
+
+main :: IO ()
+main = print $ parseTags tags
+
+

okay

", + "should support raw pre tags (type 1)" + ); + + assert_eq!( + micromark_with_options( + " +okay", + DANGER + ), + " +

okay

", + "should support raw script tags" + ); + + assert_eq!( + micromark_with_options( + " +okay", + DANGER + ), + " +

okay

", + "should support raw style tags" + ); + + assert_eq!( + micromark_with_options("\n\nfoo", DANGER), + "\n\nfoo", + "should support raw tags w/o ending" + ); + + // To do: phrasing. + // assert_eq!( + // micromark_with_options("\n*foo*", DANGER), + // "\n

foo

", + // "should support raw tags w/ start and end on a single line" + // ); + + assert_eq!( + micromark_with_options("1. *bar*", DANGER), + "1. *bar*", + "should support raw tags w/ more data on ending line" + ); + + assert_eq!( + micromark_with_options("</script\nmore

", + // "should not support a raw closing tag" + // ); + + assert_eq!( + micromark_with_options("", DANGER), + "", + "should support blank lines in raw" + ); + + // To do: block quote. + // assert_eq!( + // micromark_with_options(">