| 1 | #!/usr/bin/env python2
|
| 2 | """
|
| 3 | lexer_gen_test.py: Tests for lexer_gen.py
|
| 4 | """
|
| 5 | from __future__ import print_function
|
| 6 |
|
| 7 | import unittest
|
| 8 |
|
| 9 | from frontend import lexer_gen # module under test
|
| 10 | from core import test_lib
|
| 11 |
|
| 12 |
|
| 13 | class LexerGenTest(unittest.TestCase):
|
| 14 |
|
| 15 | def testTranslateRegex(self):
|
| 16 | PAIRS = [
|
| 17 | (r'a', r'"a" '),
|
| 18 | (r'[a-z]', r'[a-z]'),
|
| 19 | (r'[a-zA-Z.]+', r'[a-zA-Z.]+ '),
|
| 20 | (r'[a-zA-Z_][a-zA-Z0-9_]*\+?=',
|
| 21 | r'[a-zA-Z_][a-zA-Z0-9_]* "+" ? "=" '),
|
| 22 | (r'[."]*', r'[."]* '),
|
| 23 | (r'\$', r'"$" '),
|
| 24 | (r'.*', r'.* '),
|
| 25 |
|
| 26 | # Both of these accepted?
|
| 27 | ('\0', r'"\x00" '),
|
| 28 | (r'\0', r'"\x00" '),
|
| 29 | (r'\\', r'"\\" '),
|
| 30 | (r'[\\]', r'"\\" '),
|
| 31 | (r'.', r'.'),
|
| 32 | (r'[^a]', r'[^a]'),
|
| 33 | (r'[^a-z]', r'[^a-z]'),
|
| 34 | # . isn't special inside
|
| 35 | (r'[a\.]', r'[a.]'),
|
| 36 | (r'[0-7]{1,3}', r'[0-7]{1,3} '),
|
| 37 | (r'foo', r'"f" "o" "o" '),
|
| 38 | (r'[0-9]|foo', r'[0-9] | "f" "o" "o" '),
|
| 39 | (r'[^\x00-\x1f]', r'[^\x00-\x1f]'),
|
| 40 | (r'[^\0\n"]', r'[^\x00\n"]'),
|
| 41 | ]
|
| 42 | for py, expected in PAIRS:
|
| 43 | #self.assertEqual(expected, lexer_gen.TranslateRegex(py))
|
| 44 | print('--- %s' % test_lib.PrintableString(py))
|
| 45 | actual = lexer_gen.TranslateRegex(py)
|
| 46 | print(repr(actual))
|
| 47 | self.assertEqual(expected, actual)
|
| 48 | print()
|
| 49 | print()
|
| 50 |
|
| 51 |
|
| 52 | if __name__ == '__main__':
|
| 53 | unittest.main()
|