Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit c344651

Browse files
committed
Complete tests as function bodies are now recognized
1 parent 4619867 commit c344651

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

spec/javascript-spec.coffee

+36-6
Original file line numberDiff line numberDiff line change
@@ -406,13 +406,16 @@ describe "Javascript grammar", ->
406406

407407
describe "non-anonymous functions", ->
408408
it "tokenizes methods", ->
409-
{tokens} = grammar.tokenizeLine('Foo.method = function nonAnonymous(')
409+
{tokens} = grammar.tokenizeLine('Foo.method = function nonAnonymous(){}')
410410
expect(tokens[0]).toEqual value: 'Foo', scopes: ['source.js', 'meta.function.js', 'support.class.js']
411411
expect(tokens[2]).toEqual value: 'method', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
412412
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'keyword.operator.js']
413413
expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
414414
expect(tokens[8]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
415415
expect(tokens[9]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js']
416+
expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js']
417+
expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js']
418+
expect(tokens[12]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js']
416419

417420
it "tokenizes methods", ->
418421
{tokens} = grammar.tokenizeLine('f(a, b) {}')
@@ -422,8 +425,10 @@ describe "Javascript grammar", ->
422425
expect(tokens[3]).toEqual value: ',', scopes: ['source.js', 'meta.method.js', 'meta.object.delimiter.js']
423426
expect(tokens[5]).toEqual value: 'b', scopes: ['source.js', 'meta.method.js', 'variable.parameter.function.js']
424427
expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js']
428+
expect(tokens[8]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.begin.js']
429+
expect(tokens[9]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.end.js']
425430

426-
{tokens} = grammar.tokenizeLine('hi({host, root = "./", plugins = [a, "b", "c", d]}) {}')
431+
{tokens} = grammar.tokenizeLine('hi({host, root = "./", plugins = [a, "b", "c", d]}){}')
427432
expect(tokens[0]).toEqual value: 'hi', scopes: ['source.js', 'meta.method.js', 'entity.name.function.js']
428433
expect(tokens[1]).toEqual value: '(', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.begin.js']
429434
expect(tokens[2]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'meta.brace.curly.js']
@@ -447,41 +452,60 @@ describe "Javascript grammar", ->
447452
expect(tokens[34]).toEqual value: ']', scopes: ['source.js', 'meta.method.js', 'meta.brace.square.js']
448453
expect(tokens[35]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'meta.brace.curly.js']
449454
expect(tokens[36]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js']
455+
expect(tokens[37]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.begin.js']
456+
expect(tokens[38]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.end.js']
450457

451458
it "tokenizes functions", ->
452-
{tokens} = grammar.tokenizeLine('var func = function nonAnonymous(')
459+
{tokens} = grammar.tokenizeLine('var func = function nonAnonymous(){}')
453460
expect(tokens[0]).toEqual value: 'var', scopes: ['source.js', 'storage.modifier.js']
454461
expect(tokens[2]).toEqual value: 'func', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
455462
expect(tokens[4]).toEqual value: '=', scopes: ['source.js', 'meta.function.js', 'keyword.operator.js']
456463
expect(tokens[6]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
457464
expect(tokens[8]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
458465
expect(tokens[9]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js']
466+
expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js']
467+
expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js']
468+
expect(tokens[12]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js']
459469

460470
it "tokenizes object functions", ->
461-
{tokens} = grammar.tokenizeLine('foo: function nonAnonymous(')
471+
{tokens} = grammar.tokenizeLine('foo: function nonAnonymous(){}')
462472
expect(tokens[0]).toEqual value: 'foo', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js']
463473
expect(tokens[1]).toEqual value: ':', scopes: ['source.js', 'meta.function.json.js', 'keyword.operator.js']
464474
expect(tokens[3]).toEqual value: 'function', scopes: ['source.js', 'meta.function.json.js', 'storage.type.function.js']
465475
expect(tokens[5]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js']
466476
expect(tokens[6]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.begin.js']
477+
expect(tokens[7]).toEqual value: ')', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.end.js']
478+
expect(tokens[8]).toEqual value: '{', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.begin.js']
479+
expect(tokens[9]).toEqual value: '}', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.end.js']
467480

468481
it "tokenizes quoted object functions", ->
469-
{tokens} = grammar.tokenizeLine('"foo": function nonAnonymous(')
482+
{tokens} = grammar.tokenizeLine('"foo": function nonAnonymous(){}')
470483
expect(tokens[1]).toEqual value: 'foo', scopes: ['source.js', 'meta.function.json.js', 'string.quoted.double.js', 'entity.name.function.js']
471484
expect(tokens[3]).toEqual value: ':', scopes: ['source.js', 'meta.function.json.js', 'keyword.operator.js']
472485
expect(tokens[5]).toEqual value: 'function', scopes: ['source.js', 'meta.function.json.js', 'storage.type.function.js']
473486
expect(tokens[7]).toEqual value: 'nonAnonymous', scopes: ['source.js', 'meta.function.json.js', 'entity.name.function.js']
474487
expect(tokens[8]).toEqual value: '(', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.begin.js']
488+
expect(tokens[9]).toEqual value: ')', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.end.js']
489+
expect(tokens[10]).toEqual value: '{', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.begin.js']
490+
expect(tokens[11]).toEqual value: '}', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.end.js']
475491

476492
it "tokenizes async functions", ->
477493
{tokens} = grammar.tokenizeLine('async function f(){}')
478494
expect(tokens[0]).toEqual value: 'async', scopes: ['source.js', 'meta.function.js', 'storage.modifier.js']
479495
expect(tokens[2]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']
480496
expect(tokens[4]).toEqual value: 'f', scopes: ['source.js', 'meta.function.js', 'entity.name.function.js']
497+
expect(tokens[5]).toEqual value: '(', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.begin.js']
498+
expect(tokens[6]).toEqual value: ')', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.parameters.end.js']
499+
expect(tokens[7]).toEqual value: '{', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.begin.js']
500+
expect(tokens[8]).toEqual value: '}', scopes: ['source.js', 'meta.function.js', 'punctuation.definition.function.body.end.js']
481501

482502
{tokens} = grammar.tokenizeLine('async f(){}')
483503
expect(tokens[0]).toEqual value: 'async', scopes: ['source.js', 'storage.modifier.js']
484504
expect(tokens[2]).toEqual value: 'f', scopes: ['source.js', 'meta.method.js', 'entity.name.function.js']
505+
expect(tokens[3]).toEqual value: '(', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.begin.js']
506+
expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js']
507+
expect(tokens[5]).toEqual value: '{', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.begin.js']
508+
expect(tokens[6]).toEqual value: '}', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.function.body.end.js']
485509

486510
it "tokenizes arrow functions with params", ->
487511
{tokens} = grammar.tokenizeLine('(param1,param2)=>{}')
@@ -490,6 +514,8 @@ describe "Javascript grammar", ->
490514
expect(tokens[3]).toEqual value: 'param2', scopes: ['source.js', 'meta.function.arrow.js', 'variable.parameter.function.js']
491515
expect(tokens[4]).toEqual value: ')', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.parameters.end.js']
492516
expect(tokens[5]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.js', 'storage.type.arrow.js']
517+
expect(tokens[6]).toEqual value: '{', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.begin.js']
518+
expect(tokens[7]).toEqual value: '}', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.end.js']
493519

494520
it "tokenizes stored arrow functions with params", ->
495521
{tokens} = grammar.tokenizeLine('var func = (param1,param2)=>{}')
@@ -500,6 +526,8 @@ describe "Javascript grammar", ->
500526
expect(tokens[9]).toEqual value: 'param2', scopes: ['source.js', 'meta.function.arrow.js', 'variable.parameter.function.js']
501527
expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.parameters.end.js']
502528
expect(tokens[11]).toEqual value: '=>', scopes: ['source.js', 'meta.function.arrow.js', 'storage.type.arrow.js']
529+
expect(tokens[12]).toEqual value: '{', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.begin.js']
530+
expect(tokens[13]).toEqual value: '}', scopes: ['source.js', 'meta.function.arrow.js', 'punctuation.definition.function.body.end.js']
503531

504532
describe "strings and functions", ->
505533
it "doesn't confuse them", ->
@@ -522,7 +550,7 @@ describe "Javascript grammar", ->
522550
expect(tokens[3]).toEqual value: '){', scopes: ['source.js', 'meta.method.js', 'string.quoted.double.js']
523551
expect(tokens[4]).toEqual value: '"', scopes: ['source.js', 'meta.method.js', 'string.quoted.double.js', 'punctuation.definition.string.end.js']
524552
expect(tokens[5]).toEqual value: ')', scopes: ['source.js', 'meta.method.js', 'punctuation.definition.parameters.end.js']
525-
expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'punctuation.terminator.statement.js']
553+
expect(tokens[6]).toEqual value: ';', scopes: ['source.js', 'meta.method.js']
526554

527555
delimsByScope =
528556
"string.quoted.double.js": '"'
@@ -608,6 +636,8 @@ describe "Javascript grammar", ->
608636
expect(tokens[7]).toEqual value: 'Bar', scopes: ['source.js', 'meta.function.json.js', 'comment.block.documentation.js']
609637
expect(tokens[8]).toEqual value: '*/', scopes: ['source.js', 'meta.function.json.js', 'comment.block.documentation.js', 'punctuation.definition.comment.js']
610638
expect(tokens[9]).toEqual value: 'bar', scopes: ['source.js', 'meta.function.json.js', 'variable.parameter.function.js']
639+
expect(tokens[10]).toEqual value: ')', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.parameters.end.js']
640+
expect(tokens[11]).toEqual value: '{', scopes: ['source.js', 'meta.function.json.js', 'punctuation.definition.function.body.begin.js']
611641

612642
{tokens} = grammar.tokenizeLine('function test(bar, // comment')
613643
expect(tokens[0]).toEqual value: 'function', scopes: ['source.js', 'meta.function.js', 'storage.type.function.js']

0 commit comments

Comments
 (0)