1 ! Copyright (C) 2017 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: modern modern.slices multiline tools.test ;
6 { f } [ "" upper-colon? ] unit-test
7 { t } [ ":" upper-colon? ] unit-test
8 { t } [ "::" upper-colon? ] unit-test
9 { t } [ ":::" upper-colon? ] unit-test
10 { t } [ "FOO:" upper-colon? ] unit-test
11 { t } [ "FOO::" upper-colon? ] unit-test
12 { t } [ "FOO:::" upper-colon? ] unit-test
15 { f } [ "'" upper-colon? ] unit-test
16 { t } [ "':" upper-colon? ] unit-test
17 { t } [ "'::" upper-colon? ] unit-test
18 { t } [ "':::" upper-colon? ] unit-test
19 { t } [ "'FOO:" upper-colon? ] unit-test
20 { t } [ "'FOO::" upper-colon? ] unit-test
21 { t } [ "'FOO:::" upper-colon? ] unit-test
23 ! \FOO: is not an upper-colon form, it is deactivated by the \
24 { f } [ "\\" upper-colon? ] unit-test
25 { f } [ "\\:" upper-colon? ] unit-test
26 { f } [ "\\::" upper-colon? ] unit-test
27 { f } [ "\\:::" upper-colon? ] unit-test
28 { f } [ "\\FOO:" upper-colon? ] unit-test
29 { f } [ "\\FOO::" upper-colon? ] unit-test
30 { f } [ "\\FOO:::" upper-colon? ] unit-test
36 } [ "!" string>literals >strings ] unit-test
40 } [ "! lol" string>literals >strings ] unit-test
44 } [ "lol!" string>literals >strings ] unit-test
48 } [ "!lol" string>literals >strings ] unit-test
53 } [ ":asdf:" string>literals >strings ] unit-test
56 { { "one:" { "1" } } }
57 } [ "one: 1" string>literals >strings ] unit-test
60 { { "two::" { "1" "2" } } }
61 } [ "two:: 1 2" string>literals >strings ] unit-test
65 } [ "1 :> one" string>literals >strings ] unit-test
68 { { ":" { "foo" } ";" } }
69 } [ ": foo ;" string>literals >strings ] unit-test
76 } [ "FOO: a BAR: b" string>literals >strings ] unit-test
79 { { "FOO:" { "a" } ";" } }
80 } [ "FOO: a ;" string>literals >strings ] unit-test
83 { { "FOO:" { "a" } "FOO;" } }
84 } [ "FOO: a FOO;" string>literals >strings ] unit-test
90 } [ "<A A>" string>literals >strings ] unit-test
93 { { "<B:" { "hi" } ";B>" } }
94 } [ "<B: hi ;B>" string>literals >strings ] unit-test
96 { { "<foo>" } } [ "<foo>" string>literals >strings ] unit-test
97 { { ">foo<" } } [ ">foo<" string>literals >strings ] unit-test
99 { { "foo>" } } [ "foo>" string>literals >strings ] unit-test
100 { { ">foo" } } [ ">foo" string>literals >strings ] unit-test
101 { { ">foo>" } } [ ">foo>" string>literals >strings ] unit-test
102 { { ">>foo>" } } [ ">>foo>" string>literals >strings ] unit-test
103 { { ">>foo>>" } } [ ">>foo>>" string>literals >strings ] unit-test
105 { { "foo<" } } [ "foo<" string>literals >strings ] unit-test
106 { { "<foo" } } [ "<foo" string>literals >strings ] unit-test
107 { { "<foo<" } } [ "<foo<" string>literals >strings ] unit-test
108 { { "<<foo<" } } [ "<<foo<" string>literals >strings ] unit-test
109 { { "<<foo<<" } } [ "<<foo<<" string>literals >strings ] unit-test
111 ! Backslash \AVL{ foo\bar foo\bar{
113 { { "SYNTAX:" { "\\AVL{" } } }
114 } [ "SYNTAX: \\AVL{" string>literals >strings ] unit-test
116 [ "\\" string>literals >strings ] must-fail ! \ alone should be legal eventually (?)
118 { { "\\FOO" } } [ "\\FOO" string>literals >strings ] unit-test
122 } [ "foo\\bar" string>literals >strings ] unit-test
124 [ "foo\\bar{" string>literals >strings ] must-fail
127 { { "foo\\bar{" { "1" } "}" } }
128 } [ "foo\\bar{ 1 }" string>literals >strings ] unit-test
130 { { { "char:" { "\\{" } } } } [ "char: \\{" string>literals >strings ] unit-test
131 [ "char: {" string>literals >strings ] must-fail
132 [ "char: [" string>literals >strings ] must-fail
133 [ "char: {" string>literals >strings ] must-fail
134 [ "char: \"" string>literals >strings ] must-fail
135 ! { { { "char:" { "\\\\" } } } } [ "char: \\\\" string>literals >strings ] unit-test
137 [ "char: \\" string>literals >strings ] must-fail ! char: \ should be legal eventually
139 { { { "\\" { "(" } } } } [ "\\ (" string>literals >strings ] unit-test
141 { { "\\[[" } } [ "\\[[" string>literals >strings ] unit-test
142 { { "\\[=[" } } [ "\\[=[" string>literals >strings ] unit-test
143 { { "\\[==[" } } [ "\\[==[" string>literals >strings ] unit-test
146 { t } [ "FOO:" strict-upper? ] unit-test
147 { t } [ ":" strict-upper? ] unit-test
148 { f } [ "<FOO" strict-upper? ] unit-test
149 { f } [ "<FOO:" strict-upper? ] unit-test
150 { f } [ "->" strict-upper? ] unit-test
151 { f } [ "FOO>" strict-upper? ] unit-test
152 { f } [ ";FOO>" strict-upper? ] unit-test
154 { f } [ "FOO" section-open? ] unit-test
155 { f } [ "FOO:" section-open? ] unit-test
156 { f } [ ";FOO" section-close? ] unit-test
157 { f } [ "FOO" section-close? ] unit-test
162 { { "url\"" "google.com" "\"" } }
163 } [ [[ url"google.com" ]] string>literals >strings ] unit-test
166 { { "\"" "google.com" "\"" } }
167 } [ [[ "google.com" ]] string>literals >strings ] unit-test
171 { "(" { "a" "b" } ")" }
172 { "[" { "a" "b" "+" } "]" }
175 } [ "( a b ) [ a b + ] ( c )" string>literals >strings ] unit-test
178 ! Concatenated syntax
182 { "(" { "a" "b" } ")" }
183 { "[" { "a" "b" "+" } "]" }
187 } [ "( a b )[ a b + ]( c )" string>literals >strings ] unit-test
196 } [ "\"abc\"[ 0 ]" string>literals >strings ] unit-test
202 { "<FOO" { { "BAR:" { "bar" } } } "FOO>" }
204 } [ "<FOO BAR: bar FOO>" string>literals >strings ] unit-test
208 { "<FOO:" { "foo" { "BAR:" { "bar" } } } ";FOO>" }
210 } [ "<FOO: foo BAR: bar ;FOO>" string>literals >strings ] unit-test
221 { "<FOO" { } "FOO>" }
227 { { "<BAR" { } "BAR>" } }
232 } [ "foo:: <FOO FOO>[ 0 ][ 1 ][ 2 ][ 3 ] <BAR BAR>" string>literals >strings ] unit-test
237 { "foo::" { { "<FOO" { } "FOO>" } { "[" { "0" } "]" } } }
241 { "<BAR" { } "BAR>" }
243 } [ "foo:: <FOO FOO> [ 0 ] [ 1 ] [ 2 ] [ 3 ] <BAR BAR>" string>literals >strings ] unit-test