from babel.messages import jslexer def test_unquote(): assert jslexer.unquote_string('""') == '' assert jslexer.unquote_string(r'"h\u00ebllo"') == "hëllo" assert jslexer.unquote_string(r'"h\xebllo"') == "hëllo" assert jslexer.unquote_string(r'"\xebb"') == "ëb" def test_dollar_in_identifier(): assert list(jslexer.tokenize('dollar$dollar')) == [('name', 'dollar$dollar', 1)] def test_dotted_name(): assert list(jslexer.tokenize("foo.bar(quux)", dotted=True)) == [ ('name', 'foo.bar', 1), ('operator', '(', 1), ('name', 'quux', 1), ('operator', ')', 1) ] def test_dotted_name_end(): assert list(jslexer.tokenize("foo.bar", dotted=True)) == [ ('name', 'foo.bar', 1), ] def test_template_string(): assert list(jslexer.tokenize("gettext `foo\"bar\"p`", template_string=True)) == [ ('name', 'gettext', 1), ('template_string', '`foo"bar"p`', 1) ] def test_jsx(): assert list(jslexer.tokenize(""" } data={{active: true}}> """, jsx=True)) == [ ('jsx_tag', '', 2), ('operator', '{', 2), ('name', 'i18n._', 2), ('operator', '(', 2), ('string', "'String1'", 2), ('operator', ')', 2), ('operator', '}', 2), ('jsx_tag', '', 2), ('jsx_tag', '', 3), ('operator', '{', 3), ('name', 'i18n._', 3), ('operator', '(', 3), ('string', "'String 2'", 3), ('operator', ')', 3), ('operator', '}', 3), ('jsx_tag', '', 3), ('jsx_tag', '', 4), ('operator', '{', 4), ('name', 'i18n._', 4), ('operator', '(', 4), ('string', "'String 3'", 4), ('operator', ')', 4), ('operator', '}', 4), ('jsx_tag', '', 4), ('jsx_tag', '', 5), ('jsx_tag', '', 6), ('operator', '}', 6), ('name', 'data', 6), ('operator', '=', 6), ('operator', '{', 6), ('operator', '{', 6), ('name', 'active', 6), ('operator', ':', 6), ('name', 'true', 6), ('operator', '}', 6), ('operator', '}', 6), ('operator', '>', 6), ('jsx_tag', '', 7), ('jsx_tag', '', 8) ]