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

Commit 71a1094

Browse files
authored
test for extra operators
add "optional", "**=", and other test
1 parent eedb1dc commit 71a1094

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

spec/javascript-spec.coffee

+26-6
Original file line numberDiff line numberDiff line change
@@ -504,13 +504,22 @@ describe "JavaScript grammar", ->
504504

505505
describe "compound", ->
506506
it "tokenizes them", ->
507-
operators = ["+=", "-=", "*=", "/=", "%="]
507+
operators = ["+=", "-=", "*=", "/=", "%=", "**="]
508508
for operator in operators
509509
{tokens} = grammar.tokenizeLine('a ' + operator + ' b')
510510
expect(tokens[0]).toEqual value: 'a ', scopes: ['source.js']
511511
expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.assignment.compound.js']
512512
expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
513513

514+
describe "logical", ->
515+
it "tokenizes them", ->
516+
operators = ["||=", "&&=", "??="]
517+
for operator in operators
518+
{tokens} = grammar.tokenizeLine('a ' + operator + ' b')
519+
expect(tokens[0]).toEqual value: 'a ', scopes: ['source.js']
520+
expect(tokens[1]).toEqual value: operator, scopes: ['source.js', 'keyword.operator.assignment.compound.logical.js']
521+
expect(tokens[2]).toEqual value: ' b', scopes: ['source.js']
522+
514523
describe "bitwise", ->
515524
it "tokenizes them", ->
516525
operators = ["<<=", ">>=", ">>>=", "&=", "^=", "|="]
@@ -1774,27 +1783,38 @@ describe "JavaScript grammar", ->
17741783
expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.js']
17751784
expect(tokens[2]).toEqual value: 'C', scopes: ['source.js', 'constant.other.property.js']
17761785
1777-
it "supports the optional chaining operator", ->
1786+
it "tokenizes the optional chaining operator", ->
17781787
{tokens} = grammar.tokenizeLine('obj?.prop')
17791788
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
1780-
expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
1789+
expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
17811790
expect(tokens[2]).toEqual value: 'prop', scopes: ['source.js', 'variable.other.property.js']
17821791
17831792
{tokens} = grammar.tokenizeLine('obj?.$_')
17841793
expect(tokens[0]).toEqual value: 'obj', scopes: ['source.js', 'variable.other.object.js']
1785-
expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
1794+
expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
17861795
expect(tokens[2]).toEqual value: '$_', scopes: ['source.js', 'variable.other.property.js']
17871796
17881797
{tokens} = grammar.tokenizeLine('a()?.b()')
17891798
expect(tokens[2]).toEqual value: ')', scopes: ['source.js', 'meta.function-call.js', 'meta.arguments.js', 'punctuation.definition.arguments.end.bracket.round.js']
1790-
expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.js']
1799+
expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional.js']
17911800
expect(tokens[4]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
17921801
17931802
{tokens} = grammar.tokenizeLine('a()?.MY_CONSTANT')
17941803
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'meta.function-call.js', 'entity.name.function.js']
1795-
expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.js']
1804+
expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
17961805
expect(tokens[4]).toEqual value: 'MY_CONSTANT', scopes: ['source.js', 'constant.other.property.js']
17971806
1807+
{tokens} = grammar.tokenizeLine('a.b?.()')
1808+
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
1809+
expect(tokens[1]).toEqual value: '.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
1810+
expect(tokens[2]).toEqual value: 'b', scopes: ['source.js', 'meta.method-call.js', 'entity.name.function.js']
1811+
expect(tokens[3]).toEqual value: '?.', scopes: ['source.js', 'meta.method-call.js', 'meta.delimiter.method.optional.js']
1812+
1813+
{tokens} = grammar.tokenizeLine('a?.[5]')
1814+
expect(tokens[0]).toEqual value: 'a', scopes: ['source.js', 'variable.other.object.js']
1815+
expect(tokens[1]).toEqual value: '?.', scopes: ['source.js', 'meta.delimiter.property.optional.js']
1816+
expect(tokens[2]).toEqual value: '[', scopes: ['source.js', 'meta.brace.square.js']
1817+
17981818
17991819
describe "strings and functions", ->
18001820
it "doesn't confuse them", ->

0 commit comments

Comments
 (0)