1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#!/usr/bin/env python3
import base, unittest
from ptk.regex import RegularExpression, LitteralCharacterClass
class RegexTestMixin(object):
def test_deadend(self):
rx = RegularExpression.concat(
RegularExpression.fromClass(LitteralCharacterClass(self.t('<')[0])),
RegularExpression.fromClass(LitteralCharacterClass(self.t('=')[0]))
)
rx.start()
rx.feed(self.t('<')[0]) # byte/char
self.assertFalse(rx.isDeadEnd())
def test_newline(self):
rx = RegularExpression.fromClass(LitteralCharacterClass(self.t('\n')[0]))
self.assertTrue(rx.match(self.t('\n')))
def test_class(self):
rx = RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0]))
self.assertTrue(rx.match(self.t('a')))
self.assertFalse(rx.match(self.t('b')))
def test_concat(self):
rx = RegularExpression.concat(
RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0])),
RegularExpression.fromClass(LitteralCharacterClass(self.t('b')[0])),
RegularExpression.fromClass(LitteralCharacterClass(self.t('c')[0]))
)
self.assertTrue(rx.match(self.t('abc')))
self.assertFalse(rx.match(self.t('ab')))
def test_union(self):
rx = RegularExpression.union(
RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0])),
RegularExpression.fromClass(LitteralCharacterClass(self.t('b')[0])),
RegularExpression.fromClass(LitteralCharacterClass(self.t('c')[0]))
)
self.assertTrue(rx.match(self.t('a')))
self.assertTrue(rx.match(self.t('b')))
self.assertTrue(rx.match(self.t('c')))
self.assertFalse(rx.match(self.t('d')))
def test_kleene(self):
rx = RegularExpression.kleene(RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0])))
self.assertTrue(rx.match(self.t('')))
self.assertTrue(rx.match(self.t('a')))
self.assertTrue(rx.match(self.t('aa')))
self.assertFalse(rx.match(self.t('ab')))
def test_exponent(self):
rx = RegularExpression.exponent(RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0])), 2, 3)
self.assertFalse(rx.match(self.t('a')))
self.assertTrue(rx.match(self.t('aa')))
self.assertTrue(rx.match(self.t('aaa')))
self.assertFalse(rx.match(self.t('aaaa')))
def test_exponent_min(self):
rx = RegularExpression.exponent(RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0])), 2)
self.assertFalse(rx.match(self.t('a')))
self.assertTrue(rx.match(self.t('aa')))
self.assertTrue(rx.match(self.t('aaa')))
def test_exponent_null(self):
rx = RegularExpression.exponent(RegularExpression.fromClass(LitteralCharacterClass(self.t('a')[0])), 0, 1)
self.assertTrue(rx.match(self.t('')))
self.assertTrue(rx.match(self.t('a')))
self.assertFalse(rx.match(self.t('aa')))
class UnicodeRegexTest(RegexTestMixin, unittest.TestCase):
def t(self, s):
return s
class BytesRegexTest(RegexTestMixin, unittest.TestCase):
def t(self, s):
return s.encode('ascii')
if __name__ == '__main__':
unittest.main()
|