1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/sourceeditor/test/cm_mode_javascript_test.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,151 @@ 1.4 +(function() { 1.5 + var mode = CodeMirror.getMode({indentUnit: 2}, "javascript"); 1.6 + function MT(name) { test.mode(name, mode, Array.prototype.slice.call(arguments, 1)); } 1.7 + 1.8 + MT("locals", 1.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]; }"); 1.10 + 1.11 + MT("comma-and-binop", 1.12 + "[keyword function](){ [keyword var] [def x] [operator =] [number 1] [operator +] [number 2], [def y]; }"); 1.13 + 1.14 + MT("destructuring", 1.15 + "([keyword function]([def a], [[[def b], [def c] ]]) {", 1.16 + " [keyword let] {[def d], [property foo]: [def c][operator =][number 10], [def x]} [operator =] [variable foo]([variable-2 a]);", 1.17 + " [[[variable-2 c], [variable y] ]] [operator =] [variable-2 c];", 1.18 + "})();"); 1.19 + 1.20 + MT("class", 1.21 + "[keyword class] [variable Point] [keyword extends] [variable SuperThing] {", 1.22 + " [[ [string-2 /expr/] ]]: [number 24],", 1.23 + " [property constructor]([def x], [def y]) {", 1.24 + " [keyword super]([string 'something']);", 1.25 + " [keyword this].[property x] [operator =] [variable-2 x];", 1.26 + " }", 1.27 + "}"); 1.28 + 1.29 + MT("module", 1.30 + "[keyword module] [string 'foo'] {", 1.31 + " [keyword export] [keyword let] [def x] [operator =] [number 42];", 1.32 + " [keyword export] [keyword *] [keyword from] [string 'somewhere'];", 1.33 + "}"); 1.34 + 1.35 + MT("import", 1.36 + "[keyword function] [variable foo]() {", 1.37 + " [keyword import] [def $] [keyword from] [string 'jquery'];", 1.38 + " [keyword module] [def crypto] [keyword from] [string 'crypto'];", 1.39 + " [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];", 1.40 + "}"); 1.41 + 1.42 + MT("const", 1.43 + "[keyword function] [variable f]() {", 1.44 + " [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];", 1.45 + "}"); 1.46 + 1.47 + MT("for/of", 1.48 + "[keyword for]([keyword let] [variable of] [keyword of] [variable something]) {}"); 1.49 + 1.50 + MT("generator", 1.51 + "[keyword function*] [variable repeat]([def n]) {", 1.52 + " [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])", 1.53 + " [keyword yield] [variable-2 i];", 1.54 + "}"); 1.55 + 1.56 + MT("fatArrow", 1.57 + "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);", 1.58 + "[variable a];", // No longer in scope 1.59 + "[keyword let] [variable f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];", 1.60 + "[variable c];"); 1.61 + 1.62 + MT("spread", 1.63 + "[keyword function] [variable f]([def a], [meta ...][def b]) {", 1.64 + " [variable something]([variable-2 a], [meta ...][variable-2 b]);", 1.65 + "}"); 1.66 + 1.67 + MT("comprehension", 1.68 + "[keyword function] [variable f]() {", 1.69 + " [[([variable x] [operator +] [number 1]) [keyword for] ([keyword var] [def x] [keyword in] [variable y]) [keyword if] [variable pred]([variable-2 x]) ]];", 1.70 + " ([variable u] [keyword for] ([keyword var] [def u] [keyword of] [variable generateValues]()) [keyword if] ([variable-2 u].[property color] [operator ===] [string 'blue']));", 1.71 + "}"); 1.72 + 1.73 + MT("quasi", 1.74 + "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]"); 1.75 + 1.76 + MT("indent_statement", 1.77 + "[keyword var] [variable x] [operator =] [number 10]", 1.78 + "[variable x] [operator +=] [variable y] [operator +]", 1.79 + " [atom Infinity]", 1.80 + "[keyword debugger];"); 1.81 + 1.82 + MT("indent_if", 1.83 + "[keyword if] ([number 1])", 1.84 + " [keyword break];", 1.85 + "[keyword else] [keyword if] ([number 2])", 1.86 + " [keyword continue];", 1.87 + "[keyword else]", 1.88 + " [number 10];", 1.89 + "[keyword if] ([number 1]) {", 1.90 + " [keyword break];", 1.91 + "} [keyword else] [keyword if] ([number 2]) {", 1.92 + " [keyword continue];", 1.93 + "} [keyword else] {", 1.94 + " [number 10];", 1.95 + "}"); 1.96 + 1.97 + MT("indent_for", 1.98 + "[keyword for] ([keyword var] [variable i] [operator =] [number 0];", 1.99 + " [variable i] [operator <] [number 100];", 1.100 + " [variable i][operator ++])", 1.101 + " [variable doSomething]([variable i]);", 1.102 + "[keyword debugger];"); 1.103 + 1.104 + MT("indent_c_style", 1.105 + "[keyword function] [variable foo]()", 1.106 + "{", 1.107 + " [keyword debugger];", 1.108 + "}"); 1.109 + 1.110 + MT("multilinestring", 1.111 + "[keyword var] [variable x] [operator =] [string 'foo\\]", 1.112 + "[string bar'];"); 1.113 + 1.114 + MT("scary_regexp", 1.115 + "[string-2 /foo[[/]]bar/];"); 1.116 + 1.117 + var jsonld_mode = CodeMirror.getMode( 1.118 + {indentUnit: 2}, 1.119 + {name: "javascript", jsonld: true} 1.120 + ); 1.121 + function LD(name) { 1.122 + test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1)); 1.123 + } 1.124 + 1.125 + LD("json_ld_keywords", 1.126 + '{', 1.127 + ' [meta "@context"]: {', 1.128 + ' [meta "@base"]: [string "http://example.com"],', 1.129 + ' [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],', 1.130 + ' [property "likesFlavor"]: {', 1.131 + ' [meta "@container"]: [meta "@list"]', 1.132 + ' [meta "@reverse"]: [string "@beFavoriteOf"]', 1.133 + ' },', 1.134 + ' [property "nick"]: { [meta "@container"]: [meta "@set"] },', 1.135 + ' [property "nick"]: { [meta "@container"]: [meta "@index"] }', 1.136 + ' },', 1.137 + ' [meta "@graph"]: [[ {', 1.138 + ' [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],', 1.139 + ' [property "name"]: [string "John Lennon"],', 1.140 + ' [property "modified"]: {', 1.141 + ' [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],', 1.142 + ' [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]', 1.143 + ' }', 1.144 + ' } ]]', 1.145 + '}'); 1.146 + 1.147 + LD("json_ld_fake", 1.148 + '{', 1.149 + ' [property "@fake"]: [string "@fake"],', 1.150 + ' [property "@contextual"]: [string "@identifier"],', 1.151 + ' [property "user@domain.com"]: [string "@graphical"],', 1.152 + ' [property "@ID"]: [string "@@ID"]', 1.153 + '}'); 1.154 +})();