|
1 /* |
|
2 * Copyright 2012, Mozilla Foundation and contributors |
|
3 * |
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 * you may not use this file except in compliance with the License. |
|
6 * You may obtain a copy of the License at |
|
7 * |
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 * |
|
10 * Unless required by applicable law or agreed to in writing, software |
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 * See the License for the specific language governing permissions and |
|
14 * limitations under the License. |
|
15 */ |
|
16 |
|
17 'use strict'; |
|
18 // <INJECTED SOURCE:START> |
|
19 |
|
20 // THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT |
|
21 // DO NOT EDIT IT DIRECTLY |
|
22 |
|
23 var exports = {}; |
|
24 |
|
25 var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testTokenize.js</p>"; |
|
26 |
|
27 function test() { |
|
28 return Task.spawn(function() { |
|
29 let options = yield helpers.openTab(TEST_URI); |
|
30 yield helpers.openToolbar(options); |
|
31 gcli.addItems(mockCommands.items); |
|
32 |
|
33 yield helpers.runTests(options, exports); |
|
34 |
|
35 gcli.removeItems(mockCommands.items); |
|
36 yield helpers.closeToolbar(options); |
|
37 yield helpers.closeTab(options); |
|
38 }).then(finish, helpers.handleError); |
|
39 } |
|
40 |
|
41 // <INJECTED SOURCE:END> |
|
42 |
|
43 // var assert = require('../testharness/assert'); |
|
44 var cli = require('gcli/cli'); |
|
45 |
|
46 exports.testBlanks = function(options) { |
|
47 var args; |
|
48 |
|
49 args = cli.tokenize(''); |
|
50 assert.is(args.length, 1); |
|
51 assert.is(args[0].text, ''); |
|
52 assert.is(args[0].prefix, ''); |
|
53 assert.is(args[0].suffix, ''); |
|
54 |
|
55 args = cli.tokenize(' '); |
|
56 assert.is(args.length, 1); |
|
57 assert.is(args[0].text, ''); |
|
58 assert.is(args[0].prefix, ' '); |
|
59 assert.is(args[0].suffix, ''); |
|
60 }; |
|
61 |
|
62 exports.testTokSimple = function(options) { |
|
63 var args; |
|
64 |
|
65 args = cli.tokenize('s'); |
|
66 assert.is(args.length, 1); |
|
67 assert.is(args[0].text, 's'); |
|
68 assert.is(args[0].prefix, ''); |
|
69 assert.is(args[0].suffix, ''); |
|
70 assert.is(args[0].type, 'Argument'); |
|
71 |
|
72 args = cli.tokenize('s s'); |
|
73 assert.is(args.length, 2); |
|
74 assert.is(args[0].text, 's'); |
|
75 assert.is(args[0].prefix, ''); |
|
76 assert.is(args[0].suffix, ''); |
|
77 assert.is(args[0].type, 'Argument'); |
|
78 assert.is(args[1].text, 's'); |
|
79 assert.is(args[1].prefix, ' '); |
|
80 assert.is(args[1].suffix, ''); |
|
81 assert.is(args[1].type, 'Argument'); |
|
82 }; |
|
83 |
|
84 exports.testJavascript = function(options) { |
|
85 var args; |
|
86 |
|
87 args = cli.tokenize('{x}'); |
|
88 assert.is(args.length, 1); |
|
89 assert.is(args[0].text, 'x'); |
|
90 assert.is(args[0].prefix, '{'); |
|
91 assert.is(args[0].suffix, '}'); |
|
92 assert.is(args[0].type, 'ScriptArgument'); |
|
93 |
|
94 args = cli.tokenize('{ x }'); |
|
95 assert.is(args.length, 1); |
|
96 assert.is(args[0].text, 'x'); |
|
97 assert.is(args[0].prefix, '{ '); |
|
98 assert.is(args[0].suffix, ' }'); |
|
99 assert.is(args[0].type, 'ScriptArgument'); |
|
100 |
|
101 args = cli.tokenize('{x} {y}'); |
|
102 assert.is(args.length, 2); |
|
103 assert.is(args[0].text, 'x'); |
|
104 assert.is(args[0].prefix, '{'); |
|
105 assert.is(args[0].suffix, '}'); |
|
106 assert.is(args[0].type, 'ScriptArgument'); |
|
107 assert.is(args[1].text, 'y'); |
|
108 assert.is(args[1].prefix, ' {'); |
|
109 assert.is(args[1].suffix, '}'); |
|
110 assert.is(args[1].type, 'ScriptArgument'); |
|
111 |
|
112 args = cli.tokenize('{x}{y}'); |
|
113 assert.is(args.length, 2); |
|
114 assert.is(args[0].text, 'x'); |
|
115 assert.is(args[0].prefix, '{'); |
|
116 assert.is(args[0].suffix, '}'); |
|
117 assert.is(args[0].type, 'ScriptArgument'); |
|
118 assert.is(args[1].text, 'y'); |
|
119 assert.is(args[1].prefix, '{'); |
|
120 assert.is(args[1].suffix, '}'); |
|
121 assert.is(args[1].type, 'ScriptArgument'); |
|
122 |
|
123 args = cli.tokenize('{'); |
|
124 assert.is(args.length, 1); |
|
125 assert.is(args[0].text, ''); |
|
126 assert.is(args[0].prefix, '{'); |
|
127 assert.is(args[0].suffix, ''); |
|
128 assert.is(args[0].type, 'ScriptArgument'); |
|
129 |
|
130 args = cli.tokenize('{ '); |
|
131 assert.is(args.length, 1); |
|
132 assert.is(args[0].text, ''); |
|
133 assert.is(args[0].prefix, '{ '); |
|
134 assert.is(args[0].suffix, ''); |
|
135 assert.is(args[0].type, 'ScriptArgument'); |
|
136 |
|
137 args = cli.tokenize('{x'); |
|
138 assert.is(args.length, 1); |
|
139 assert.is(args[0].text, 'x'); |
|
140 assert.is(args[0].prefix, '{'); |
|
141 assert.is(args[0].suffix, ''); |
|
142 assert.is(args[0].type, 'ScriptArgument'); |
|
143 }; |
|
144 |
|
145 exports.testRegularNesting = function(options) { |
|
146 var args; |
|
147 |
|
148 args = cli.tokenize('{"x"}'); |
|
149 assert.is(args.length, 1); |
|
150 assert.is(args[0].text, '"x"'); |
|
151 assert.is(args[0].prefix, '{'); |
|
152 assert.is(args[0].suffix, '}'); |
|
153 assert.is(args[0].type, 'ScriptArgument'); |
|
154 |
|
155 args = cli.tokenize('{\'x\'}'); |
|
156 assert.is(args.length, 1); |
|
157 assert.is(args[0].text, '\'x\''); |
|
158 assert.is(args[0].prefix, '{'); |
|
159 assert.is(args[0].suffix, '}'); |
|
160 assert.is(args[0].type, 'ScriptArgument'); |
|
161 |
|
162 args = cli.tokenize('"{x}"'); |
|
163 assert.is(args.length, 1); |
|
164 assert.is(args[0].text, '{x}'); |
|
165 assert.is(args[0].prefix, '"'); |
|
166 assert.is(args[0].suffix, '"'); |
|
167 assert.is(args[0].type, 'Argument'); |
|
168 |
|
169 args = cli.tokenize('\'{x}\''); |
|
170 assert.is(args.length, 1); |
|
171 assert.is(args[0].text, '{x}'); |
|
172 assert.is(args[0].prefix, '\''); |
|
173 assert.is(args[0].suffix, '\''); |
|
174 assert.is(args[0].type, 'Argument'); |
|
175 }; |
|
176 |
|
177 exports.testDeepNesting = function(options) { |
|
178 var args; |
|
179 |
|
180 args = cli.tokenize('{{}}'); |
|
181 assert.is(args.length, 1); |
|
182 assert.is(args[0].text, '{}'); |
|
183 assert.is(args[0].prefix, '{'); |
|
184 assert.is(args[0].suffix, '}'); |
|
185 assert.is(args[0].type, 'ScriptArgument'); |
|
186 |
|
187 args = cli.tokenize('{{x} {y}}'); |
|
188 assert.is(args.length, 1); |
|
189 assert.is(args[0].text, '{x} {y}'); |
|
190 assert.is(args[0].prefix, '{'); |
|
191 assert.is(args[0].suffix, '}'); |
|
192 assert.is(args[0].type, 'ScriptArgument'); |
|
193 |
|
194 args = cli.tokenize('{{w} {{{x}}}} {y} {{{z}}}'); |
|
195 |
|
196 assert.is(args.length, 3); |
|
197 |
|
198 assert.is(args[0].text, '{w} {{{x}}}'); |
|
199 assert.is(args[0].prefix, '{'); |
|
200 assert.is(args[0].suffix, '}'); |
|
201 assert.is(args[0].type, 'ScriptArgument'); |
|
202 |
|
203 assert.is(args[1].text, 'y'); |
|
204 assert.is(args[1].prefix, ' {'); |
|
205 assert.is(args[1].suffix, '}'); |
|
206 assert.is(args[1].type, 'ScriptArgument'); |
|
207 |
|
208 assert.is(args[2].text, '{{z}}'); |
|
209 assert.is(args[2].prefix, ' {'); |
|
210 assert.is(args[2].suffix, '}'); |
|
211 assert.is(args[2].type, 'ScriptArgument'); |
|
212 |
|
213 args = cli.tokenize('{{w} {{{x}}} {y} {{{z}}}'); |
|
214 |
|
215 assert.is(args.length, 1); |
|
216 |
|
217 assert.is(args[0].text, '{w} {{{x}}} {y} {{{z}}}'); |
|
218 assert.is(args[0].prefix, '{'); |
|
219 assert.is(args[0].suffix, ''); |
|
220 assert.is(args[0].type, 'ScriptArgument'); |
|
221 }; |
|
222 |
|
223 exports.testStrangeNesting = function(options) { |
|
224 var args; |
|
225 |
|
226 // Note: When we get real JS parsing this should break |
|
227 args = cli.tokenize('{"x}"}'); |
|
228 |
|
229 assert.is(args.length, 2); |
|
230 |
|
231 assert.is(args[0].text, '"x'); |
|
232 assert.is(args[0].prefix, '{'); |
|
233 assert.is(args[0].suffix, '}'); |
|
234 assert.is(args[0].type, 'ScriptArgument'); |
|
235 |
|
236 assert.is(args[1].text, '}'); |
|
237 assert.is(args[1].prefix, '"'); |
|
238 assert.is(args[1].suffix, ''); |
|
239 assert.is(args[1].type, 'Argument'); |
|
240 }; |
|
241 |
|
242 exports.testComplex = function(options) { |
|
243 var args; |
|
244 |
|
245 args = cli.tokenize(' 1234 \'12 34\''); |
|
246 |
|
247 assert.is(args.length, 2); |
|
248 |
|
249 assert.is(args[0].text, '1234'); |
|
250 assert.is(args[0].prefix, ' '); |
|
251 assert.is(args[0].suffix, ''); |
|
252 assert.is(args[0].type, 'Argument'); |
|
253 |
|
254 assert.is(args[1].text, '12 34'); |
|
255 assert.is(args[1].prefix, ' \''); |
|
256 assert.is(args[1].suffix, '\''); |
|
257 assert.is(args[1].type, 'Argument'); |
|
258 |
|
259 args = cli.tokenize('12\'34 "12 34" \\'); // 12'34 "12 34" \ |
|
260 |
|
261 assert.is(args.length, 3); |
|
262 |
|
263 assert.is(args[0].text, '12\'34'); |
|
264 assert.is(args[0].prefix, ''); |
|
265 assert.is(args[0].suffix, ''); |
|
266 assert.is(args[0].type, 'Argument'); |
|
267 |
|
268 assert.is(args[1].text, '12 34'); |
|
269 assert.is(args[1].prefix, ' "'); |
|
270 assert.is(args[1].suffix, '"'); |
|
271 assert.is(args[1].type, 'Argument'); |
|
272 |
|
273 assert.is(args[2].text, '\\'); |
|
274 assert.is(args[2].prefix, ' '); |
|
275 assert.is(args[2].suffix, ''); |
|
276 assert.is(args[2].type, 'Argument'); |
|
277 }; |
|
278 |
|
279 exports.testPathological = function(options) { |
|
280 var args; |
|
281 |
|
282 args = cli.tokenize('a\\ b \\t\\n\\r \\\'x\\\" \'d'); // a_b \t\n\r \'x\" 'd |
|
283 |
|
284 assert.is(args.length, 4); |
|
285 |
|
286 assert.is(args[0].text, 'a\\ b'); |
|
287 assert.is(args[0].prefix, ''); |
|
288 assert.is(args[0].suffix, ''); |
|
289 assert.is(args[0].type, 'Argument'); |
|
290 |
|
291 assert.is(args[1].text, '\\t\\n\\r'); |
|
292 assert.is(args[1].prefix, ' '); |
|
293 assert.is(args[1].suffix, ''); |
|
294 assert.is(args[1].type, 'Argument'); |
|
295 |
|
296 assert.is(args[2].text, '\\\'x\\"'); |
|
297 assert.is(args[2].prefix, ' '); |
|
298 assert.is(args[2].suffix, ''); |
|
299 assert.is(args[2].type, 'Argument'); |
|
300 |
|
301 assert.is(args[3].text, 'd'); |
|
302 assert.is(args[3].prefix, ' \''); |
|
303 assert.is(args[3].suffix, ''); |
|
304 assert.is(args[3].type, 'Argument'); |
|
305 }; |