| Index: mojo/public/tools/bindings/pylib/mojom_tests/parse/lexer_unittest.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom_tests/parse/lexer_unittest.py b/mojo/public/tools/bindings/pylib/mojom_tests/parse/lexer_unittest.py
|
| deleted file mode 100644
|
| index 97079a7da6c84ffa6f65c158bf93371e89ea05cd..0000000000000000000000000000000000000000
|
| --- a/mojo/public/tools/bindings/pylib/mojom_tests/parse/lexer_unittest.py
|
| +++ /dev/null
|
| @@ -1,190 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import imp
|
| -import os.path
|
| -import sys
|
| -import unittest
|
| -
|
| -def _GetDirAbove(dirname):
|
| - """Returns the directory "above" this file containing |dirname| (which must
|
| - also be "above" this file)."""
|
| - path = os.path.abspath(__file__)
|
| - while True:
|
| - path, tail = os.path.split(path)
|
| - assert tail
|
| - if tail == dirname:
|
| - return path
|
| -
|
| -try:
|
| - imp.find_module("ply")
|
| -except ImportError:
|
| - sys.path.append(os.path.join(_GetDirAbove("public"), "public/third_party"))
|
| -from ply import lex
|
| -
|
| -try:
|
| - imp.find_module("mojom")
|
| -except ImportError:
|
| - sys.path.append(os.path.join(_GetDirAbove("pylib"), "pylib"))
|
| -import mojom.parse.lexer
|
| -
|
| -
|
| -# This (monkey-patching LexToken to make comparison value-based) is evil, but
|
| -# we'll do it anyway. (I'm pretty sure ply's lexer never cares about comparing
|
| -# for object identity.)
|
| -def _LexTokenEq(self, other):
|
| - return self.type == other.type and self.value == other.value and \
|
| - self.lineno == other.lineno and self.lexpos == other.lexpos
|
| -setattr(lex.LexToken, '__eq__', _LexTokenEq)
|
| -
|
| -
|
| -def _MakeLexToken(token_type, value, lineno=1, lexpos=0):
|
| - """Makes a LexToken with the given parameters. (Note that lineno is 1-based,
|
| - but lexpos is 0-based.)"""
|
| - rv = lex.LexToken()
|
| - rv.type, rv.value, rv.lineno, rv.lexpos = token_type, value, lineno, lexpos
|
| - return rv
|
| -
|
| -
|
| -def _MakeLexTokenForKeyword(keyword, **kwargs):
|
| - """Makes a LexToken for the given keyword."""
|
| - return _MakeLexToken(keyword.upper(), keyword.lower(), **kwargs)
|
| -
|
| -
|
| -class LexerTest(unittest.TestCase):
|
| - """Tests |mojom.parse.lexer.Lexer|."""
|
| -
|
| - def __init__(self, *args, **kwargs):
|
| - unittest.TestCase.__init__(self, *args, **kwargs)
|
| - # Clone all lexer instances from this one, since making a lexer is slow.
|
| - self._zygote_lexer = lex.lex(mojom.parse.lexer.Lexer("my_file.mojom"))
|
| -
|
| - def testValidKeywords(self):
|
| - """Tests valid keywords."""
|
| - self.assertEquals(self._SingleTokenForInput("handle"),
|
| - _MakeLexTokenForKeyword("handle"))
|
| - self.assertEquals(self._SingleTokenForInput("import"),
|
| - _MakeLexTokenForKeyword("import"))
|
| - self.assertEquals(self._SingleTokenForInput("module"),
|
| - _MakeLexTokenForKeyword("module"))
|
| - self.assertEquals(self._SingleTokenForInput("struct"),
|
| - _MakeLexTokenForKeyword("struct"))
|
| - self.assertEquals(self._SingleTokenForInput("union"),
|
| - _MakeLexTokenForKeyword("union"))
|
| - self.assertEquals(self._SingleTokenForInput("interface"),
|
| - _MakeLexTokenForKeyword("interface"))
|
| - self.assertEquals(self._SingleTokenForInput("enum"),
|
| - _MakeLexTokenForKeyword("enum"))
|
| - self.assertEquals(self._SingleTokenForInput("const"),
|
| - _MakeLexTokenForKeyword("const"))
|
| - self.assertEquals(self._SingleTokenForInput("true"),
|
| - _MakeLexTokenForKeyword("true"))
|
| - self.assertEquals(self._SingleTokenForInput("false"),
|
| - _MakeLexTokenForKeyword("false"))
|
| - self.assertEquals(self._SingleTokenForInput("default"),
|
| - _MakeLexTokenForKeyword("default"))
|
| - self.assertEquals(self._SingleTokenForInput("array"),
|
| - _MakeLexTokenForKeyword("array"))
|
| - self.assertEquals(self._SingleTokenForInput("map"),
|
| - _MakeLexTokenForKeyword("map"))
|
| -
|
| - def testValidIdentifiers(self):
|
| - """Tests identifiers."""
|
| - self.assertEquals(self._SingleTokenForInput("abcd"),
|
| - _MakeLexToken("NAME", "abcd"))
|
| - self.assertEquals(self._SingleTokenForInput("AbC_d012_"),
|
| - _MakeLexToken("NAME", "AbC_d012_"))
|
| - self.assertEquals(self._SingleTokenForInput("_0123"),
|
| - _MakeLexToken("NAME", "_0123"))
|
| -
|
| - def testInvalidIdentifiers(self):
|
| - with self.assertRaisesRegexp(
|
| - mojom.parse.lexer.LexError,
|
| - r"^my_file\.mojom:1: Error: Illegal character '\$'$"):
|
| - self._TokensForInput("$abc")
|
| - with self.assertRaisesRegexp(
|
| - mojom.parse.lexer.LexError,
|
| - r"^my_file\.mojom:1: Error: Illegal character '\$'$"):
|
| - self._TokensForInput("a$bc")
|
| -
|
| - def testDecimalIntegerConstants(self):
|
| - self.assertEquals(self._SingleTokenForInput("0"),
|
| - _MakeLexToken("INT_CONST_DEC", "0"))
|
| - self.assertEquals(self._SingleTokenForInput("1"),
|
| - _MakeLexToken("INT_CONST_DEC", "1"))
|
| - self.assertEquals(self._SingleTokenForInput("123"),
|
| - _MakeLexToken("INT_CONST_DEC", "123"))
|
| - self.assertEquals(self._SingleTokenForInput("10"),
|
| - _MakeLexToken("INT_CONST_DEC", "10"))
|
| -
|
| - def testValidTokens(self):
|
| - """Tests valid tokens (which aren't tested elsewhere)."""
|
| - # Keywords tested in |testValidKeywords|.
|
| - # NAME tested in |testValidIdentifiers|.
|
| - self.assertEquals(self._SingleTokenForInput("@123"),
|
| - _MakeLexToken("ORDINAL", "@123"))
|
| - self.assertEquals(self._SingleTokenForInput("456"),
|
| - _MakeLexToken("INT_CONST_DEC", "456"))
|
| - self.assertEquals(self._SingleTokenForInput("0x01aB2eF3"),
|
| - _MakeLexToken("INT_CONST_HEX", "0x01aB2eF3"))
|
| - self.assertEquals(self._SingleTokenForInput("123.456"),
|
| - _MakeLexToken("FLOAT_CONST", "123.456"))
|
| - self.assertEquals(self._SingleTokenForInput("\"hello\""),
|
| - _MakeLexToken("STRING_LITERAL", "\"hello\""))
|
| - self.assertEquals(self._SingleTokenForInput("+"),
|
| - _MakeLexToken("PLUS", "+"))
|
| - self.assertEquals(self._SingleTokenForInput("-"),
|
| - _MakeLexToken("MINUS", "-"))
|
| - self.assertEquals(self._SingleTokenForInput("&"),
|
| - _MakeLexToken("AMP", "&"))
|
| - self.assertEquals(self._SingleTokenForInput("?"),
|
| - _MakeLexToken("QSTN", "?"))
|
| - self.assertEquals(self._SingleTokenForInput("="),
|
| - _MakeLexToken("EQUALS", "="))
|
| - self.assertEquals(self._SingleTokenForInput("=>"),
|
| - _MakeLexToken("RESPONSE", "=>"))
|
| - self.assertEquals(self._SingleTokenForInput("("),
|
| - _MakeLexToken("LPAREN", "("))
|
| - self.assertEquals(self._SingleTokenForInput(")"),
|
| - _MakeLexToken("RPAREN", ")"))
|
| - self.assertEquals(self._SingleTokenForInput("["),
|
| - _MakeLexToken("LBRACKET", "["))
|
| - self.assertEquals(self._SingleTokenForInput("]"),
|
| - _MakeLexToken("RBRACKET", "]"))
|
| - self.assertEquals(self._SingleTokenForInput("{"),
|
| - _MakeLexToken("LBRACE", "{"))
|
| - self.assertEquals(self._SingleTokenForInput("}"),
|
| - _MakeLexToken("RBRACE", "}"))
|
| - self.assertEquals(self._SingleTokenForInput("<"),
|
| - _MakeLexToken("LANGLE", "<"))
|
| - self.assertEquals(self._SingleTokenForInput(">"),
|
| - _MakeLexToken("RANGLE", ">"))
|
| - self.assertEquals(self._SingleTokenForInput(";"),
|
| - _MakeLexToken("SEMI", ";"))
|
| - self.assertEquals(self._SingleTokenForInput(","),
|
| - _MakeLexToken("COMMA", ","))
|
| - self.assertEquals(self._SingleTokenForInput("."),
|
| - _MakeLexToken("DOT", "."))
|
| -
|
| - def _TokensForInput(self, input_string):
|
| - """Gets a list of tokens for the given input string."""
|
| - lexer = self._zygote_lexer.clone()
|
| - lexer.input(input_string)
|
| - rv = []
|
| - while True:
|
| - tok = lexer.token()
|
| - if not tok:
|
| - return rv
|
| - rv.append(tok)
|
| -
|
| - def _SingleTokenForInput(self, input_string):
|
| - """Gets the single token for the given input string. (Raises an exception if
|
| - the input string does not result in exactly one token.)"""
|
| - toks = self._TokensForInput(input_string)
|
| - assert len(toks) == 1
|
| - return toks[0]
|
| -
|
| -
|
| -if __name__ == "__main__":
|
| - unittest.main()
|
|
|