Mercurial
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 })(); |