| 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()
 |