| 1 | #!/usr/bin/env python2
|
| 2 | # Copyright 2016 Andy Chu. All rights reserved.
|
| 3 | # Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 | # you may not use this file except in compliance with the License.
|
| 5 | # You may obtain a copy of the License at
|
| 6 | #
|
| 7 | # http://www.apache.org/licenses/LICENSE-2.0
|
| 8 | """util_test.py: Tests for util.py."""
|
| 9 |
|
| 10 | import unittest
|
| 11 | import sys
|
| 12 |
|
| 13 | from core import util # module under test
|
| 14 |
|
| 15 | # guard some tests that fail on Darwin
|
| 16 | IS_DARWIN = sys.platform == 'darwin'
|
| 17 |
|
| 18 |
|
| 19 | class UtilTest(unittest.TestCase):
|
| 20 |
|
| 21 | def testDebugFile(self):
|
| 22 | n = util.NullDebugFile()
|
| 23 | n.write('foo')
|
| 24 |
|
| 25 | def testRegexSearch(self):
|
| 26 | cases = [
|
| 27 | ('([a-z]+)([0-9]+)', 'foo123', ['foo123', 'foo', '123']),
|
| 28 | (r'.*\.py', 'foo.py', ['foo.py']),
|
| 29 | (r'.*\.py', 'abcd', None),
|
| 30 | # The match is unanchored
|
| 31 | (r'bc', 'abcd', ['bc']),
|
| 32 | # The match is unanchored
|
| 33 | (r'.c', 'abcd', ['bc']),
|
| 34 | # Empty matches empty
|
| 35 | None if IS_DARWIN else (r'', '', ['']),
|
| 36 | (r'^$', '', ['']),
|
| 37 | (r'^.$', '', None),
|
| 38 | (r'(a*)(b*)', '', ['', '', '']),
|
| 39 | (r'(a*)(b*)', 'aa', ['aa', 'aa', '']),
|
| 40 | (r'(a*)(b*)', 'bb', ['bb', '', 'bb']),
|
| 41 | (r'(a*)(b*)', 'aabb', ['aabb', 'aa', 'bb']),
|
| 42 | (r'(a*(z)?)|(b*)', 'aaz', ['aaz', 'aaz', 'z', '']),
|
| 43 | (r'(a*(z)?)|(b*)', 'bb', ['bb', '', '', 'bb']),
|
| 44 | ]
|
| 45 |
|
| 46 | # TODO:
|
| 47 | #
|
| 48 | # return a single list of length 2*(1 + nsub)
|
| 49 | # 2 is for start and end, +1 is for 0
|
| 50 | #
|
| 51 | # indices = regex_search(...)
|
| 52 | # indices[2*group] is start
|
| 53 | # indices[2*group+1] is end
|
| 54 | # group is from 0 ... n
|
| 55 |
|
| 56 | for pat, s, expected in filter(None, cases):
|
| 57 | #print('CASE %s' % pat)
|
| 58 | actual = util.RegexSearch(pat, s)
|
| 59 | #print('actual %r' % actual)
|
| 60 | self.assertEqual(expected, actual)
|
| 61 |
|
| 62 |
|
| 63 | if __name__ == '__main__':
|
| 64 | unittest.main()
|