| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import mojo_lexer | 5 import mojo_lexer |
| 6 import mojo_parser | 6 import mojo_parser |
| 7 import unittest | 7 import unittest |
| 8 | 8 |
| 9 | 9 |
| 10 class MojoParserTest(unittest.TestCase): | 10 class MojoParserTest(unittest.TestCase): |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 def testEnumExpressions(self): | 65 def testEnumExpressions(self): |
| 66 """Tests an enum with values calculated using simple expressions.""" | 66 """Tests an enum with values calculated using simple expressions.""" |
| 67 source = """\ | 67 source = """\ |
| 68 module my_module { | 68 module my_module { |
| 69 | 69 |
| 70 enum MyEnum { | 70 enum MyEnum { |
| 71 MY_ENUM_1 = 1, | 71 MY_ENUM_1 = 1, |
| 72 MY_ENUM_2 = 1 + 1, | 72 MY_ENUM_2 = 1 + 1, |
| 73 MY_ENUM_3 = 1 * 3, | 73 MY_ENUM_3 = 1 * 3, |
| 74 MY_ENUM_4 = 2 * (1 + 1), | 74 MY_ENUM_4 = 2 * (1 + 1), |
| 75 MY_ENUM_5 = 1 + 2 * 2 | 75 MY_ENUM_5 = 1 + 2 * 2, |
| 76 MY_ENUM_6 = -6 / -2, |
| 77 MY_ENUM_7 = 3 | (1 << 2), |
| 78 MY_ENUM_8 = 16 >> 1, |
| 79 MY_ENUM_9 = 1 ^ 15 & 8, |
| 80 MY_ENUM_10 = 110 % 100, |
| 81 MY_ENUM_MINUS_1 = ~0 |
| 76 }; | 82 }; |
| 77 | 83 |
| 78 } // my_module | 84 } // my_module |
| 79 """ | 85 """ |
| 86 self.maxDiff = 2000 |
| 80 expected = \ | 87 expected = \ |
| 81 [('MODULE', | 88 [('MODULE', |
| 82 'my_module', | 89 'my_module', |
| 83 [('ENUM', | 90 [('ENUM', |
| 84 'MyEnum', | 91 'MyEnum', |
| 85 [('ENUM_FIELD', 'MY_ENUM_1', ('EXPRESSION', ['1'])), | 92 [('ENUM_FIELD', 'MY_ENUM_1', ('EXPRESSION', ['1'])), |
| 86 ('ENUM_FIELD', 'MY_ENUM_2', ('EXPRESSION', ['1', '+', '1'])), | 93 ('ENUM_FIELD', 'MY_ENUM_2', ('EXPRESSION', ['1', '+', '1'])), |
| 87 ('ENUM_FIELD', 'MY_ENUM_3', ('EXPRESSION', ['1', '*', '3'])), | 94 ('ENUM_FIELD', 'MY_ENUM_3', ('EXPRESSION', ['1', '*', '3'])), |
| 88 ('ENUM_FIELD', | 95 ('ENUM_FIELD', |
| 89 'MY_ENUM_4', | 96 'MY_ENUM_4', |
| 90 ('EXPRESSION', | 97 ('EXPRESSION', |
| 91 ['2', '*', '(', ('EXPRESSION', ['1', '+', '1']), ')'])), | 98 ['2', '*', '(', ('EXPRESSION', ['1', '+', '1']), ')'])), |
| 92 ('ENUM_FIELD', | 99 ('ENUM_FIELD', |
| 93 'MY_ENUM_5', | 100 'MY_ENUM_5', |
| 94 ('EXPRESSION', ['1', '+', '2', '*', '2']))])])] | 101 ('EXPRESSION', ['1', '+', '2', '*', '2'])), |
| 102 ('ENUM_FIELD', |
| 103 'MY_ENUM_6', |
| 104 ('EXPRESSION', |
| 105 ['-', ('EXPRESSION', ['6', '/', '-', ('EXPRESSION', ['2'])])])), |
| 106 ('ENUM_FIELD', |
| 107 'MY_ENUM_7', |
| 108 ('EXPRESSION', |
| 109 ['3', '|', '(', ('EXPRESSION', ['1', '<<', '2']), ')'])), |
| 110 ('ENUM_FIELD', 'MY_ENUM_8', ('EXPRESSION', ['16', '>>', '1'])), |
| 111 ('ENUM_FIELD', |
| 112 'MY_ENUM_9', |
| 113 ('EXPRESSION', ['1', '^', '15', '&', '8'])), |
| 114 ('ENUM_FIELD', 'MY_ENUM_10', ('EXPRESSION', ['110', '%', '100'])), |
| 115 ('ENUM_FIELD', |
| 116 'MY_ENUM_MINUS_1', |
| 117 ('EXPRESSION', ['~', ('EXPRESSION', ['0'])]))])])] |
| 95 self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected) | 118 self.assertEquals(mojo_parser.Parse(source, "my_file.mojom"), expected) |
| 96 | 119 |
| 97 def testNoConditionals(self): | 120 def testNoConditionals(self): |
| 98 """Tests that ?: is not allowed.""" | 121 """Tests that ?: is not allowed.""" |
| 99 source = """\ | 122 source = """\ |
| 100 module my_module { | 123 module my_module { |
| 101 | 124 |
| 102 enum MyEnum { | 125 enum MyEnum { |
| 103 MY_ENUM_1 = 1 ? 2 : 3 | 126 MY_ENUM_1 = 1 ? 2 : 3 |
| 104 }; | 127 }; |
| 105 | 128 |
| 106 } // my_module | 129 } // my_module |
| 107 """ | 130 """ |
| 108 with self.assertRaisesRegexp( | 131 with self.assertRaisesRegexp( |
| 109 mojo_lexer.LexError, | 132 mojo_lexer.LexError, |
| 110 r"^my_file\.mojom:4: Error: Illegal character '\?'$"): | 133 r"^my_file\.mojom:4: Error: Illegal character '\?'$"): |
| 111 mojo_parser.Parse(source, "my_file.mojom") | 134 mojo_parser.Parse(source, "my_file.mojom") |
| 112 | 135 |
| 113 | 136 |
| 114 if __name__ == "__main__": | 137 if __name__ == "__main__": |
| 115 unittest.main() | 138 unittest.main() |
| OLD | NEW |