# -*- coding: utf-8 -*- """ Javascript tests ~~~~~~~~~~~~~~~~ :copyright: Copyright 2006-2017 by the Pygments team, see AUTHORS. :license: BSD, see LICENSE for details. """ import unittest from pygments.lexers import CoffeeScriptLexer from pygments.token import Token COFFEE_SLASH_GOLDEN = [ # input_str, slashes_are_regex_here (r'/\\/', True), (r'/\\/i', True), (r'/\//', True), (r'/(\s)/', True), ('/a{2,8}/', True), ('/b*c?d+/', True), ('/(capture-match)/', True), ('/(?:do-not-capture-match)/', True), ('/this|or|that/', True), ('/[char-set]/', True), ('/[^neg-char_st]/', True), ('/^.*$/', True), (r'/\n(\f)\0\1\d\b\cm\u1234/', True), (r'/^.?([^/\\\n\w]*)a\1+$/.something(or_other) # something more complex', True), ("foo = (str) ->\n /'|\"/.test str", True), ('a = a / b / c', False), ('a = a/b/c', False), ('a = a/b/ c', False), ('a = a /b/c', False), ('a = 1 + /d/.test(a)', True), ] def test_coffee_slashes(): for input_str, slashes_are_regex_here in COFFEE_SLASH_GOLDEN: yield coffee_runner, input_str, slashes_are_regex_here def coffee_runner(input_str, slashes_are_regex_here): lex = CoffeeScriptLexer() output = list(lex.get_tokens(input_str)) print(output) for t, s in output: if '/' in s: is_regex = t is Token.String.Regex assert is_regex == slashes_are_regex_here, (t, s) class CoffeeTest(unittest.TestCase): def setUp(self): self.lexer = CoffeeScriptLexer() def testMixedSlashes(self): fragment = u'a?/foo/:1/2;\n' tokens = [ (Token.Name.Other, u'a'), (Token.Operator, u'?'), (Token.Literal.String.Regex, u'/foo/'), (Token.Operator, u':'), (Token.Literal.Number.Integer, u'1'), (Token.Operator, u'/'), (Token.Literal.Number.Integer, u'2'), (Token.Punctuation, u';'), (Token.Text, u'\n'), ] self.assertEqual(tokens, list(self.lexer.get_tokens(fragment))) def testBewareInfiniteLoop(self): # This demonstrates the case that "This isn't really guarding" comment # refers to. fragment = '/a/x;\n' tokens = [ (Token.Text, ''), (Token.Operator, '/'), (Token.Name.Other, 'a'), (Token.Operator, '/'), (Token.Name.Other, 'x'), (Token.Punctuation, ';'), (Token.Text, '\n'), ] self.assertEqual(tokens, list(self.lexer.get_tokens(fragment)))