aboutsummaryrefslogtreecommitdiffstats
path: root/tests/fuzz.rs
blob: 297e6a96138c431b6372538230a91201f7a39c90 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use markdown::{mdast, to_html, to_html_with_options, to_mdast, Options};
use pretty_assertions::assert_eq;

#[test]
fn fuzz() -> Result<(), String> {
    assert_eq!(
        to_html("[\n~\na\n-\n\n"),
        "<h2>[\n~\na</h2>\n",
        "1: label, blank lines, and code"
    );

    // The first link is stopped by the `+` (so it’s `a@b.c`), but the next
    // link overlaps it (`b.c+d@e.f`).
    assert_eq!(
        to_html_with_options("a@b.c+d@e.f", &Options::gfm())?,
        "<p><a href=\"mailto:a@b.c\">a@b.c</a><a href=\"mailto:+d@e.f\">+d@e.f</a></p>",
        "2: gfm: email autolink literals running into each other"
    );

    assert_eq!(
        to_html("    x\n*    "),
        "<pre><code>x\n</code></pre>\n<ul>\n<li></li>\n</ul>",
        "3-a: containers should not pierce into indented code"
    );

    assert_eq!(
        to_html("    a\n*     b"),
        "<pre><code>a\n</code></pre>\n<ul>\n<li>\n<pre><code>b\n</code></pre>\n</li>\n</ul>",
        "3-b: containers should not pierce into indented code"
    );

    assert_eq!(
        to_html("a * "),
        "<p>a *</p>",
        "4-a: trailing whitespace and broken data"
    );

    assert_eq!(
        to_html("_  "),
        "<p>_</p>",
        "4-b: trailing whitespace and broken data (GH-13)"
    );

    assert_eq!(
        to_html_with_options("a ~ ", &Options::gfm())?,
        "<p>a ~</p>",
        "4-c: trailing whitespace and broken data (GH-14)"
    );

    assert!(
        matches!(
            to_mdast("123456789. ok", &Default::default()),
            Ok(mdast::Node::Root(_))
        ),
        "5: lists should support high start numbers (GH-17)"
    );

    assert_eq!(
        to_html("> ```\n"),
        "<blockquote>\n<pre><code>\n</code></pre>\n</blockquote>",
        "6-a: container close after unclosed fenced code, with eol (block quote, GH-16)"
    );

    assert_eq!(
        to_html("- ```\n"),
        "<ul>\n<li>\n<pre><code>\n</code></pre>\n</li>\n</ul>",
        "6-b: container close after unclosed fenced code, with eol (list, GH-16)"
    );

    assert_eq!(
        to_html_with_options("> x\n``", &Options::gfm()),
        Ok("<blockquote>\n<p>x</p>\n</blockquote>\n<p>``</p>".into()),
        "7: lazy container lines almost starting fenced code (GH-19)"
    );

    assert_eq!(
        to_html_with_options("a\tb@c.d", &Options::gfm()),
        Ok("<p>a\t<a href=\"mailto:b@c.d\">b@c.d</a></p>".into()),
        "8-a: autolink literals after tabs (GH-18)"
    );

    assert_eq!(
        to_html_with_options("aa\tb@c.d", &Options::gfm()),
        Ok("<p>aa\t<a href=\"mailto:b@c.d\">b@c.d</a></p>".into()),
        "8-b: autolink literals after tabs (GH-18)"
    );

    assert_eq!(
        to_html_with_options("aaa\tb@c.d", &Options::gfm()),
        Ok("<p>aaa\t<a href=\"mailto:b@c.d\">b@c.d</a></p>".into()),
        "8-c: autolink literals after tabs (GH-18)"
    );

    assert_eq!(
        to_html_with_options("aaaa\tb@c.d", &Options::gfm()),
        Ok("<p>aaaa\t<a href=\"mailto:b@c.d\">b@c.d</a></p>".into()),
        "8-d: autolink literals after tabs (GH-18)"
    );

    assert_eq!(
        to_html_with_options("| a |\n| - |\n| www.a|", &Options::gfm()),
        Ok("<table>\n<thead>\n<tr>\n<th>a</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"http://www.a\">www.a</a></td>\n</tr>\n</tbody>\n</table>".into()),
        "9: autolink literals that end in table cell delimiter (GH-20)"
    );

    assert_eq!(
        to_html_with_options("[*]() [*]()", &Options::gfm()),
        Ok("<p><a href=\"\">*</a> <a href=\"\">*</a></p>".into()),
        "10: attention in different links (GH-21)"
    );

    assert!(
        matches!(
            to_mdast("* [ ]\na", &Default::default()),
            Ok(mdast::Node::Root(_))
        ),
        "11: gfm task list items followed by eols (GH-24)"
    );

    Ok(())
}