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 imp | 5 import imp |
6 import os.path | 6 import os.path |
7 import sys | 7 import sys |
8 import unittest | 8 import unittest |
9 | 9 |
10 # Disable lint check for finding modules: | 10 # Disable lint check for finding modules: |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 parser.Parse(source, "my_file.mojom") | 204 parser.Parse(source, "my_file.mojom") |
205 | 205 |
206 def testSimpleOrdinals(self): | 206 def testSimpleOrdinals(self): |
207 """Tests that (valid) ordinal values are scanned correctly.""" | 207 """Tests that (valid) ordinal values are scanned correctly.""" |
208 source = """\ | 208 source = """\ |
209 module my_module { | 209 module my_module { |
210 | 210 |
211 // This isn't actually valid .mojom, but the problem (missing ordinals) should | 211 // This isn't actually valid .mojom, but the problem (missing ordinals) should |
212 // be handled at a different level. | 212 // be handled at a different level. |
213 struct MyStruct { | 213 struct MyStruct { |
214 int32 a0 @0; | 214 int32 a0@0; |
215 int32 a1 @1; | 215 int32 a1@1; |
216 int32 a2 @2; | 216 int32 a2@2; |
217 int32 a9 @9; | 217 int32 a9@9; |
218 int32 a10 @10; | 218 int32 a10 @10; |
219 int32 a11 @11; | 219 int32 a11 @11; |
220 int32 a29 @29; | 220 int32 a29 @29; |
221 int32 a1234567890 @1234567890; | 221 int32 a1234567890 @1234567890; |
222 }; | 222 }; |
223 | 223 |
224 } // module my_module | 224 } // module my_module |
225 """ | 225 """ |
226 expected = \ | 226 expected = \ |
227 [('MODULE', | 227 [('MODULE', |
(...skipping 11 matching lines...) Expand all Loading... |
239 ('FIELD', 'int32', 'a29', ast.Ordinal(29), None), | 239 ('FIELD', 'int32', 'a29', ast.Ordinal(29), None), |
240 ('FIELD', 'int32', 'a1234567890', ast.Ordinal(1234567890), None)])])] | 240 ('FIELD', 'int32', 'a1234567890', ast.Ordinal(1234567890), None)])])] |
241 self.assertEquals(parser.Parse(source, "my_file.mojom"), expected) | 241 self.assertEquals(parser.Parse(source, "my_file.mojom"), expected) |
242 | 242 |
243 def testInvalidOrdinals(self): | 243 def testInvalidOrdinals(self): |
244 """Tests that (lexically) invalid ordinals are correctly detected.""" | 244 """Tests that (lexically) invalid ordinals are correctly detected.""" |
245 source1 = """\ | 245 source1 = """\ |
246 module my_module { | 246 module my_module { |
247 | 247 |
248 struct MyStruct { | 248 struct MyStruct { |
249 int32 a_missing @; | 249 int32 a_missing@; |
250 }; | 250 }; |
251 | 251 |
252 } // module my_module | 252 } // module my_module |
253 """ | 253 """ |
254 with self.assertRaisesRegexp( | 254 with self.assertRaisesRegexp( |
255 lexer.LexError, | 255 lexer.LexError, |
256 r"^my_file\.mojom:4: Error: Missing ordinal value$"): | 256 r"^my_file\.mojom:4: Error: Missing ordinal value$"): |
257 parser.Parse(source1, "my_file.mojom") | 257 parser.Parse(source1, "my_file.mojom") |
258 | 258 |
259 source2 = """\ | 259 source2 = """\ |
260 module my_module { | 260 module my_module { |
261 | 261 |
262 struct MyStruct { | 262 struct MyStruct { |
263 int32 a_octal @01; | 263 int32 a_octal@01; |
264 }; | 264 }; |
265 | 265 |
266 } // module my_module | 266 } // module my_module |
267 """ | 267 """ |
268 with self.assertRaisesRegexp( | 268 with self.assertRaisesRegexp( |
269 lexer.LexError, | 269 lexer.LexError, |
270 r"^my_file\.mojom:4: Error: " | 270 r"^my_file\.mojom:4: Error: " |
271 r"Octal and hexadecimal ordinal values not allowed$"): | 271 r"Octal and hexadecimal ordinal values not allowed$"): |
272 parser.Parse(source2, "my_file.mojom") | 272 parser.Parse(source2, "my_file.mojom") |
273 | 273 |
274 source3 = """\ | 274 source3 = """\ |
275 module my_module { struct MyStruct { int32 a_invalid_octal @08; }; } | 275 module my_module { struct MyStruct { int32 a_invalid_octal@08; }; } |
276 """ | 276 """ |
277 with self.assertRaisesRegexp( | 277 with self.assertRaisesRegexp( |
278 lexer.LexError, | 278 lexer.LexError, |
279 r"^my_file\.mojom:1: Error: " | 279 r"^my_file\.mojom:1: Error: " |
280 r"Octal and hexadecimal ordinal values not allowed$"): | 280 r"Octal and hexadecimal ordinal values not allowed$"): |
281 parser.Parse(source3, "my_file.mojom") | 281 parser.Parse(source3, "my_file.mojom") |
282 | 282 |
283 source4 = """\ | 283 source4 = """\ |
284 module my_module { struct MyStruct { int32 a_hex @0x1aB9; }; } | 284 module my_module { struct MyStruct { int32 a_hex@0x1aB9; }; } |
285 """ | 285 """ |
286 with self.assertRaisesRegexp( | 286 with self.assertRaisesRegexp( |
287 lexer.LexError, | 287 lexer.LexError, |
288 r"^my_file\.mojom:1: Error: " | 288 r"^my_file\.mojom:1: Error: " |
289 r"Octal and hexadecimal ordinal values not allowed$"): | 289 r"Octal and hexadecimal ordinal values not allowed$"): |
290 parser.Parse(source4, "my_file.mojom") | 290 parser.Parse(source4, "my_file.mojom") |
291 | 291 |
292 source5 = """\ | 292 source5 = """\ |
293 module my_module { struct MyStruct { int32 a_hex @0X0; }; } | 293 module my_module { struct MyStruct { int32 a_hex@0X0; }; } |
294 """ | 294 """ |
295 with self.assertRaisesRegexp( | 295 with self.assertRaisesRegexp( |
296 lexer.LexError, | 296 lexer.LexError, |
297 r"^my_file\.mojom:1: Error: " | 297 r"^my_file\.mojom:1: Error: " |
298 r"Octal and hexadecimal ordinal values not allowed$"): | 298 r"Octal and hexadecimal ordinal values not allowed$"): |
299 parser.Parse(source5, "my_file.mojom") | 299 parser.Parse(source5, "my_file.mojom") |
300 | 300 |
301 source6 = """\ | 301 source6 = """\ |
302 struct MyStruct { | 302 struct MyStruct { |
303 int32 a_too_big @999999999999; | 303 int32 a_too_big@999999999999; |
304 }; | 304 }; |
305 """ | 305 """ |
306 with self.assertRaisesRegexp( | 306 with self.assertRaisesRegexp( |
307 parser.ParseError, | 307 parser.ParseError, |
308 r"^my_file\.mojom:2: Error: " | 308 r"^my_file\.mojom:2: Error: " |
309 r"Ordinal value 999999999999 too large:\n" | 309 r"Ordinal value 999999999999 too large:\n" |
310 r" int32 a_too_big @999999999999;$"): | 310 r" int32 a_too_big@999999999999;$"): |
311 parser.Parse(source6, "my_file.mojom") | 311 parser.Parse(source6, "my_file.mojom") |
312 | 312 |
313 def testNestedNamespace(self): | 313 def testNestedNamespace(self): |
314 """Tests that "nested" namespaces work.""" | 314 """Tests that "nested" namespaces work.""" |
315 source = """\ | 315 source = """\ |
316 module my.mod { | 316 module my.mod { |
317 | 317 |
318 struct MyStruct { | 318 struct MyStruct { |
319 int32 a; | 319 int32 a; |
320 }; | 320 }; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 with self.assertRaisesRegexp( | 368 with self.assertRaisesRegexp( |
369 parser.ParseError, | 369 parser.ParseError, |
370 r"^my_file\.mojom:2: Error: " | 370 r"^my_file\.mojom:2: Error: " |
371 r"Invalid handle type 'wtf_is_this':\n" | 371 r"Invalid handle type 'wtf_is_this':\n" |
372 r" handle<wtf_is_this> foo;$"): | 372 r" handle<wtf_is_this> foo;$"): |
373 parser.Parse(source, "my_file.mojom") | 373 parser.Parse(source, "my_file.mojom") |
374 | 374 |
375 | 375 |
376 if __name__ == "__main__": | 376 if __name__ == "__main__": |
377 unittest.main() | 377 unittest.main() |
OLD | NEW |