Index: mojo/public/bindings/pylib/parse/mojo_parser_unittest.py |
diff --git a/mojo/public/bindings/pylib/parse/mojo_parser_unittest.py b/mojo/public/bindings/pylib/parse/mojo_parser_unittest.py |
deleted file mode 100644 |
index 1c22ab93bed6dd6b111ed93feaa6d499f4015f89..0000000000000000000000000000000000000000 |
--- a/mojo/public/bindings/pylib/parse/mojo_parser_unittest.py |
+++ /dev/null |
@@ -1,231 +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 mojo_lexer |
-import mojo_parser |
-import unittest |
- |
- |
-class MojoParserTest(unittest.TestCase): |
- """Tests mojo_parser (in particular, Parse()).""" |
- |
- def testTrivialValidSource(self): |
- """Tests a trivial, but valid, .mojom source.""" |
- source = """\ |
-// This is a comment. |
- |
-module my_module { |
-} |
-""" |
- self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), |
- [("MODULE", "my_module", None)]) |
- |
- def testSourceWithCrLfs(self): |
- """Tests a .mojom source with CR-LFs instead of LFs.""" |
- source = "// This is a comment.\r\n\r\nmodule my_module {\r\n}\r\n"; |
- self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), |
- [("MODULE", "my_module", None)]) |
- |
- def testUnexpectedEOF(self): |
- """Tests a "truncated" .mojom source.""" |
- source = """\ |
-// This is a comment. |
- |
-module my_module { |
-""" |
- with self.assertRaisesRegexp( |
- mojo_parser.ParseError, |
- r"^my_file\.mojom: Error: Unexpected end of file$"): |
- mojo_parser.Parse(source, "my_file.mojom") |
- |
- def testSimpleStruct(self): |
- """Tests a simple .mojom source that just defines a struct.""" |
- source ="""\ |
-module my_module { |
- |
-struct MyStruct { |
- int32 a; |
- double b; |
-}; |
- |
-} // module my_module |
-""" |
- # Note: Output as pretty-printed on failure by the test harness. |
- expected = \ |
-[('MODULE', |
- 'my_module', |
- [('STRUCT', |
- 'MyStruct', |
- None, |
- [('FIELD', 'int32', 'a', None, None), |
- ('FIELD', 'double', 'b', None, None)])])] |
- self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected) |
- |
- def testEnumExpressions(self): |
- """Tests an enum with values calculated using simple expressions.""" |
- source = """\ |
-module my_module { |
- |
-enum MyEnum { |
- MY_ENUM_1 = 1, |
- MY_ENUM_2 = 1 + 1, |
- MY_ENUM_3 = 1 * 3, |
- MY_ENUM_4 = 2 * (1 + 1), |
- MY_ENUM_5 = 1 + 2 * 2, |
- MY_ENUM_6 = -6 / -2, |
- MY_ENUM_7 = 3 | (1 << 2), |
- MY_ENUM_8 = 16 >> 1, |
- MY_ENUM_9 = 1 ^ 15 & 8, |
- MY_ENUM_10 = 110 % 100, |
- MY_ENUM_MINUS_1 = ~0 |
-}; |
- |
-} // my_module |
-""" |
- expected = \ |
-[('MODULE', |
- 'my_module', |
- [('ENUM', |
- 'MyEnum', |
- [('ENUM_FIELD', 'MY_ENUM_1', ('EXPRESSION', ['1'])), |
- ('ENUM_FIELD', 'MY_ENUM_2', ('EXPRESSION', ['1', '+', '1'])), |
- ('ENUM_FIELD', 'MY_ENUM_3', ('EXPRESSION', ['1', '*', '3'])), |
- ('ENUM_FIELD', |
- 'MY_ENUM_4', |
- ('EXPRESSION', |
- ['2', '*', '(', ('EXPRESSION', ['1', '+', '1']), ')'])), |
- ('ENUM_FIELD', |
- 'MY_ENUM_5', |
- ('EXPRESSION', ['1', '+', '2', '*', '2'])), |
- ('ENUM_FIELD', |
- 'MY_ENUM_6', |
- ('EXPRESSION', |
- ['-', ('EXPRESSION', ['6', '/', '-', ('EXPRESSION', ['2'])])])), |
- ('ENUM_FIELD', |
- 'MY_ENUM_7', |
- ('EXPRESSION', |
- ['3', '|', '(', ('EXPRESSION', ['1', '<<', '2']), ')'])), |
- ('ENUM_FIELD', 'MY_ENUM_8', ('EXPRESSION', ['16', '>>', '1'])), |
- ('ENUM_FIELD', |
- 'MY_ENUM_9', |
- ('EXPRESSION', ['1', '^', '15', '&', '8'])), |
- ('ENUM_FIELD', 'MY_ENUM_10', ('EXPRESSION', ['110', '%', '100'])), |
- ('ENUM_FIELD', |
- 'MY_ENUM_MINUS_1', |
- ('EXPRESSION', ['~', ('EXPRESSION', ['0'])]))])])] |
- self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected) |
- |
- def testNoConditionals(self): |
- """Tests that ?: is not allowed.""" |
- source = """\ |
-module my_module { |
- |
-enum MyEnum { |
- MY_ENUM_1 = 1 ? 2 : 3 |
-}; |
- |
-} // my_module |
-""" |
- with self.assertRaisesRegexp( |
- mojo_lexer.LexError, |
- r"^my_file\.mojom:4: Error: Illegal character '\?'$"): |
- mojo_parser.Parse(source, "my_file.mojom") |
- |
- def testSimpleOrdinals(self): |
- """Tests that (valid) ordinal values are scanned correctly.""" |
- source = """\ |
-module my_module { |
- |
-// This isn't actually valid .mojom, but the problem (missing ordinals) should |
-// be handled at a different level. |
-struct MyStruct { |
- int32 a0 @0; |
- int32 a1 @1; |
- int32 a2 @2; |
- int32 a9 @9; |
- int32 a10 @10; |
- int32 a11 @11; |
- int32 a29 @29; |
- int32 a1234567890 @1234567890; |
-}; |
- |
-} // module my_module |
-""" |
- expected = \ |
-[('MODULE', |
- 'my_module', |
- [('STRUCT', |
- 'MyStruct', |
- None, |
- [('FIELD', 'int32', 'a0', '@0', None), |
- ('FIELD', 'int32', 'a1', '@1', None), |
- ('FIELD', 'int32', 'a2', '@2', None), |
- ('FIELD', 'int32', 'a9', '@9', None), |
- ('FIELD', 'int32', 'a10', '@10', None), |
- ('FIELD', 'int32', 'a11', '@11', None), |
- ('FIELD', 'int32', 'a29', '@29', None), |
- ('FIELD', 'int32', 'a1234567890', '@1234567890', None)])])] |
- self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected) |
- |
- def testInvalidOrdinals(self): |
- """Tests that (lexically) invalid ordinals are correctly detected.""" |
- source1 = """\ |
-module my_module { |
- |
-struct MyStruct { |
- int32 a_missing @; |
-}; |
- |
-} // module my_module |
-""" |
- with self.assertRaisesRegexp( |
- mojo_lexer.LexError, |
- r"^my_file\.mojom:4: Error: Missing ordinal value$"): |
- mojo_parser.Parse(source1, "my_file.mojom") |
- |
- source2 = """\ |
-module my_module { |
- |
-struct MyStruct { |
- int32 a_octal @01; |
-}; |
- |
-} // module my_module |
-""" |
- with self.assertRaisesRegexp( |
- mojo_lexer.LexError, |
- r"^my_file\.mojom:4: Error: " |
- r"Octal and hexadecimal ordinal values not allowed$"): |
- mojo_parser.Parse(source2, "my_file.mojom") |
- |
- source3 = """\ |
-module my_module { struct MyStruct { int32 a_invalid_octal @08; }; } |
-""" |
- with self.assertRaisesRegexp( |
- mojo_lexer.LexError, |
- r"^my_file\.mojom:1: Error: " |
- r"Octal and hexadecimal ordinal values not allowed$"): |
- mojo_parser.Parse(source3, "my_file.mojom") |
- |
- source4 = """\ |
-module my_module { struct MyStruct { int32 a_hex @0x1aB9; }; } |
-""" |
- with self.assertRaisesRegexp( |
- mojo_lexer.LexError, |
- r"^my_file\.mojom:1: Error: " |
- r"Octal and hexadecimal ordinal values not allowed$"): |
- mojo_parser.Parse(source4, "my_file.mojom") |
- |
- source5 = """\ |
-module my_module { struct MyStruct { int32 a_hex @0X0; }; } |
-""" |
- with self.assertRaisesRegexp( |
- mojo_lexer.LexError, |
- r"^my_file\.mojom:1: Error: " |
- r"Octal and hexadecimal ordinal values not allowed$"): |
- mojo_parser.Parse(source5, "my_file.mojom") |
- |
- |
-if __name__ == "__main__": |
- unittest.main() |