comparison .cms/lib/codemirror/mode/soy/test.js @ 0:78edf6b517a0 draft

24.10
author Coffee CMS <info@coffee-cms.ru>
date Fri, 11 Oct 2024 22:40:23 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:78edf6b517a0
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
2 // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3
4 (function() {
5 var mode = CodeMirror.getMode({indentUnit: 2}, "soy");
6 function MT(name) {test.mode(name, mode, Array.prototype.slice.call(arguments, 1));}
7
8 // Test of small keywords and words containing them.
9 MT('keywords-test',
10 '[keyword {] [keyword as] worrying [keyword and] notorious [keyword as]',
11 ' the Fandor[operator -]alias assassin, [keyword or]',
12 ' Corcand cannot fit [keyword in] [keyword }]');
13
14 MT('let-test',
15 '[keyword {template] [def .name][keyword }]',
16 ' [keyword {let] [def $name]: [string "world"][keyword /}]',
17 ' [tag&bracket <][tag h1][tag&bracket >]',
18 ' Hello, [keyword {][variable-2 $name][keyword }]',
19 ' [tag&bracket </][tag h1][tag&bracket >]',
20 '[keyword {/template}]',
21 '');
22
23 MT('function-test',
24 '[keyword {] [callee&variable css]([string "MyClass"])[keyword }]',
25 '[tag&bracket <][tag input] [attribute value]=[string "]' +
26 '[keyword {] [callee&variable index]([variable-2&error $list])[keyword }]' +
27 '[string "][tag&bracket />]');
28
29 MT('soy-element-composition-test',
30 '[keyword <{][callee&variable foo]()[keyword }]',
31 '[keyword ></>]');
32
33 MT('soy-element-composition-attribute-test',
34 '[keyword <{][callee&variable foo]()[keyword }]',
35 '[attribute class]=[string "Foo"]',
36 '[keyword ></>]');
37
38 MT('namespace-test',
39 '[keyword {namespace] [variable namespace][keyword }]')
40
41 MT('namespace-with-attribute-test',
42 '[keyword {namespace] [variable my.namespace.templates] ' +
43 '[attribute requirecss]=[string "my.namespace"][keyword }]');
44
45 MT('operators-test',
46 '[keyword {] [atom 1] [operator ==] [atom 1] [keyword }]',
47 '[keyword {] [atom 1] [operator !=] [atom 2] [keyword }]',
48 '[keyword {] [atom 2] [operator +] [atom 2] [keyword }]',
49 '[keyword {] [atom 2] [operator -] [atom 2] [keyword }]',
50 '[keyword {] [atom 2] [operator *] [atom 2] [keyword }]',
51 '[keyword {] [atom 2] [operator /] [atom 2] [keyword }]',
52 '[keyword {] [atom 2] [operator %] [atom 2] [keyword }]',
53 '[keyword {] [atom 2] [operator <=] [atom 2] [keyword }]',
54 '[keyword {] [atom 2] [operator >=] [atom 2] [keyword }]',
55 '[keyword {] [atom 3] [operator >] [atom 2] [keyword }]',
56 '[keyword {] [atom 2] [operator >] [atom 3] [keyword }]',
57 '[keyword {] [atom null] [operator ?:] [string ""] [keyword }]',
58 '[keyword {] [variable-2&error $variable] [operator |] safeHtml [keyword }]')
59
60 MT('primitive-test',
61 '[keyword {] [atom true] [keyword }]',
62 '[keyword {] [atom false] [keyword }]',
63 '[keyword {] truethy [keyword }]',
64 '[keyword {] falsey [keyword }]',
65 '[keyword {] [atom 42] [keyword }]',
66 '[keyword {] [atom .42] [keyword }]',
67 '[keyword {] [atom 0.42] [keyword }]',
68 '[keyword {] [atom -0.42] [keyword }]',
69 '[keyword {] [atom -.2] [keyword }]',
70 '[keyword {] [atom 6.03e23] [keyword }]',
71 '[keyword {] [atom -0.03e0] [keyword }]',
72 '[keyword {] [atom 0x1F] [keyword }]',
73 '[keyword {] [atom 0x1F00BBEA] [keyword }]');
74
75 MT('param-type-record',
76 '[keyword {@param] [def record]: [[[property foo]: [type bool], [property bar]: [type int] ]][keyword }]'
77 );
78
79 MT('param-type-map',
80 '[keyword {@param] [def unknown]: [type map]<[type string], [type bool]>[keyword }]'
81 );
82
83 MT('param-type-list',
84 '[keyword {@param] [def list]: [type list]<[type ?]>[keyword }]'
85 );
86
87 MT('param-type-any',
88 '[keyword {@param] [def unknown]: [type ?][keyword }]'
89 );
90
91 MT('param-type-nested',
92 '[keyword {@param] [def a]: ' +
93 '[type list]<[[[property a]: [type int], ' +
94 '[property b]: [type map]<[type string], ' +
95 '[type bool]>]]>][keyword }]');
96
97 MT('undefined-var',
98 '[keyword {][variable-2&error $var]');
99
100 MT('param-scope-test',
101 '[keyword {template] [def .a][keyword }]',
102 ' [keyword {@param] [def x]: [type string][keyword }]',
103 ' [keyword {][variable-2 $x][keyword }]',
104 '[keyword {/template}]',
105 '',
106 '[keyword {template] [def .b][keyword }]',
107 ' [keyword {][variable-2&error $x][keyword }]',
108 '[keyword {/template}]',
109 '');
110
111 MT('if-variable-test',
112 '[keyword {if] [variable-2&error $showThing][keyword }]',
113 ' Yo!',
114 '[keyword {/if}]',
115 '');
116
117 MT('defined-if-variable-test',
118 '[keyword {template] [def .foo][keyword }]',
119 ' [keyword {@param?] [def showThing]: [type bool][keyword }]',
120 ' [keyword {if] [variable-2 $showThing][keyword }]',
121 ' Yo!',
122 ' [keyword {/if}]',
123 '[keyword {/template}]',
124 '');
125
126 MT('template-calls-test',
127 '[keyword {call] [variable-2 .foo][keyword /}]',
128 '[keyword {call] [variable foo][keyword /}]',
129 '[keyword {call] [variable foo][keyword }] [keyword {/call}]',
130 '[keyword {call] [variable first1.second.third_3][keyword /}]',
131 '[keyword {call] [variable first1.second.third_3] [keyword }] [keyword {/call}]',
132 '');
133
134 MT('foreach-scope-test',
135 '[keyword {@param] [def bar]: [type string][keyword }]',
136 '[keyword {foreach] [def $foo] [keyword in] [variable-2&error $foos][keyword }]',
137 ' [keyword {][variable-2 $foo][keyword }]',
138 '[keyword {/foreach}]',
139 '[keyword {][variable-2&error $foo][keyword }]',
140 '[keyword {][variable-2 $bar][keyword }]');
141
142 MT('foreach-ifempty-indent-test',
143 '[keyword {foreach] [def $foo] [keyword in] [variable-2&error $foos][keyword }]',
144 ' something',
145 '[keyword {ifempty}]',
146 ' nothing',
147 '[keyword {/foreach}]',
148 '');
149
150 MT('foreach-index',
151 '[keyword {foreach] [def $foo],[def $index] [keyword in] [[]] [keyword }]',
152 ' [keyword {][variable-2 $foo][keyword }] [keyword {][variable-2 $index][keyword }]',
153 '[keyword {/foreach}]');
154
155 MT('nested-kind-test',
156 '[keyword {template] [def .foo] [attribute kind]=[string "html"][keyword }]',
157 ' [tag&bracket <][tag div][tag&bracket >]',
158 ' [keyword {call] [variable-2 .bar][keyword }]',
159 ' [keyword {param] [property propertyName] [attribute kind]=[string "js"][keyword }]',
160 ' [keyword var] [def bar] [operator =] [number 5];',
161 ' [keyword {/param}]',
162 ' [keyword {/call}]',
163 ' [tag&bracket </][tag div][tag&bracket >]',
164 '[keyword {/template}]',
165 '');
166
167 MT('tag-starting-with-function-call-is-not-a-keyword',
168 '[keyword {][callee&variable index]([variable-2&error $foo])[keyword }]',
169 '[keyword {css] [string "some-class"][keyword }]',
170 '[keyword {][callee&variable css]([string "some-class"])[keyword }]',
171 '');
172
173 MT('allow-missing-colon-in-@param',
174 '[keyword {template] [def .foo][keyword }]',
175 ' [keyword {@param] [def showThing] [type bool][keyword }]',
176 ' [keyword {if] [variable-2 $showThing][keyword }]',
177 ' Yo!',
178 ' [keyword {/if}]',
179 '[keyword {/template}]',
180 '');
181
182 MT('param-type-and-default-value',
183 '[keyword {template] [def .foo][keyword }]',
184 ' [keyword {@param] [def bar]: [type bool] = [atom true][keyword }]',
185 '[keyword {/template}]',
186 '');
187
188 MT('attribute-type',
189 '[keyword {template] [def .foo][keyword }]',
190 ' [keyword {@attribute] [def bar]: [type string][keyword }]',
191 '[keyword {/template}]',
192 '');
193
194 MT('attribute-type-optional',
195 '[keyword {template] [def .foo][keyword }]',
196 ' [keyword {@attribute] [def bar]: [type string][keyword }]',
197 '[keyword {/template}]',
198 '');
199
200 MT('attribute-type-all',
201 '[keyword {template] [def .foo][keyword }]',
202 ' [keyword {@attribute] [type *][keyword }]',
203 '[keyword {/template}]',
204 '');
205
206 MT('state-variable-reference',
207 '[keyword {template] [def .foo][keyword }]',
208 ' [keyword {@param] [def bar]:= [atom true][keyword }]',
209 ' [keyword {@state] [def foobar]:= [variable-2 $bar][keyword }]',
210 '[keyword {/template}]',
211 '');
212
213 MT('param-type-template',
214 '[keyword {template] [def .foo][keyword }]',
215 ' [keyword {@param] [def renderer]: ([def s]:[type string])=>[type html][keyword }]',
216 ' [keyword {call] [variable-2 $renderer] [keyword /}]',
217 '[keyword {/template}]',
218 '');
219
220 MT('single-quote-strings',
221 '[keyword {][string "foo"] [string \'bar\'][keyword }]',
222 '');
223
224 MT('literal-comments',
225 '[keyword {literal}]/* comment */ // comment[keyword {/literal}]');
226
227 MT('highlight-command-at-eol',
228 '[keyword {msg]',
229 ' [keyword }]');
230
231 MT('switch-indent-test',
232 '[keyword {let] [def $marbles]: [atom 5] [keyword /}]',
233 '[keyword {switch] [variable-2 $marbles][keyword }]',
234 ' [keyword {case] [atom 0][keyword }]',
235 ' No marbles',
236 ' [keyword {default}]',
237 ' At least 1 marble',
238 '[keyword {/switch}]',
239 '');
240
241 MT('if-elseif-else-indent',
242 '[keyword {if] [atom true][keyword }]',
243 ' [keyword {let] [def $a]: [atom 5] [keyword /}]',
244 '[keyword {elseif] [atom false][keyword }]',
245 ' [keyword {let] [def $bar]: [atom 5] [keyword /}]',
246 '[keyword {else}]',
247 ' [keyword {let] [def $bar]: [atom 5] [keyword /}]',
248 '[keyword {/if}]');
249
250 MT('msg-fallbackmsg-indent',
251 '[keyword {msg] [attribute desc]=[string "A message"][keyword }]',
252 ' A message',
253 '[keyword {fallbackmsg] [attribute desc]=[string "A message"][keyword }]',
254 ' Old message',
255 '[keyword {/msg}]');
256
257 MT('literal-indent',
258 '[keyword {template] [def .name][keyword }]',
259 ' [keyword {literal}]',
260 ' Lerum',
261 ' [keyword {/literal}]',
262 ' Ipsum',
263 '[keyword {/template}]');
264
265 MT('special-chars',
266 '[keyword {sp}]',
267 '[keyword {nil}]',
268 '[keyword {\\r}]',
269 '[keyword {\\n}]',
270 '[keyword {\\t}]',
271 '[keyword {lb}]',
272 '[keyword {rb}]');
273
274 MT('let-list-literal',
275 '[keyword {let] [def $test]: [[[[[string \'a\'] ], [[[string \'b\'] ] ] [keyword /}]');
276
277 MT('let-record-literal',
278 '[keyword {let] [def $test]: [keyword record]([property test]: [callee&variable bidiGlobalDir](), ' +
279 '[property foo]: [atom 5]) [keyword /}]');
280
281 MT('let-map-literal',
282 '[keyword {let] [def $test]: [keyword map]([string \'outer\']: [keyword map]([atom 5]: [atom false]), ' +
283 '[string \'foo\']: [string \'bar\']) [keyword /}]');
284
285 MT('wrong-closing-tag',
286 '[keyword {if] [atom true][keyword }]',
287 ' Optional',
288 '[keyword&error {/badend][keyword }]');
289
290 MT('list-comprehension',
291 '[keyword {let] [def $myList]: [[[[[string \'a\'] ] ] [keyword /}] ' +
292 '[keyword {let] [def $test]: [[[variable $a] [operator +] [atom 1] [keyword for] ' +
293 '[def $a] [keyword in] [variable-2 $myList] [keyword if] [variable-2 $a] [operator >=] [atom 3] ] [keyword /}]');
294
295 MT('list-comprehension-index',
296 '[keyword {let] [def $test]: [[[variable $a] [operator +] [variable $index] [keyword for] ' +
297 '[def $a],[def $index] [keyword in] [[]] [keyword if] [variable-2 $a] [operator >=] [variable-2 $index] ] [keyword /}]');
298
299
300 MT('list-comprehension-variable-scope',
301 '[keyword {let] [def $name]: [string "world"][keyword /}]',
302 '[keyword {let] [def $test]: [[[variable $a] [operator +] [variable $index] [keyword for] ' +
303 '[def $a],[def $index] [keyword in] [[]] [keyword if] [variable-2 $a] [operator >=] [variable-2 $index] ] [keyword /}]',
304 '[keyword {][variable-2&error $a][keyword }]',
305 '[keyword {][variable-2&error $index][keyword }]',
306 '[keyword {][variable-2 $test][keyword }]',
307 '[keyword {][variable-2 $name][keyword }]');
308
309 MT('import',
310 '[keyword import] {[def Name], [variable Person] [keyword as] [def P]} [keyword from] [string \'examples/proto/example.proto\'];');
311
312 MT('velog',
313 '[keyword {velog] [variable-2&error $data][keyword }] Logged [keyword {/velog}]');
314
315 MT('extern', '[keyword {extern] [def renderer]: ([def s]:[type string])=>[type string][keyword }] [keyword {/extern}]');
316
317 MT('export extern', '[keyword {export] [keyword extern] [def renderer]: ([def s]:[type string])=>[type string][keyword }] [keyword {/extern}]');
318
319 MT('const',
320 '[keyword {const] [def FOO] = [atom 5] [keyword /}]',
321 '[keyword {export] [keyword const] [def FOO] = [atom 5] [keyword /}]');
322 })();