       '''
       tokens = lines[0]
       expect(tokens.length).toBe 1
-      expect(tokens[0]).toEqual value: '/*', scopes: [
-        'source.csound'
-        'comment.block.csound'
-        'punctuation.definition.comment.begin.csound'
-      ]
+      expect(tokens[0]).toEqual value: '/*', scopes: ['source.csound', 'comment.block.csound', 'punctuation.definition.comment.begin.csound']
       tokens = lines[1]
       expect(tokens.length).toBe 1
-      expect(tokens[0]).toEqual value: ' * comment', scopes: [
-        'source.csound'
-        'comment.block.csound'
-      ]
+      expect(tokens[0]).toEqual value: ' * comment', scopes: ['source.csound', 'comment.block.csound']
       tokens = lines[2]
       expect(tokens.length).toBe 2
-      expect(tokens[0]).toEqual value: ' ', scopes: [
-        'source.csound'
-        'comment.block.csound'
-      ]
-      expect(tokens[1]).toEqual value: '*/', scopes: [
-        'source.csound'
-        'comment.block.csound'
-        'punctuation.definition.comment.end.csound'
-      ]
+      expect(tokens[0]).toEqual value: ' ', scopes: ['source.csound', 'comment.block.csound']
+      expect(tokens[1]).toEqual value: '*/', scopes: ['source.csound', 'comment.block.csound', 'punctuation.definition.comment.end.csound']
       tokens = lines[3]
       expect(tokens.length).toBe 2
-      expect(tokens[0]).toEqual value: ';', scopes: [
-        'source.csound'
-        'comment.line.csound'
-        'punctuation.definition.comment.line.csound'
-      ]
-      expect(tokens[1]).toEqual value: ' comment', scopes: [
-        'source.csound'
-        'comment.line.csound'
-      ]
+      expect(tokens[0]).toEqual value: ';', scopes: ['source.csound', 'comment.line.csound', 'punctuation.definition.comment.line.csound']
+      expect(tokens[1]).toEqual value: ' comment', scopes: ['source.csound', 'comment.line.csound']
       tokens = lines[4]
       expect(tokens.length).toBe 2
-      expect(tokens[0]).toEqual value: '//', scopes: [
-        'source.csound'
-        'comment.line.csound'
-        'punctuation.definition.comment.line.csound'
-      ]
-      expect(tokens[1]).toEqual value: ' comment', scopes: [
-        'source.csound'
-        'comment.line.csound'
-      ]
+      expect(tokens[0]).toEqual value: '//', scopes: ['source.csound', 'comment.line.csound', 'punctuation.definition.comment.line.csound']
+      expect(tokens[1]).toEqual value: ' comment', scopes: ['source.csound', 'comment.line.csound']
 
     it 'tokenizes instrument blocks', ->
       lines = grammar.tokenizeLines '''

      )
      expect(lines.length - 2).toBe deprecatedWidgetTypes.length
      for i in [1...lines.length - 1]
        expect(lines[i][0]).toEqual value: deprecatedWidgetTypes[i - 1], scopes: [
          'source.csound-document'
          'meta.cabbage-gui.csound-document'
          'invalid.deprecated.cabbage-gui.csound-document'
        ]

    it 'tokenizes Cabbage widget identifiers', ->
      # https://github.com/rorywalsh/cabaiste/search?q=CabbageIdentifierStrings+path%3ASource+filename%3ACabbageIds.h

      ]
      lines = grammar.tokenizeLines(preprocessorDirectives.join '\n')
      for i in [0...lines.length]
        expect(lines[i][0]).toEqual value: preprocessorDirectives[i], scopes: ['source.csound', 'keyword.preprocessor.csound']

    it 'tokenizes function-like macros', ->
      {tokens} = grammar.tokenizeLine '$MACRO.(((x\\))\' "x)\\)x\\))"# {{x\\))x)\\)}});'
      expect(tokens.length).toBe 29
      expect(tokens[0]).toEqual value: '$MACRO.', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'entity.name.function.preprocessor.csound']
      expect(tokens[1]).toEqual value: '(', scopes: ['source.csound', 'meta.function-like-macro-use.csound']
      expect(tokens[2]).toEqual value: '(', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'meta.macro-parameter-value-parenthetical.csound', 'constant.character.escape.csound']
      expect(tokens[3]).toEqual value: '(', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'meta.macro-parameter-value-parenthetical.csound', 'meta.macro-parameter-value-parenthetical.csound', 'constant.character.escape.csound']
      expect(tokens[4]).toEqual value: 'x', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'meta.macro-parameter-value-parenthetical.csound', 'meta.macro-parameter-value-parenthetical.csound', 'meta.other.csound']
      expect(tokens[5]).toEqual value: '\\)', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'meta.macro-parameter-value-parenthetical.csound', 'meta.macro-parameter-value-parenthetical.csound', 'constant.character.escape.csound']
      expect(tokens[6]).toEqual value: ')', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'meta.macro-parameter-value-parenthetical.csound', 'invalid.illegal.csound']
      expect(tokens[7]).toEqual value: "'", scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'punctuation.macro-parameter-separator.csound']
      expect(tokens[8]).toEqual value: ' ', scopes: ['source.csound', 'meta.function-like-macro-use.csound']
      expect(tokens[9]).toEqual value: '"', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound', 'punctuation.definition.string.begin.csound']
      expect(tokens[10]).toEqual value: 'x', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound']
      expect(tokens[11]).toEqual value: ')', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound', 'invalid.illegal.csound']
      expect(tokens[12]).toEqual value: '\\)', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound', 'constant.character.escape.csound']
      expect(tokens[13]).toEqual value: 'x', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound']
      expect(tokens[14]).toEqual value: '\\)', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound', 'constant.character.escape.csound']
      expect(tokens[15]).toEqual value: ')', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound', 'invalid.illegal.csound']
      expect(tokens[16]).toEqual value: '"', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.quoted.csound', 'punctuation.definition.string.end.csound']
      expect(tokens[17]).toEqual value: '#', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'punctuation.macro-parameter-separator.csound']
      expect(tokens[18]).toEqual value: ' ', scopes: ['source.csound', 'meta.function-like-macro-use.csound']
      expect(tokens[19]).toEqual value: '{{', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound']
      expect(tokens[20]).toEqual value: 'x', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound']
      expect(tokens[21]).toEqual value: '\\)', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound', 'constant.character.escape.csound']
      expect(tokens[22]).toEqual value: ')', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound', 'invalid.illegal.csound']
      expect(tokens[23]).toEqual value: 'x', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound']
      expect(tokens[24]).toEqual value: ')', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound', 'invalid.illegal.csound']
      expect(tokens[25]).toEqual value: '\\)', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound', 'constant.character.escape.csound']
      expect(tokens[26]).toEqual value: '}}', scopes: ['source.csound', 'meta.function-like-macro-use.csound', 'string.braced.csound']
      expect(tokens[27]).toEqual value: ')', scopes: ['source.csound', 'meta.function-like-macro-use.csound']
      expect(tokens[28]).toEqual value: ';', scopes: ['source.csound', 'comment.line.csound', 'punctuation.definition.comment.line.csound']


  describe 'Csound Score grammar', ->
