| Index: mojo/public/tools/bindings/pylib/mojom_tests/parse/parser_unittest.py
|
| diff --git a/mojo/public/tools/bindings/pylib/mojom_tests/parse/parser_unittest.py b/mojo/public/tools/bindings/pylib/mojom_tests/parse/parser_unittest.py
|
| index bc6b10ffb2a17d55a8fb75d70ccd416e350ff717..99d152346b5b9d1b4c8e948839ed440358d54c21 100644
|
| --- a/mojo/public/tools/bindings/pylib/mojom_tests/parse/parser_unittest.py
|
| +++ b/mojo/public/tools/bindings/pylib/mojom_tests/parse/parser_unittest.py
|
| @@ -200,19 +200,21 @@ class ParserTest(unittest.TestCase):
|
| r"^my_file\.mojom:4: Error: Unexpected '{':\n *{$"):
|
| parser.Parse(source2, "my_file.mojom")
|
|
|
| - def testEnumInitializers(self):
|
| - """Tests an enum with simple initialized values."""
|
| + def testEnums(self):
|
| + """Tests that enum statements are correctly parsed."""
|
|
|
| source = """\
|
| module my_module {
|
| -
|
| - enum MyEnum {
|
| - MY_ENUM_NEG1 = -1,
|
| - MY_ENUM_ZERO = 0,
|
| - MY_ENUM_1 = +1,
|
| - MY_ENUM_2,
|
| + enum MyEnum1 { VALUE1, VALUE2 }; // No trailing comma.
|
| + enum MyEnum2 {
|
| + VALUE1 = -1,
|
| + VALUE2 = 0,
|
| + VALUE3 = + 987, // Check that space is allowed.
|
| + VALUE4 = 0xAF12,
|
| + VALUE5 = -0x09bcd,
|
| + VALUE6 = VALUE5,
|
| + VALUE7, // Leave trailing comma.
|
| };
|
| -
|
| } // my_module
|
| """
|
| expected = \
|
| @@ -220,15 +222,52 @@ class ParserTest(unittest.TestCase):
|
| 'my_module',
|
| None,
|
| [('ENUM',
|
| - 'MyEnum',
|
| - [('ENUM_FIELD', 'MY_ENUM_NEG1', '-1'),
|
| - ('ENUM_FIELD', 'MY_ENUM_ZERO', '0'),
|
| - ('ENUM_FIELD', 'MY_ENUM_1', '+1'),
|
| - ('ENUM_FIELD', 'MY_ENUM_2', None)])])]
|
| + 'MyEnum1',
|
| + [('ENUM_VALUE', 'VALUE1', None),
|
| + ('ENUM_VALUE', 'VALUE2', None)]),
|
| + ('ENUM',
|
| + 'MyEnum2',
|
| + [('ENUM_VALUE', 'VALUE1', '-1'),
|
| + ('ENUM_VALUE', 'VALUE2', '0'),
|
| + ('ENUM_VALUE', 'VALUE3', '+987'),
|
| + ('ENUM_VALUE', 'VALUE4', '0xAF12'),
|
| + ('ENUM_VALUE', 'VALUE5', '-0x09bcd'),
|
| + ('ENUM_VALUE', 'VALUE6', ('IDENTIFIER', 'VALUE5')),
|
| + ('ENUM_VALUE', 'VALUE7', None)])])]
|
| self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
|
|
|
| - def testConst(self):
|
| - """Tests some constants and struct memebers initialized with them."""
|
| + def testInvalidEnumInitializers(self):
|
| + """Tests that invalid enum initializers are correctly detected."""
|
| +
|
| + # No values.
|
| + source1 = """\
|
| + enum MyEnum {
|
| + };
|
| + """
|
| + with self.assertRaisesRegexp(
|
| + parser.ParseError,
|
| + r"^my_file\.mojom:2: Error: Unexpected '}':\n"
|
| + r" *};$"):
|
| + parser.Parse(source1, "my_file.mojom")
|
| +
|
| + # Floating point value.
|
| + source2 = "enum MyEnum { VALUE = 0.123 };"
|
| + with self.assertRaisesRegexp(
|
| + parser.ParseError,
|
| + r"^my_file\.mojom:1: Error: Unexpected '0\.123':\n"
|
| + r"enum MyEnum { VALUE = 0\.123 };$"):
|
| + parser.Parse(source2, "my_file.mojom")
|
| +
|
| + # Boolean value.
|
| + source2 = "enum MyEnum { VALUE = true };"
|
| + with self.assertRaisesRegexp(
|
| + parser.ParseError,
|
| + r"^my_file\.mojom:1: Error: Unexpected 'true':\n"
|
| + r"enum MyEnum { VALUE = true };$"):
|
| + parser.Parse(source2, "my_file.mojom")
|
| +
|
| + def testConsts(self):
|
| + """Tests some constants and struct members initialized with them."""
|
|
|
| source = """\
|
| module my_module {
|
| @@ -248,7 +287,7 @@ class ParserTest(unittest.TestCase):
|
| 'MyStruct', None,
|
| [('CONST', 'int8', 'kNumber', '-1'),
|
| ('FIELD', 'int8', 'number',
|
| - ast.Ordinal(0), ('IDENTIFIER', 'kNumber'))])])]
|
| + ast.Ordinal(0), ('IDENTIFIER', 'kNumber'))])])]
|
| self.assertEquals(parser.Parse(source, "my_file.mojom"), expected)
|
|
|
| def testNoConditionals(self):
|
|
|