]> gitweb.factorcode.org Git - factor.git/blob - basis/farkup/farkup-tests.factor
functors: inline the parts of interpolate this needs
[factor.git] / basis / farkup / farkup-tests.factor
1 ! Copyright (C) 2008 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: farkup kernel peg peg.ebnf tools.test namespaces xml
4 urls.encoding assocs xml.traversal xml.data sequences random
5 io continuations math ;
6 IN: farkup.tests
7
8 relative-link-prefix off
9 disable-images? off
10 link-no-follow? off
11
12 { "Baz" } [ "Foo/Bar/Baz" simple-link-title ] unit-test
13 { "Baz" } [ "Baz" simple-link-title ] unit-test
14
15 { } [
16     "abcd-*strong*\nasdifj\nweouh23ouh23" parse-farkup drop
17 ] unit-test
18
19 { } [
20     "abcd-*strong*\nasdifj\nweouh23ouh23\n" parse-farkup drop
21 ] unit-test
22
23 { "<p>a-b</p>" } [ "a-b" convert-farkup ] unit-test
24 { "<p><strong>foo</strong></p><p>bar</p>" } [ "*foo\nbar\n" convert-farkup ] unit-test
25 { "<p><strong>Wow!</strong></p>" } [ "*Wow!*" convert-farkup ] unit-test
26 { "<p><em>Wow.</em></p>" } [ "_Wow._" convert-farkup ] unit-test
27
28 { "<p><strong></strong></p>" } [ "*" convert-farkup ] unit-test
29 { "<p>*</p>" } [ "\\*" convert-farkup ] unit-test
30 { "<p>*<strong></strong></p>" } [ "\\**" convert-farkup ] unit-test
31
32 { "<ul><li>a-b</li></ul>" } [ "-a-b" convert-farkup ] unit-test
33 { "<ul><li>foo</li></ul>" } [ "-foo" convert-farkup ] unit-test
34 { "<ul><li>foo</li></ul>" } [ "-foo\n" convert-farkup ] unit-test
35 { "<ul><li>foo</li><li>bar</li></ul>" } [ "-foo\n-bar" convert-farkup ] unit-test
36 { "<ul><li>foo</li><li>bar</li></ul>" } [ "-foo\n-bar\n" convert-farkup ] unit-test
37
38 { "<ul><li>foo</li></ul><p>bar</p>" } [ "-foo\nbar\n" convert-farkup ] unit-test
39
40 { "<ol><li>a-b</li></ol>" } [ "#a-b" convert-farkup ] unit-test
41 { "<ol><li>foo</li></ol>" } [ "#foo" convert-farkup ] unit-test
42 { "<ol><li>foo</li></ol>" } [ "#foo\n" convert-farkup ] unit-test
43 { "<ol><li>foo</li><li>bar</li></ol>" } [ "#foo\n#bar" convert-farkup ] unit-test
44 { "<ol><li>foo</li><li>bar</li></ol>" } [ "#foo\n#bar\n" convert-farkup ] unit-test
45
46 { "<ol><li>foo</li></ol><p>bar</p>" } [ "#foo\nbar\n" convert-farkup ] unit-test
47
48
49 { "" } [ "\n\n" convert-farkup ] unit-test
50 { "" } [ "\r\n\r\n" convert-farkup ] unit-test
51 { "" } [ "\r\r\r\r" convert-farkup ] unit-test
52 { "" } [ "\r\r\r" convert-farkup ] unit-test
53 { "" } [ "\n\n\n" convert-farkup ] unit-test
54 { "<p>foo</p><p>bar</p>" } [ "foo\n\nbar" convert-farkup ] unit-test
55 { "<p>foo</p><p>bar</p>" } [ "foo\r\n\r\nbar" convert-farkup ] unit-test
56 { "<p>foo</p><p>bar</p>" } [ "foo\r\rbar" convert-farkup ] unit-test
57 { "<p>foo</p><p>bar</p>" } [ "foo\r\r\nbar" convert-farkup ] unit-test
58
59 { "<p>bar</p>" } [ "\nbar\n" convert-farkup ] unit-test
60 { "<p>bar</p>" } [ "\rbar\r" convert-farkup ] unit-test
61 { "<p>bar</p>" } [ "\r\nbar\r\n" convert-farkup ] unit-test
62
63 { "<p>foo</p><p>bar</p>" } [ "foo\n\n\nbar" convert-farkup ] unit-test
64
65 { "" } [ "" convert-farkup ] unit-test
66
67 { "<table><tr><td>a</td></tr></table>" }
68 [ "|a" convert-farkup ] unit-test
69
70 { "<table><tr><td>a</td></tr></table>" }
71 [ "|a|" convert-farkup ] unit-test
72
73 { "<table><tr><td>a</td><td>b</td></tr></table>" }
74 [ "|a|b|" convert-farkup ] unit-test
75
76 { "<table><tr><td>a</td><td>b</td></tr><tr><td>c</td><td>d</td></tr></table>" }
77 [ "|a|b|\n|c|d|" convert-farkup ] unit-test
78
79 { "<table><tr><td>a</td><td>b</td></tr><tr><td>c</td><td>d</td></tr></table>" }
80 [ "|a|b|\n|c|d|\n" convert-farkup ] unit-test
81
82 { "<p><strong>foo</strong></p><h1>aheading</h1><p>adfasd</p>" }
83 [ "*foo*\n=aheading=\nadfasd" convert-farkup ] unit-test
84
85 { "<h1>foo</h1>" } [ "=foo=\n" convert-farkup ] unit-test
86 { "<p>lol=foo=</p>" } [ "lol=foo=\n" convert-farkup ] unit-test
87 { "<p>=foo</p>" } [ "=foo\n" convert-farkup ] unit-test
88 { "<p>=foo</p>" } [ "=foo" convert-farkup ] unit-test
89 { "<p>==foo</p>" } [ "==foo" convert-farkup ] unit-test
90 { "<h1>foo</h1>" } [ "==foo=" convert-farkup ] unit-test
91 { "<h2>foo</h2>" } [ "==foo==" convert-farkup ] unit-test
92 { "<h2>foo</h2>" } [ "==foo==" convert-farkup ] unit-test
93 { "<h2>foo</h2>" } [ "===foo==" convert-farkup ] unit-test
94 { "<h1>foo</h1>" } [ "=foo==" convert-farkup ] unit-test
95
96 { "<pre><span class=\"KEYWORD3\">int</span> <span class=\"FUNCTION\">main</span><span class=\"OPERATOR\">(</span><span class=\"OPERATOR\">)</span></pre>" }
97 [ "[c{int main()}]" convert-farkup ] unit-test
98
99 { "<p><img src=\"lol.jpg\" alt=\"lol.jpg\"/></p>" } [ "[[image:lol.jpg]]" convert-farkup ] unit-test
100 { "<p><img src=\"lol.jpg\" alt=\"teh lol\"/></p>" } [ "[[image:lol.jpg|teh lol]]" convert-farkup ] unit-test
101 { "<p><a href=\"https://lol.com\">https://lol.com</a></p>" } [ "[[https://lol.com]]" convert-farkup ] unit-test
102 { "<p><a href=\"https://lol.com\">haha</a></p>" } [ "[[https://lol.com|haha]]" convert-farkup ] unit-test
103 { "<p><a href=\"https://lol.com/search?q=sex\">haha</a></p>" } [ "[[https://lol.com/search?q=sex|haha]]" convert-farkup ] unit-test
104 { "<p><a href=\"Foo/Bar\">Bar</a></p>" } [ "[[Foo/Bar]]" convert-farkup ] unit-test
105
106 "/wiki/view/" relative-link-prefix [
107     [ "<p><a href=\"/wiki/view/Foo/Bar\">Bar</a></p>" ] [ "[[Foo/Bar]]" convert-farkup ] unit-test
108 ] with-variable
109
110 { } [ "[{}]" convert-farkup drop ] unit-test
111
112 { "<pre>hello</pre>" } [ "[{hello}]" convert-farkup ] unit-test
113
114 {
115     "<p>Feature comparison:</p><table><tr><td>a</td><td>Factor</td><td>Java</td><td>Lisp</td></tr><tr><td>Coolness</td><td>Yes</td><td>No</td><td>No</td></tr><tr><td>Badass</td><td>Yes</td><td>No</td><td>No</td></tr><tr><td>Enterprise</td><td>Yes</td><td>Yes</td><td>No</td></tr><tr><td>Kosher</td><td>Yes</td><td>No</td><td>Yes</td></tr></table>"
116 } [ "Feature comparison:\n|a|Factor|Java|Lisp|\n|Coolness|Yes|No|No|\n|Badass|Yes|No|No|\n|Enterprise|Yes|Yes|No|\n|Kosher|Yes|No|Yes|\n" convert-farkup ] unit-test
117
118 {
119     "<p>Feature comparison:</p><table><tr><td>a</td><td>Factor</td><td>Java</td><td>Lisp</td></tr><tr><td>Coolness</td><td>Yes</td><td>No</td><td>No</td></tr><tr><td>Badass</td><td>Yes</td><td>No</td><td>No</td></tr><tr><td>Enterprise</td><td>Yes</td><td>Yes</td><td>No</td></tr><tr><td>Kosher</td><td>Yes</td><td>No</td><td>Yes</td></tr></table>"
120 } [ "Feature comparison:\n\n|a|Factor|Java|Lisp|\n|Coolness|Yes|No|No|\n|Badass|Yes|No|No|\n|Enterprise|Yes|Yes|No|\n|Kosher|Yes|No|Yes|\n" convert-farkup ] unit-test
121
122 {
123     "<p>This wiki is written in <a href=\"Factor\">Factor</a> and is hosted on a <a href=\"https://linode.com\">https://linode.com</a> virtual server.</p>"
124 } [
125     "This wiki is written in [[Factor]] and is hosted on a [[https://linode.com|https://linode.com]] virtual server."
126     convert-farkup
127 ] unit-test
128
129 { "<p><a href=\"a\">a</a> <a href=\"b\">c</a></p>" } [ "[[a]] [[b|c]]" convert-farkup ] unit-test
130
131 { "<p><a href=\"C%2B%2B\">C++</a></p>" } [ "[[C++]]" convert-farkup ] unit-test
132
133 { "<p>&lt;foo&gt;</p>" } [ "<foo>" convert-farkup ] unit-test
134
135 { "<p>asdf</p><ul><li>lol</li><li>haha</li></ul>" } [ "asdf\n-lol\n-haha" convert-farkup ] unit-test
136
137 { "<p>asdf</p><ul><li>lol</li><li>haha</li></ul>" }
138 [ "asdf\n\n-lol\n-haha" convert-farkup ] unit-test
139
140 { "<hr/>" } [ "___" convert-farkup ] unit-test
141 { "<hr/>" } [ "___\n" convert-farkup ] unit-test
142
143 { "<p>before:</p><pre><span class=\"OPERATOR\">{</span> <span class=\"DIGIT\">1</span> <span class=\"DIGIT\">2</span> <span class=\"DIGIT\">3</span> <span class=\"OPERATOR\">}</span> <span class=\"DIGIT\">1</span> tail</pre>" }
144 [ "before:\n[factor{{ 1 2 3 } 1 tail}]" convert-farkup ] unit-test
145
146 { "<p><a href=\"Factor\">Factor</a>-rific!</p>" }
147 [ "[[Factor]]-rific!" convert-farkup ] unit-test
148
149 { "<pre> 1 2 3 </pre>" }
150 [ "[ factor { 1 2 3 }]" convert-farkup ] unit-test
151
152 { "<p>paragraph</p><hr/>" }
153 [ "paragraph\n___" convert-farkup ] unit-test
154
155 { "<p>paragraph</p><p> a <em></em><em> b</em></p>" }
156 [ "paragraph\n a ___ b" convert-farkup ] unit-test
157
158 { "<ul><li> a</li></ul><hr/>" }
159 [ "\n- a\n___" convert-farkup ] unit-test
160
161 { "<p>hello<em>world how are you today?</em></p><ul><li> hello<em>world how are you today?</em></li></ul>" }
162 [ "hello_world how are you today?\n- hello_world how are you today?" convert-farkup ] unit-test
163
164 : check-link-escaping ( string -- link )
165     convert-farkup string>xml-chunk
166     "a" deep-tag-named "href" attr url-decode ;
167
168 { "Trader Joe\"s" } [ "[[Trader Joe\"s]]" check-link-escaping ] unit-test
169 { "<foo>" } [ "[[<foo>]]" check-link-escaping ] unit-test
170 { "&blah;" } [ "[[&blah;]]" check-link-escaping ] unit-test
171 { "C++" } [ "[[C++]]" check-link-escaping ] unit-test
172
173 { "<h1>The <em>important</em> thing</h1>" } [ "=The _important_ thing=" convert-farkup ] unit-test
174 { "<p><a href=\"Foo\"><strong>emphasized</strong> text</a></p>" } [ "[[Foo|*emphasized* text]]" convert-farkup ] unit-test
175 { "<table><tr><td><strong>bold</strong></td><td><em>italics</em></td></tr></table>" }
176 [ "|*bold*|_italics_|" convert-farkup ] unit-test
177 { "<p><em>italics<strong>both</strong></em></p>" } [ "_italics*both" convert-farkup ] unit-test
178 { "<p><em>italics<strong>both</strong></em></p>" } [ "_italics*both*" convert-farkup ] unit-test
179 { "<p><em>italics<strong>both</strong></em></p>" } [ "_italics*both*_" convert-farkup ] unit-test
180 { "<p><em>italics<strong>both</strong></em></p>" } [ "_italics*both_" convert-farkup ] unit-test
181 { "<p><em>italics<strong>both</strong></em>after<strong></strong></p>" } [ "_italics*both_after*" convert-farkup ] unit-test
182 { "<table><tr><td>foo|bar</td></tr></table>" } [ "|foo\\|bar|" convert-farkup ] unit-test
183 { "<p></p>" } [ "\\" convert-farkup ] unit-test
184
185 { "<p>[abc]</p>" } [ "[abc]" convert-farkup ] unit-test
186
187 : random-markup ( -- string )
188     10 [
189         2 random 1 = [
190             {
191                 "[["
192                 "*"
193                 "_"
194                 "|"
195                 "-"
196                 "[{"
197                 "\n"
198             } random
199         ] [
200             "abc"
201         ] if
202     ] replicate concat ;
203
204 { t } [
205     100 [
206         drop random-markup
207         [ convert-farkup drop t ] [ drop print f ] recover
208     ] all-integers?
209 ] unit-test
210
211 { "<p><a href=\"https://foo.com/~foo\">https://foo.com/~foo</a></p>" } [ "[[https://foo.com/~foo]]" convert-farkup ] unit-test