1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/commandline/test/browser_gcli_tokenize.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,305 @@ 1.4 +/* 1.5 + * Copyright 2012, Mozilla Foundation and contributors 1.6 + * 1.7 + * Licensed under the Apache License, Version 2.0 (the "License"); 1.8 + * you may not use this file except in compliance with the License. 1.9 + * You may obtain a copy of the License at 1.10 + * 1.11 + * http://www.apache.org/licenses/LICENSE-2.0 1.12 + * 1.13 + * Unless required by applicable law or agreed to in writing, software 1.14 + * distributed under the License is distributed on an "AS IS" BASIS, 1.15 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1.16 + * See the License for the specific language governing permissions and 1.17 + * limitations under the License. 1.18 + */ 1.19 + 1.20 +'use strict'; 1.21 +// <INJECTED SOURCE:START> 1.22 + 1.23 +// THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT 1.24 +// DO NOT EDIT IT DIRECTLY 1.25 + 1.26 +var exports = {}; 1.27 + 1.28 +var TEST_URI = "data:text/html;charset=utf-8,<p id='gcli-input'>gcli-testTokenize.js</p>"; 1.29 + 1.30 +function test() { 1.31 + return Task.spawn(function() { 1.32 + let options = yield helpers.openTab(TEST_URI); 1.33 + yield helpers.openToolbar(options); 1.34 + gcli.addItems(mockCommands.items); 1.35 + 1.36 + yield helpers.runTests(options, exports); 1.37 + 1.38 + gcli.removeItems(mockCommands.items); 1.39 + yield helpers.closeToolbar(options); 1.40 + yield helpers.closeTab(options); 1.41 + }).then(finish, helpers.handleError); 1.42 +} 1.43 + 1.44 +// <INJECTED SOURCE:END> 1.45 + 1.46 +// var assert = require('../testharness/assert'); 1.47 +var cli = require('gcli/cli'); 1.48 + 1.49 +exports.testBlanks = function(options) { 1.50 + var args; 1.51 + 1.52 + args = cli.tokenize(''); 1.53 + assert.is(args.length, 1); 1.54 + assert.is(args[0].text, ''); 1.55 + assert.is(args[0].prefix, ''); 1.56 + assert.is(args[0].suffix, ''); 1.57 + 1.58 + args = cli.tokenize(' '); 1.59 + assert.is(args.length, 1); 1.60 + assert.is(args[0].text, ''); 1.61 + assert.is(args[0].prefix, ' '); 1.62 + assert.is(args[0].suffix, ''); 1.63 +}; 1.64 + 1.65 +exports.testTokSimple = function(options) { 1.66 + var args; 1.67 + 1.68 + args = cli.tokenize('s'); 1.69 + assert.is(args.length, 1); 1.70 + assert.is(args[0].text, 's'); 1.71 + assert.is(args[0].prefix, ''); 1.72 + assert.is(args[0].suffix, ''); 1.73 + assert.is(args[0].type, 'Argument'); 1.74 + 1.75 + args = cli.tokenize('s s'); 1.76 + assert.is(args.length, 2); 1.77 + assert.is(args[0].text, 's'); 1.78 + assert.is(args[0].prefix, ''); 1.79 + assert.is(args[0].suffix, ''); 1.80 + assert.is(args[0].type, 'Argument'); 1.81 + assert.is(args[1].text, 's'); 1.82 + assert.is(args[1].prefix, ' '); 1.83 + assert.is(args[1].suffix, ''); 1.84 + assert.is(args[1].type, 'Argument'); 1.85 +}; 1.86 + 1.87 +exports.testJavascript = function(options) { 1.88 + var args; 1.89 + 1.90 + args = cli.tokenize('{x}'); 1.91 + assert.is(args.length, 1); 1.92 + assert.is(args[0].text, 'x'); 1.93 + assert.is(args[0].prefix, '{'); 1.94 + assert.is(args[0].suffix, '}'); 1.95 + assert.is(args[0].type, 'ScriptArgument'); 1.96 + 1.97 + args = cli.tokenize('{ x }'); 1.98 + assert.is(args.length, 1); 1.99 + assert.is(args[0].text, 'x'); 1.100 + assert.is(args[0].prefix, '{ '); 1.101 + assert.is(args[0].suffix, ' }'); 1.102 + assert.is(args[0].type, 'ScriptArgument'); 1.103 + 1.104 + args = cli.tokenize('{x} {y}'); 1.105 + assert.is(args.length, 2); 1.106 + assert.is(args[0].text, 'x'); 1.107 + assert.is(args[0].prefix, '{'); 1.108 + assert.is(args[0].suffix, '}'); 1.109 + assert.is(args[0].type, 'ScriptArgument'); 1.110 + assert.is(args[1].text, 'y'); 1.111 + assert.is(args[1].prefix, ' {'); 1.112 + assert.is(args[1].suffix, '}'); 1.113 + assert.is(args[1].type, 'ScriptArgument'); 1.114 + 1.115 + args = cli.tokenize('{x}{y}'); 1.116 + assert.is(args.length, 2); 1.117 + assert.is(args[0].text, 'x'); 1.118 + assert.is(args[0].prefix, '{'); 1.119 + assert.is(args[0].suffix, '}'); 1.120 + assert.is(args[0].type, 'ScriptArgument'); 1.121 + assert.is(args[1].text, 'y'); 1.122 + assert.is(args[1].prefix, '{'); 1.123 + assert.is(args[1].suffix, '}'); 1.124 + assert.is(args[1].type, 'ScriptArgument'); 1.125 + 1.126 + args = cli.tokenize('{'); 1.127 + assert.is(args.length, 1); 1.128 + assert.is(args[0].text, ''); 1.129 + assert.is(args[0].prefix, '{'); 1.130 + assert.is(args[0].suffix, ''); 1.131 + assert.is(args[0].type, 'ScriptArgument'); 1.132 + 1.133 + args = cli.tokenize('{ '); 1.134 + assert.is(args.length, 1); 1.135 + assert.is(args[0].text, ''); 1.136 + assert.is(args[0].prefix, '{ '); 1.137 + assert.is(args[0].suffix, ''); 1.138 + assert.is(args[0].type, 'ScriptArgument'); 1.139 + 1.140 + args = cli.tokenize('{x'); 1.141 + assert.is(args.length, 1); 1.142 + assert.is(args[0].text, 'x'); 1.143 + assert.is(args[0].prefix, '{'); 1.144 + assert.is(args[0].suffix, ''); 1.145 + assert.is(args[0].type, 'ScriptArgument'); 1.146 +}; 1.147 + 1.148 +exports.testRegularNesting = function(options) { 1.149 + var args; 1.150 + 1.151 + args = cli.tokenize('{"x"}'); 1.152 + assert.is(args.length, 1); 1.153 + assert.is(args[0].text, '"x"'); 1.154 + assert.is(args[0].prefix, '{'); 1.155 + assert.is(args[0].suffix, '}'); 1.156 + assert.is(args[0].type, 'ScriptArgument'); 1.157 + 1.158 + args = cli.tokenize('{\'x\'}'); 1.159 + assert.is(args.length, 1); 1.160 + assert.is(args[0].text, '\'x\''); 1.161 + assert.is(args[0].prefix, '{'); 1.162 + assert.is(args[0].suffix, '}'); 1.163 + assert.is(args[0].type, 'ScriptArgument'); 1.164 + 1.165 + args = cli.tokenize('"{x}"'); 1.166 + assert.is(args.length, 1); 1.167 + assert.is(args[0].text, '{x}'); 1.168 + assert.is(args[0].prefix, '"'); 1.169 + assert.is(args[0].suffix, '"'); 1.170 + assert.is(args[0].type, 'Argument'); 1.171 + 1.172 + args = cli.tokenize('\'{x}\''); 1.173 + assert.is(args.length, 1); 1.174 + assert.is(args[0].text, '{x}'); 1.175 + assert.is(args[0].prefix, '\''); 1.176 + assert.is(args[0].suffix, '\''); 1.177 + assert.is(args[0].type, 'Argument'); 1.178 +}; 1.179 + 1.180 +exports.testDeepNesting = function(options) { 1.181 + var args; 1.182 + 1.183 + args = cli.tokenize('{{}}'); 1.184 + assert.is(args.length, 1); 1.185 + assert.is(args[0].text, '{}'); 1.186 + assert.is(args[0].prefix, '{'); 1.187 + assert.is(args[0].suffix, '}'); 1.188 + assert.is(args[0].type, 'ScriptArgument'); 1.189 + 1.190 + args = cli.tokenize('{{x} {y}}'); 1.191 + assert.is(args.length, 1); 1.192 + assert.is(args[0].text, '{x} {y}'); 1.193 + assert.is(args[0].prefix, '{'); 1.194 + assert.is(args[0].suffix, '}'); 1.195 + assert.is(args[0].type, 'ScriptArgument'); 1.196 + 1.197 + args = cli.tokenize('{{w} {{{x}}}} {y} {{{z}}}'); 1.198 + 1.199 + assert.is(args.length, 3); 1.200 + 1.201 + assert.is(args[0].text, '{w} {{{x}}}'); 1.202 + assert.is(args[0].prefix, '{'); 1.203 + assert.is(args[0].suffix, '}'); 1.204 + assert.is(args[0].type, 'ScriptArgument'); 1.205 + 1.206 + assert.is(args[1].text, 'y'); 1.207 + assert.is(args[1].prefix, ' {'); 1.208 + assert.is(args[1].suffix, '}'); 1.209 + assert.is(args[1].type, 'ScriptArgument'); 1.210 + 1.211 + assert.is(args[2].text, '{{z}}'); 1.212 + assert.is(args[2].prefix, ' {'); 1.213 + assert.is(args[2].suffix, '}'); 1.214 + assert.is(args[2].type, 'ScriptArgument'); 1.215 + 1.216 + args = cli.tokenize('{{w} {{{x}}} {y} {{{z}}}'); 1.217 + 1.218 + assert.is(args.length, 1); 1.219 + 1.220 + assert.is(args[0].text, '{w} {{{x}}} {y} {{{z}}}'); 1.221 + assert.is(args[0].prefix, '{'); 1.222 + assert.is(args[0].suffix, ''); 1.223 + assert.is(args[0].type, 'ScriptArgument'); 1.224 +}; 1.225 + 1.226 +exports.testStrangeNesting = function(options) { 1.227 + var args; 1.228 + 1.229 + // Note: When we get real JS parsing this should break 1.230 + args = cli.tokenize('{"x}"}'); 1.231 + 1.232 + assert.is(args.length, 2); 1.233 + 1.234 + assert.is(args[0].text, '"x'); 1.235 + assert.is(args[0].prefix, '{'); 1.236 + assert.is(args[0].suffix, '}'); 1.237 + assert.is(args[0].type, 'ScriptArgument'); 1.238 + 1.239 + assert.is(args[1].text, '}'); 1.240 + assert.is(args[1].prefix, '"'); 1.241 + assert.is(args[1].suffix, ''); 1.242 + assert.is(args[1].type, 'Argument'); 1.243 +}; 1.244 + 1.245 +exports.testComplex = function(options) { 1.246 + var args; 1.247 + 1.248 + args = cli.tokenize(' 1234 \'12 34\''); 1.249 + 1.250 + assert.is(args.length, 2); 1.251 + 1.252 + assert.is(args[0].text, '1234'); 1.253 + assert.is(args[0].prefix, ' '); 1.254 + assert.is(args[0].suffix, ''); 1.255 + assert.is(args[0].type, 'Argument'); 1.256 + 1.257 + assert.is(args[1].text, '12 34'); 1.258 + assert.is(args[1].prefix, ' \''); 1.259 + assert.is(args[1].suffix, '\''); 1.260 + assert.is(args[1].type, 'Argument'); 1.261 + 1.262 + args = cli.tokenize('12\'34 "12 34" \\'); // 12'34 "12 34" \ 1.263 + 1.264 + assert.is(args.length, 3); 1.265 + 1.266 + assert.is(args[0].text, '12\'34'); 1.267 + assert.is(args[0].prefix, ''); 1.268 + assert.is(args[0].suffix, ''); 1.269 + assert.is(args[0].type, 'Argument'); 1.270 + 1.271 + assert.is(args[1].text, '12 34'); 1.272 + assert.is(args[1].prefix, ' "'); 1.273 + assert.is(args[1].suffix, '"'); 1.274 + assert.is(args[1].type, 'Argument'); 1.275 + 1.276 + assert.is(args[2].text, '\\'); 1.277 + assert.is(args[2].prefix, ' '); 1.278 + assert.is(args[2].suffix, ''); 1.279 + assert.is(args[2].type, 'Argument'); 1.280 +}; 1.281 + 1.282 +exports.testPathological = function(options) { 1.283 + var args; 1.284 + 1.285 + args = cli.tokenize('a\\ b \\t\\n\\r \\\'x\\\" \'d'); // a_b \t\n\r \'x\" 'd 1.286 + 1.287 + assert.is(args.length, 4); 1.288 + 1.289 + assert.is(args[0].text, 'a\\ b'); 1.290 + assert.is(args[0].prefix, ''); 1.291 + assert.is(args[0].suffix, ''); 1.292 + assert.is(args[0].type, 'Argument'); 1.293 + 1.294 + assert.is(args[1].text, '\\t\\n\\r'); 1.295 + assert.is(args[1].prefix, ' '); 1.296 + assert.is(args[1].suffix, ''); 1.297 + assert.is(args[1].type, 'Argument'); 1.298 + 1.299 + assert.is(args[2].text, '\\\'x\\"'); 1.300 + assert.is(args[2].prefix, ' '); 1.301 + assert.is(args[2].suffix, ''); 1.302 + assert.is(args[2].type, 'Argument'); 1.303 + 1.304 + assert.is(args[3].text, 'd'); 1.305 + assert.is(args[3].prefix, ' \''); 1.306 + assert.is(args[3].suffix, ''); 1.307 + assert.is(args[3].type, 'Argument'); 1.308 +};