1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others |
---|
2 | // Distributed under an MIT license: http://codemirror.net/LICENSE |
---|
3 | |
---|
4 | (function() { |
---|
5 | var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); |
---|
6 | function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } |
---|
7 | |
---|
8 | MT("locals", |
---|
9 | "[keyword function] [variable foo]([def a], [def b]) { [keyword var] [def c] [operator =] [number 10]; [keyword return] [variable-2 a] [operator +] [variable-2 c] [operator +] [variable d]; }"); |
---|
10 | |
---|
11 | MT("comma-and-binop", |
---|
12 | "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); |
---|
13 | |
---|
14 | MT("destructuring", |
---|
15 | "([keyword function]([def a], [[[def b], [def c] ]]) {", |
---|
16 | " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", |
---|
17 | " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", |
---|
18 | "})();"); |
---|
19 | |
---|
20 | MT("class_body", |
---|
21 | "[keyword class] [variable Foo] {", |
---|
22 | " [property constructor]() {}", |
---|
23 | " [property sayName]() {", |
---|
24 | " [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];", |
---|
25 | " }", |
---|
26 | "}"); |
---|
27 | |
---|
28 | MT("class", |
---|
29 | "[keyword class] [variable Point] [keyword extends] [variable SuperThing] {", |
---|
30 | " [property get] [property prop]() { [keyword return] [number 24]; }", |
---|
31 | " [property constructor]([def x], [def y]) {", |
---|
32 | " [keyword super]([string 'something']);", |
---|
33 | " [keyword this].[property x] [operator =] [variable-2 x];", |
---|
34 | " }", |
---|
35 | "}"); |
---|
36 | |
---|
37 | MT("module", |
---|
38 | "[keyword module] [string 'foo'] {", |
---|
39 | " [keyword export] [keyword let] [def x] [operator =] [number 42];", |
---|
40 | " [keyword export] [keyword *] [keyword from] [string 'somewhere'];", |
---|
41 | "}"); |
---|
42 | |
---|
43 | MT("import", |
---|
44 | "[keyword function] [variable foo]() {", |
---|
45 | " [keyword import] [def $] [keyword from] [string 'jquery'];", |
---|
46 | " [keyword module] [def crypto] [keyword from] [string 'crypto'];", |
---|
47 | " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", |
---|
48 | "}"); |
---|
49 | |
---|
50 | MT("const", |
---|
51 | "[keyword function] [variable f]() {", |
---|
52 | " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", |
---|
53 | "}"); |
---|
54 | |
---|
55 | MT("for/of", |
---|
56 | "[keyword for]([keyword let] [variable of] [keyword of] [variable something]) {}"); |
---|
57 | |
---|
58 | MT("generator", |
---|
59 | "[keyword function*] [variable repeat]([def n]) {", |
---|
60 | " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", |
---|
61 | " [keyword yield] [variable-2 i];", |
---|
62 | "}"); |
---|
63 | |
---|
64 | MT("quotedStringAddition", |
---|
65 | "[keyword let] [variable f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];"); |
---|
66 | |
---|
67 | MT("quotedFatArrow", |
---|
68 | "[keyword let] [variable f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];"); |
---|
69 | |
---|
70 | MT("fatArrow", |
---|
71 | "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", |
---|
72 | "[variable a];", // No longer in scope |
---|
73 | "[keyword let] [variable f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", |
---|
74 | "[variable c];"); |
---|
75 | |
---|
76 | MT("spread", |
---|
77 | "[keyword function] [variable f]([def a], [meta ...][def b]) {", |
---|
78 | " [variable something]([variable-2 a], [meta ...][variable-2 b]);", |
---|
79 | "}"); |
---|
80 | |
---|
81 | MT("comprehension", |
---|
82 | "[keyword function] [variable f]() {", |
---|
83 | " [[([variable x] [operator +] [number 1]) [keyword for] ([keyword var] [def x] [keyword in] [variable y]) [keyword if] [variable pred]([variable-2 x]) ]];", |
---|
84 | " ([variable u] [keyword for] ([keyword var] [def u] [keyword of] [variable generateValues]()) [keyword if] ([variable-2 u].[property color] [operator ===] [string 'blue']));", |
---|
85 | "}"); |
---|
86 | |
---|
87 | MT("quasi", |
---|
88 | "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); |
---|
89 | |
---|
90 | MT("quasi_no_function", |
---|
91 | "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); |
---|
92 | |
---|
93 | MT("indent_statement", |
---|
94 | "[keyword var] [variable x] [operator =] [number 10]", |
---|
95 | "[variable x] [operator +=] [variable y] [operator +]", |
---|
96 | " [atom Infinity]", |
---|
97 | "[keyword debugger];"); |
---|
98 | |
---|
99 | MT("indent_if", |
---|
100 | "[keyword if] ([number 1])", |
---|
101 | " [keyword break];", |
---|
102 | "[keyword else] [keyword if] ([number 2])", |
---|
103 | " [keyword continue];", |
---|
104 | "[keyword else]", |
---|
105 | " [number 10];", |
---|
106 | "[keyword if] ([number 1]) {", |
---|
107 | " [keyword break];", |
---|
108 | "} [keyword else] [keyword if] ([number 2]) {", |
---|
109 | " [keyword continue];", |
---|
110 | "} [keyword else] {", |
---|
111 | " [number 10];", |
---|
112 | "}"); |
---|
113 | |
---|
114 | MT("indent_for", |
---|
115 | "[keyword for] ([keyword var] [variable i] [operator =] [number 0];", |
---|
116 | " [variable i] [operator <] [number 100];", |
---|
117 | " [variable i][operator ++])", |
---|
118 | " [variable doSomething]([variable i]);", |
---|
119 | "[keyword debugger];"); |
---|
120 | |
---|
121 | MT("indent_c_style", |
---|
122 | "[keyword function] [variable foo]()", |
---|
123 | "{", |
---|
124 | " [keyword debugger];", |
---|
125 | "}"); |
---|
126 | |
---|
127 | MT("indent_else", |
---|
128 | "[keyword for] (;;)", |
---|
129 | " [keyword if] ([variable foo])", |
---|
130 | " [keyword if] ([variable bar])", |
---|
131 | " [number 1];", |
---|
132 | " [keyword else]", |
---|
133 | " [number 2];", |
---|
134 | " [keyword else]", |
---|
135 | " [number 3];"); |
---|
136 | |
---|
137 | MT("indent_funarg", |
---|
138 | "[variable foo]([number 10000],", |
---|
139 | " [keyword function]([def a]) {", |
---|
140 | " [keyword debugger];", |
---|
141 | "};"); |
---|
142 | |
---|
143 | MT("indent_below_if", |
---|
144 | "[keyword for] (;;)", |
---|
145 | " [keyword if] ([variable foo])", |
---|
146 | " [number 1];", |
---|
147 | "[number 2];"); |
---|
148 | |
---|
149 | MT("multilinestring", |
---|
150 | "[keyword var] [variable x] [operator =] [string 'foo\\]", |
---|
151 | "[string bar'];"); |
---|
152 | |
---|
153 | MT("scary_regexp", |
---|
154 | "[string-2 /foo[[/]]bar/];"); |
---|
155 | |
---|
156 | MT("indent_strange_array", |
---|
157 | "[keyword var] [variable x] [operator =] [[", |
---|
158 | " [number 1],,", |
---|
159 | " [number 2],", |
---|
160 | "]];", |
---|
161 | "[number 10];"); |
---|
162 | |
---|
163 | var jsonld_mode = CodeMirror.getMode( |
---|
164 | {indentUnit: 2}, |
---|
165 | {name: "javascript", jsonld: true} |
---|
166 | ); |
---|
167 | function LD(name) { |
---|
168 | test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); |
---|
169 | } |
---|
170 | |
---|
171 | LD("json_ld_keywords", |
---|
172 | '{', |
---|
173 | ' [meta "@context"]: {', |
---|
174 | ' [meta "@base"]: [string "http://example.com"],', |
---|
175 | ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', |
---|
176 | ' [property "likesFlavor"]: {', |
---|
177 | ' [meta "@container"]: [meta "@list"]', |
---|
178 | ' [meta "@reverse"]: [string "@beFavoriteOf"]', |
---|
179 | ' },', |
---|
180 | ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', |
---|
181 | ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', |
---|
182 | ' },', |
---|
183 | ' [meta "@graph"]: [[ {', |
---|
184 | ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', |
---|
185 | ' [property "name"]: [string "John Lennon"],', |
---|
186 | ' [property "modified"]: {', |
---|
187 | ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', |
---|
188 | ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', |
---|
189 | ' }', |
---|
190 | ' } ]]', |
---|
191 | '}'); |
---|
192 | |
---|
193 | LD("json_ld_fake", |
---|
194 | '{', |
---|
195 | ' [property "@fake"]: [string "@fake"],', |
---|
196 | ' [property "@contextual"]: [string "@identifier"],', |
---|
197 | ' [property "user@domain.com"]: [string "@graphical"],', |
---|
198 | ' [property "@ID"]: [string "@@ID"]', |
---|
199 | '}'); |
---|
200 | })(); |
---|