tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test.js (20097B)


      1 // CodeMirror, copyright (c) by Marijn Haverbeke and others
      2 // Distributed under an MIT license: https://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] [def 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("destructure_trailing_comma",
     21    "[keyword let] {[def a], [def b],} [operator =] [variable foo];",
     22    "[keyword let] [def c];"); // Parser still in good state?
     23 
     24  MT("class_body",
     25     "[keyword class] [def Foo] {",
     26     "  [property constructor]() {}",
     27     "  [property sayName]() {",
     28     "    [keyword return] [string-2 `foo${][variable foo][string-2 }oo`];",
     29     "  }",
     30     "}");
     31 
     32  MT("class",
     33     "[keyword class] [def Point] [keyword extends] [variable SuperThing] {",
     34     "  [keyword get] [property prop]() { [keyword return] [number 24]; }",
     35     "  [property constructor]([def x], [def y]) {",
     36     "    [keyword super]([string 'something']);",
     37     "    [keyword this].[property x] [operator =] [variable-2 x];",
     38     "  }",
     39     "}");
     40 
     41  MT("anonymous_class_expression",
     42     "[keyword const] [def Adder] [operator =] [keyword class] [keyword extends] [variable Arithmetic] {",
     43     "  [property add]([def a], [def b]) {}",
     44     "};");
     45 
     46  MT("named_class_expression",
     47     "[keyword const] [def Subber] [operator =] [keyword class] [def Subtract] {",
     48     "  [property sub]([def a], [def b]) {}",
     49     "};");
     50 
     51  MT("class_async_method",
     52     "[keyword class] [def Foo] {",
     53     "  [property sayName1]() {}",
     54     "  [keyword async] [property sayName2]() {}",
     55     "}");
     56 
     57  MT("import",
     58     "[keyword function] [def foo]() {",
     59     "  [keyword import] [def $] [keyword from] [string 'jquery'];",
     60     "  [keyword import] { [def encrypt], [def decrypt] } [keyword from] [string 'crypto'];",
     61     "}");
     62 
     63  MT("import_trailing_comma",
     64     "[keyword import] {[def foo], [def bar],} [keyword from] [string 'baz']")
     65 
     66  MT("import_dynamic",
     67     "[keyword import]([string 'baz']).[property then]")
     68 
     69  MT("import_dynamic",
     70     "[keyword const] [def t] [operator =] [keyword import]([string 'baz']).[property then]")
     71 
     72  MT("const",
     73     "[keyword function] [def f]() {",
     74     "  [keyword const] [[ [def a], [def b] ]] [operator =] [[ [number 1], [number 2] ]];",
     75     "}");
     76 
     77  MT("for/of",
     78     "[keyword for]([keyword let] [def of] [keyword of] [variable something]) {}");
     79 
     80  MT("for await",
     81     "[keyword for] [keyword await]([keyword let] [def of] [keyword of] [variable something]) {}");
     82 
     83  MT("generator",
     84     "[keyword function*] [def repeat]([def n]) {",
     85     "  [keyword for]([keyword var] [def i] [operator =] [number 0]; [variable-2 i] [operator <] [variable-2 n]; [operator ++][variable-2 i])",
     86     "    [keyword yield] [variable-2 i];",
     87     "}");
     88 
     89  MT("let_scoping",
     90     "[keyword function] [def scoped]([def n]) {",
     91     "  { [keyword var] [def i]; } [variable-2 i];",
     92     "  { [keyword let] [def j]; [variable-2 j]; } [variable j];",
     93     "  [keyword if] ([atom true]) { [keyword const] [def k]; [variable-2 k]; } [variable k];",
     94     "}");
     95 
     96  MT("switch_scoping",
     97     "[keyword switch] ([variable x]) {",
     98     "  [keyword default]:",
     99     "    [keyword let] [def j];",
    100     "    [keyword return] [variable-2 j]",
    101     "}",
    102     "[variable j];")
    103 
    104  MT("leaving_scope",
    105     "[keyword function] [def a]() {",
    106     "  {",
    107     "    [keyword const] [def x] [operator =] [number 1]",
    108     "    [keyword if] ([atom true]) {",
    109     "      [keyword let] [def y] [operator =] [number 2]",
    110     "      [keyword var] [def z] [operator =] [number 3]",
    111     "      [variable console].[property log]([variable-2 x], [variable-2 y], [variable-2 z])",
    112     "    }",
    113     "    [variable console].[property log]([variable-2 x], [variable y], [variable-2 z])",
    114     "  }",
    115     "  [variable console].[property log]([variable x], [variable y], [variable-2 z])",
    116     "}")
    117 
    118  MT("quotedStringAddition",
    119     "[keyword let] [def f] [operator =] [variable a] [operator +] [string 'fatarrow'] [operator +] [variable c];");
    120 
    121  MT("quotedFatArrow",
    122     "[keyword let] [def f] [operator =] [variable a] [operator +] [string '=>'] [operator +] [variable c];");
    123 
    124  MT("fatArrow",
    125     "[variable array].[property filter]([def a] [operator =>] [variable-2 a] [operator +] [number 1]);",
    126     "[variable a];", // No longer in scope
    127     "[keyword let] [def f] [operator =] ([[ [def a], [def b] ]], [def c]) [operator =>] [variable-2 a] [operator +] [variable-2 c];",
    128     "[variable c];");
    129 
    130  MT("fatArrow_stringDefault",
    131     "([def a], [def b] [operator =] [string 'x\\'y']) [operator =>] [variable-2 a] [operator +] [variable-2 b]")
    132 
    133  MT("spread",
    134     "[keyword function] [def f]([def a], [meta ...][def b]) {",
    135     "  [variable something]([variable-2 a], [meta ...][variable-2 b]);",
    136     "}");
    137 
    138  MT("quasi",
    139     "[variable re][string-2 `fofdlakj${][variable x] [operator +] ([variable re][string-2 `foo`]) [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]");
    140 
    141  MT("quasi_no_function",
    142     "[variable x] [operator =] [string-2 `fofdlakj${][variable x] [operator +] [string-2 `foo`] [operator +] [number 1][string-2 }fdsa`] [operator +] [number 2]");
    143 
    144  MT("indent_statement",
    145     "[keyword var] [def x] [operator =] [number 10]",
    146     "[variable x] [operator +=] [variable y] [operator +]",
    147     "  [atom Infinity]",
    148     "[keyword debugger];");
    149 
    150  MT("indent_if",
    151     "[keyword if] ([number 1])",
    152     "  [keyword break];",
    153     "[keyword else] [keyword if] ([number 2])",
    154     "  [keyword continue];",
    155     "[keyword else]",
    156     "  [number 10];",
    157     "[keyword if] ([number 1]) {",
    158     "  [keyword break];",
    159     "} [keyword else] [keyword if] ([number 2]) {",
    160     "  [keyword continue];",
    161     "} [keyword else] {",
    162     "  [number 10];",
    163     "}");
    164 
    165  MT("indent_for",
    166     "[keyword for] ([keyword var] [def i] [operator =] [number 0];",
    167     "     [variable i] [operator <] [number 100];",
    168     "     [variable i][operator ++])",
    169     "  [variable doSomething]([variable i]);",
    170     "[keyword debugger];");
    171 
    172  MT("indent_c_style",
    173     "[keyword function] [def foo]()",
    174     "{",
    175     "  [keyword debugger];",
    176     "}");
    177 
    178  MT("indent_else",
    179     "[keyword for] (;;)",
    180     "  [keyword if] ([variable foo])",
    181     "    [keyword if] ([variable bar])",
    182     "      [number 1];",
    183     "    [keyword else]",
    184     "      [number 2];",
    185     "  [keyword else]",
    186     "    [number 3];");
    187 
    188  MT("indent_funarg",
    189     "[variable foo]([number 10000],",
    190     "    [keyword function]([def a]) {",
    191     "  [keyword debugger];",
    192     "};");
    193 
    194  MT("indent_below_if",
    195     "[keyword for] (;;)",
    196     "  [keyword if] ([variable foo])",
    197     "    [number 1];",
    198     "[number 2];");
    199 
    200  MT("indent_semicolonless_if",
    201     "[keyword function] [def foo]() {",
    202     "  [keyword if] ([variable x])",
    203     "    [variable foo]()",
    204     "}")
    205 
    206  MT("indent_semicolonless_if_with_statement",
    207     "[keyword function] [def foo]() {",
    208     "  [keyword if] ([variable x])",
    209     "    [variable foo]()",
    210     "  [variable bar]()",
    211     "}")
    212 
    213  MT("multilinestring",
    214     "[keyword var] [def x] [operator =] [string 'foo\\]",
    215     "[string bar'];");
    216 
    217  MT("scary_regexp",
    218     "[string-2 /foo[[/]]bar/];");
    219 
    220  MT("indent_strange_array",
    221     "[keyword var] [def x] [operator =] [[",
    222     "  [number 1],,",
    223     "  [number 2],",
    224     "]];",
    225     "[number 10];");
    226 
    227  MT("param_default",
    228     "[keyword function] [def foo]([def x] [operator =] [string-2 `foo${][number 10][string-2 }bar`]) {",
    229     "  [keyword return] [variable-2 x];",
    230     "}");
    231 
    232  MT(
    233    "param_destructuring",
    234    "[keyword function] [def foo]([def x] [operator =] [string-2 `foo${][number 10][string-2 }bar`]) {",
    235    "  [keyword return] [variable-2 x];",
    236    "}");
    237 
    238  MT("new_target",
    239     "[keyword function] [def F]([def target]) {",
    240     "  [keyword if] ([variable-2 target] [operator &&] [keyword new].[keyword target].[property name]) {",
    241     "    [keyword return] [keyword new]",
    242     "      .[keyword target];",
    243     "  }",
    244     "}");
    245 
    246  MT("async",
    247     "[keyword async] [keyword function] [def foo]([def args]) { [keyword return] [atom true]; }");
    248 
    249  MT("async_assignment",
    250     "[keyword const] [def foo] [operator =] [keyword async] [keyword function] ([def args]) { [keyword return] [atom true]; };");
    251 
    252  MT("async_object",
    253     "[keyword let] [def obj] [operator =] { [property async]: [atom false] };");
    254 
    255  // async be highlighet as keyword and foo as def, but it requires potentially expensive look-ahead. See #4173
    256  MT("async_object_function",
    257     "[keyword let] [def obj] [operator =] { [property async] [property foo]([def args]) { [keyword return] [atom true]; } };");
    258 
    259  MT("async_object_properties",
    260     "[keyword let] [def obj] [operator =] {",
    261     "  [property prop1]: [keyword async] [keyword function] ([def args]) { [keyword return] [atom true]; },",
    262     "  [property prop2]: [keyword async] [keyword function] ([def args]) { [keyword return] [atom true]; },",
    263     "  [property prop3]: [keyword async] [keyword function] [def prop3]([def args]) { [keyword return] [atom true]; },",
    264     "};");
    265 
    266  MT("async_arrow",
    267     "[keyword const] [def foo] [operator =] [keyword async] ([def args]) [operator =>] { [keyword return] [atom true]; };");
    268 
    269  MT("async_jquery",
    270     "[variable $].[property ajax]({",
    271     "  [property url]: [variable url],",
    272     "  [property async]: [atom true],",
    273     "  [property method]: [string 'GET']",
    274     "});");
    275 
    276  MT("async_variable",
    277     "[keyword const] [def async] [operator =] {[property a]: [number 1]};",
    278     "[keyword const] [def foo] [operator =] [string-2 `bar ${][variable async].[property a][string-2 }`];")
    279 
    280  MT("bigint", "[number 1n] [operator +] [number 0x1afn] [operator +] [number 0o064n] [operator +] [number 0b100n];")
    281 
    282  MT("async_comment",
    283     "[keyword async] [comment /**/] [keyword function] [def foo]([def args]) { [keyword return] [atom true]; }");
    284 
    285  MT("indent_switch",
    286     "[keyword switch] ([variable x]) {",
    287     "  [keyword default]:",
    288     "    [keyword return] [number 2]",
    289     "}")
    290 
    291  MT("regexp_corner_case",
    292     "[operator +]{} [operator /] [atom undefined];",
    293     "[[[meta ...][string-2 /\\//] ]];",
    294     "[keyword void] [string-2 /\\//];",
    295     "[keyword do] [string-2 /\\//]; [keyword while] ([number 0]);",
    296     "[keyword if] ([number 0]) {} [keyword else] [string-2 /\\//];",
    297     "[string-2 `${][variable async][operator ++][string-2 }//`];",
    298     "[string-2 `${]{} [operator /] [string-2 /\\//}`];")
    299 
    300  MT("return_eol",
    301     "[keyword return]",
    302     "{} [string-2 /5/]")
    303 
    304  MT("numeric separator",
    305     "[number 123_456];",
    306     "[number 0xdead_c0de];",
    307     "[number 0o123_456];",
    308     "[number 0b1101_1101];",
    309     "[number .123_456e0_1];",
    310     "[number 1E+123_456];",
    311     "[number 12_34_56n];")
    312 
    313  MT("underscore property",
    314     "[variable something].[property _property];",
    315     "[variable something].[property _123];",
    316     "[variable something].[property _for];",
    317     "[variable _for];",
    318     "[variable _123];")
    319 
    320  var ts_mode = CodeMirror.getMode({indentUnit: 2}, "application/typescript")
    321  function TS(name) {
    322    test.mode(name, ts_mode, Array.prototype.slice.call(arguments, 1))
    323  }
    324 
    325  TS("typescript_extend_type",
    326     "[keyword class] [def Foo] [keyword extends] [type Some][operator <][type Type][operator >] {}")
    327 
    328  TS("typescript_arrow_type",
    329     "[keyword let] [def x]: ([variable arg]: [type Type]) [operator =>] [type ReturnType]")
    330 
    331  TS("typescript_class",
    332     "[keyword class] [def Foo] {",
    333     "  [keyword public] [keyword static] [property main]() {}",
    334     "  [keyword private] [property _foo]: [type string];",
    335     "}")
    336 
    337  TS("typescript_literal_types",
    338     "[keyword import] [keyword *] [keyword as] [def Sequelize] [keyword from] [string 'sequelize'];",
    339     "[keyword interface] [def MyAttributes] {",
    340     "  [property truthy]: [string 'true'] [operator |] [number 1] [operator |] [atom true];",
    341     "  [property falsy]: [string 'false'] [operator |] [number 0] [operator |] [atom false];",
    342     "}",
    343     "[keyword interface] [def MyInstance] [keyword extends] [type Sequelize].[type Instance] [operator <] [type MyAttributes] [operator >] {",
    344     "  [property rawAttributes]: [type MyAttributes];",
    345     "  [property truthy]: [string 'true'] [operator |] [number 1] [operator |] [atom true];",
    346     "  [property falsy]: [string 'false'] [operator |] [number 0] [operator |] [atom false];",
    347     "}")
    348 
    349  TS("typescript_extend_operators",
    350     "[keyword export] [keyword interface] [def UserModel] [keyword extends]",
    351     "  [type Sequelize].[type Model] [operator <] [type UserInstance], [type UserAttributes] [operator >] {",
    352     "    [property findById]: (",
    353     "    [variable userId]: [type number]",
    354     "    ) [operator =>] [type Promise] [operator <] [type Array] [operator <] { [property id], [property name] } [operator >>];",
    355     "    [property updateById]: (",
    356     "    [variable userId]: [type number],",
    357     "    [variable isActive]: [type boolean]",
    358     "    ) [operator =>] [type Promise] [operator <] [type AccountHolderNotificationPreferenceInstance] [operator >];",
    359     "  }")
    360 
    361  TS("typescript_interface_with_const",
    362     "[keyword const] [def hello]: {",
    363     "  [property prop1][operator ?]: [type string];",
    364     "  [property prop2][operator ?]: [type string];",
    365     "} [operator =] {};")
    366 
    367  TS("typescript_double_extend",
    368     "[keyword export] [keyword interface] [def UserAttributes] {",
    369     "  [property id][operator ?]: [type number];",
    370     "  [property createdAt][operator ?]: [type Date];",
    371     "}",
    372     "[keyword export] [keyword interface] [def UserInstance] [keyword extends] [type Sequelize].[type Instance][operator <][type UserAttributes][operator >], [type UserAttributes] {",
    373     "  [property id]: [type number];",
    374     "  [property createdAt]: [type Date];",
    375     "}");
    376 
    377  TS("typescript_index_signature",
    378     "[keyword interface] [def A] {",
    379     "  [[ [variable prop]: [type string] ]]: [type any];",
    380     "  [property prop1]: [type any];",
    381     "}");
    382 
    383  TS("typescript_generic_class",
    384     "[keyword class] [def Foo][operator <][type T][operator >] {",
    385     "  [property bar]() {}",
    386     "  [property foo](): [type Foo] {}",
    387     "}")
    388 
    389  TS("typescript_type_when_keyword",
    390     "[keyword export] [keyword type] [type AB] [operator =] [type A] [operator |] [type B];",
    391     "[keyword type] [type Flags] [operator =] {",
    392     "  [property p1]: [type string];",
    393     "  [property p2]: [type boolean];",
    394     "};")
    395 
    396  TS("typescript_type_when_not_keyword",
    397     "[keyword class] [def HasType] {",
    398     "  [property type]: [type string];",
    399     "  [property constructor]([def type]: [type string]) {",
    400     "    [keyword this].[property type] [operator =] [variable-2 type];",
    401     "  }",
    402     "  [property setType]({ [def type] }: { [property type]: [type string]; }) {",
    403     "    [keyword this].[property type] [operator =] [variable-2 type];",
    404     "  }",
    405     "}")
    406 
    407  TS("typescript_function_generics",
    408     "[keyword function] [def a]() {}",
    409     "[keyword function] [def b][operator <][type IA] [keyword extends] [type object], [type IB] [keyword extends] [type object][operator >]() {}",
    410     "[keyword function] [def c]() {}")
    411 
    412  TS("typescript_complex_return_type",
    413     "[keyword function] [def A]() {",
    414     "  [keyword return] [keyword this].[property property];",
    415     "}",
    416     "[keyword function] [def B](): [type Promise][operator <]{ [[ [variable key]: [type string] ]]: [type any] } [operator |] [atom null][operator >] {",
    417     "  [keyword return] [keyword this].[property property];",
    418     "}")
    419 
    420  TS("typescript_complex_type_casting",
    421     "[keyword const] [def giftpay] [operator =] [variable config].[property get]([string 'giftpay']) [keyword as] { [[ [variable platformUuid]: [type string] ]]: { [property version]: [type number]; [property apiCode]: [type string]; } };")
    422 
    423  TS("typescript_keyof",
    424     "[keyword function] [def x][operator <][type T] [keyword extends] [keyword keyof] [type X][operator >]([def a]: [type T]) {",
    425     "  [keyword return]")
    426 
    427  TS("typescript_new_typeargs",
    428     "[keyword let] [def x] [operator =] [keyword new] [variable Map][operator <][type string], [type Date][operator >]([string-2 `foo${][variable bar][string-2 }`])")
    429 
    430  TS("modifiers",
    431     "[keyword class] [def Foo] {",
    432     "  [keyword public] [keyword abstract] [property bar]() {}",
    433     "  [property constructor]([keyword readonly] [keyword private] [def x]) {}",
    434     "}")
    435 
    436  TS("arrow prop",
    437     "({[property a]: [def p] [operator =>] [variable-2 p]})")
    438 
    439  TS("generic in function call",
    440     "[keyword this].[property a][operator <][type Type][operator >]([variable foo]);",
    441     "[keyword this].[property a][operator <][variable Type][operator >][variable foo];")
    442 
    443  TS("type guard",
    444     "[keyword class] [def Appler] {",
    445     "  [keyword static] [property assertApple]([def fruit]: [type Fruit]): [variable-2 fruit] [keyword is] [type Apple] {",
    446     "    [keyword if] ([operator !]([variable-2 fruit] [keyword instanceof] [variable Apple]))",
    447     "      [keyword throw] [keyword new] [variable Error]();",
    448     "  }",
    449     "}")
    450 
    451  TS("type as variable",
    452     "[variable type] [operator =] [variable x] [keyword as] [type Bar];");
    453 
    454  TS("enum body",
    455     "[keyword export] [keyword const] [keyword enum] [def CodeInspectionResultType] {",
    456     "  [def ERROR] [operator =] [string 'problem_type_error'],",
    457     "  [def WARNING] [operator =] [string 'problem_type_warning'],",
    458     "  [def META],",
    459     "}")
    460 
    461  TS("parenthesized type",
    462     "[keyword class] [def Foo] {",
    463     "  [property x] [operator =] [keyword new] [variable A][operator <][type B], [type string][operator |](() [operator =>] [type void])[operator >]();",
    464     "  [keyword private] [property bar]();",
    465     "}")
    466 
    467  TS("abstract class",
    468     "[keyword export] [keyword abstract] [keyword class] [def Foo] {}")
    469 
    470  TS("interface without semicolons",
    471     "[keyword interface] [def Foo] {",
    472     "  [property greet]([def x]: [type int]): [type blah]",
    473     "  [property bar]: [type void]",
    474     "}")
    475 
    476  var jsonld_mode = CodeMirror.getMode(
    477    {indentUnit: 2},
    478    {name: "javascript", jsonld: true}
    479  );
    480  function LD(name) {
    481    test.mode(name, jsonld_mode, Array.prototype.slice.call(arguments, 1));
    482  }
    483 
    484  LD("json_ld_keywords",
    485    '{',
    486    '  [meta "@context"]: {',
    487    '    [meta "@base"]: [string "http://example.com"],',
    488    '    [meta "@vocab"]: [string "http://xmlns.com/foaf/0.1/"],',
    489    '    [property "likesFlavor"]: {',
    490    '      [meta "@container"]: [meta "@list"]',
    491    '      [meta "@reverse"]: [string "@beFavoriteOf"]',
    492    '    },',
    493    '    [property "nick"]: { [meta "@container"]: [meta "@set"] },',
    494    '    [property "nick"]: { [meta "@container"]: [meta "@index"] }',
    495    '  },',
    496    '  [meta "@graph"]: [[ {',
    497    '    [meta "@id"]: [string "http://dbpedia.org/resource/John_Lennon"],',
    498    '    [property "name"]: [string "John Lennon"],',
    499    '    [property "modified"]: {',
    500    '      [meta "@value"]: [string "2010-05-29T14:17:39+02:00"],',
    501    '      [meta "@type"]: [string "http://www.w3.org/2001/XMLSchema#dateTime"]',
    502    '    }',
    503    '  } ]]',
    504    '}');
    505 
    506  LD("json_ld_fake",
    507    '{',
    508    '  [property "@fake"]: [string "@fake"],',
    509    '  [property "@contextual"]: [string "@identifier"],',
    510    '  [property "user@domain.com"]: [string "@graphical"],',
    511    '  [property "@ID"]: [string "@@ID"]',
    512    '}');
    513 })();