def test_arg_type(self): self.assertRaises(TypeError, pcre2nfa, None) a = pcre2nfa('') self.assertEqual(NFA, type(a)) test = pcre2nfa('^abc') self.assertTrue(test.match("abc")) self.assertFalse(test.match("dabc"))
def test_dotall(self): a = pcre2nfa('/abc.def/s') self.assertTrue(a.match('abcxdef')) self.assertTrue(a.match('abc\ndef')) self.assertFalse(a.match('abcdef')) a = pcre2nfa('/abc.def/') self.assertTrue(a.match('abcxdef')) self.assertFalse(a.match('abc\ndef'))
def test_upto(self): a = pcre2nfa('/a{1,2}b/i') self.assertTrue(a.match('ab')) self.assertTrue(a.match('aab')) self.assertFalse(a.match('aaa')) a = pcre2nfa('/a{4,5}b/i') self.assertTrue(a.match('aaaab')) self.assertTrue(a.match('aaaaab')) self.assertFalse(a.match('aaaaaa'))
def test_circ(self): a = pcre2nfa('^a') self.assertTrue(a.match('a')) self.assertTrue(a.match('ab')) self.assertFalse(a.match('ba')) a = pcre2nfa('^\s*abc') self.assertTrue(a.match('abc')) self.assertTrue(a.match(' abc')) self.assertTrue(a.match(' abcxyz')) self.assertFalse(a.match('ababc'))
def test_case_insensitive(self): a = pcre2nfa('/abcde/i') self.assertTrue(a.match('ABCDEFGHI')) self.assertTrue(a.match('abcdefghi')) self.assertTrue(a.match('aBcDeFgHi')) self.assertFalse(a.match('afBgChDiE')) a = pcre2nfa('/abcde/') self.assertFalse(a.match('ABCDEFGHI')) self.assertTrue(a.match('abcdefghi')) self.assertFalse(a.match('aBcDeFgHi')) self.assertFalse(a.match('afBgChDiE'))
def test_notwhitespace(self): a = pcre2nfa('\S') self.assertFalse(a.match('\x0c')) self.assertFalse(a.match(' ')) self.assertFalse(a.match('\n')) self.assertFalse(a.match('\t')) self.assertTrue(a.match('a')) a = pcre2nfa('a\Sb') self.assertTrue(a.match('aab')) self.assertFalse(a.match('\t\n')) self.assertFalse(a.match('a b'))
def test_not_class_range(self): a = pcre2nfa('/a[^a-z]b/') for c in range(ord('a'), ord('z')): self.assertFalse(a.match('a' + chr(c) + 'b')) for c in range(32, 60): self.assertTrue(a.match('a' + chr(c) + 'b')) a = pcre2nfa('/a[^a-z]b/i') for c in range(ord('A'), ord('Z')): self.assertFalse(a.match('a' + chr(c) + 'b')) for c in range(ord('a'), ord('z')): self.assertFalse(a.match('a' + chr(c) + 'b')) for c in range(32, 57): self.assertTrue(a.match('a' + chr(c) + 'b'))
def test_notwordchar(self): a = pcre2nfa('\W') self.assertTrue(a.match('\x0c')) self.assertFalse(a.match('A')) self.assertFalse(a.match('Z')) self.assertFalse(a.match('_')) self.assertFalse(a.match('a')) self.assertFalse(a.match('z')) self.assertTrue(a.match('\n')) a = pcre2nfa('a\Wb') self.assertFalse(a.match('aab')) self.assertFalse(a.match(' ')) self.assertTrue(a.match('a b'))
def test_notwhitespace(self): a = pcre2nfa('\S{1,3}') self.assertFalse(a.match('\x0c')) self.assertFalse(a.match(' ')) self.assertFalse(a.match('\n')) self.assertFalse(a.match('\t')) self.assertTrue(a.match('a')) a = pcre2nfa('a\S{1,3}b') self.assertFalse(a.match('ab')) self.assertFalse(a.match('a\tb')) self.assertTrue(a.match('axxb')) self.assertTrue(a.match('axyzb')) self.assertFalse(a.match('attttb'))
def test_char_nocase(self): a = pcre2nfa('/a/i') self.assertTrue(a.match('a')) self.assertTrue(a.match('A')) self.assertTrue(a.match('ab')) self.assertTrue(a.match('bA')) self.assertFalse(a.match('b'))
def test_char(self): a = pcre2nfa('a') self.assertTrue(a.match('a')) self.assertFalse(a.match('A')) self.assertTrue(a.match('ab')) self.assertTrue(a.match('ba')) self.assertFalse(a.match('b'))
def test_dotall_n_caseless(self): a = pcre2nfa('/abc.ef/is') self.assertTrue(a.match('abcdef')) self.assertTrue(a.match('ABCDEF')) self.assertTrue(a.match('aBcDeF')) self.assertTrue(a.match('abC%ef')) self.assertTrue(a.match('abc\nef'))
def test_brazero_any(self): a = pcre2nfa('a(b|c)*d') self.assertTrue(a.match('abd')) self.assertTrue(a.match('ad')) self.assertTrue(a.match('acd')) self.assertTrue(a.match('abbbbd')) self.assertFalse(a.match('aed')) a = pcre2nfa('a(b*|cd)*e') self.assertTrue(a.match('abe')) self.assertTrue(a.match('ae')) self.assertTrue(a.match('acde')) self.assertTrue(a.match('abcde')) self.assertTrue(a.match('abbbbe')) self.assertTrue(a.match('acdbcde')) self.assertFalse(a.match('abcbde'))
def test_plus(self): a = pcre2nfa('a0+0') self.assertFalse(a.match('a0')) self.assertTrue(a.match('a00')) self.assertTrue(a.match('a000')) self.assertTrue(a.match('a0000')) self.assertFalse(a.match('a01'))
def test_crquery(self): a = pcre2nfa('a[0-1]?a') self.assertTrue(a.match('aa')) self.assertTrue(a.match('a0a')) self.assertTrue(a.match('a1a')) self.assertFalse(a.match('a10a')) self.assertFalse(a.match('a9a'))
def test_any(self): a = pcre2nfa('a.{2,4}a') self.assertFalse(a.match('aaa')) self.assertTrue(a.match('abba')) self.assertTrue(a.match('ababaa')) self.assertTrue(a.match('axxxxa')) self.assertFalse(a.match('axxxxxa'))
def test_star(self): a = pcre2nfa('a0{2,}(a|b)') self.assertFalse(a.match('aa')) self.assertFalse(a.match('a0a')) self.assertTrue(a.match('a00a')) self.assertTrue(a.match('a000a')) self.assertFalse(a.match('a00x'))
def test_any(self): a = pcre2nfa('a.*a') self.assertTrue(a.match('aa')) self.assertTrue(a.match('aaa')) self.assertTrue(a.match('aba')) self.assertTrue(a.match('acdefa')) self.assertFalse(a.match('axxxxxx'))
def test_digit(self): a = pcre2nfa('a\d{2,3}b') self.assertTrue(a.match('a12b')) self.assertTrue(a.match('a123b')) self.assertFalse(a.match('a1b')) self.assertFalse(a.match('ab')) self.assertFalse(a.match('a1234b'))
def test_notwhitespace(self): a = pcre2nfa('a\S+b') self.assertTrue(a.match('axxb')) self.assertTrue(a.match('axb')) self.assertFalse(a.match('a b')) self.assertFalse(a.match('ab')) self.assertFalse(a.match('a b'))
def test_posstar(self): a = pcre2nfa('a0*a') self.assertTrue(a.match('aa')) self.assertTrue(a.match('a0a')) self.assertTrue(a.match('a00a')) self.assertTrue(a.match('a000a')) self.assertFalse(a.match('a00b'))
def test_notminplus(self): a = pcre2nfa('a[^x]+?b') self.assertTrue(a.match('ayb')) self.assertTrue(a.match('ayzb')) self.assertFalse(a.match('axb')) self.assertFalse(a.match('ab')) self.assertFalse(a.match('axxxxxb'))
def test_crrange_range(self): a = pcre2nfa('^[abc]{2,4}x') self.assertFalse(a.match('bx')) self.assertTrue(a.match('acx')) self.assertTrue(a.match('abcx')) self.assertTrue(a.match('bbbbx')) self.assertFalse(a.match('bbbbbx')) self.assertFalse(a.match('abca')) a = pcre2nfa('^[abc]{0,2}x') self.assertTrue(a.match('x')) self.assertTrue(a.match('bx')) self.assertTrue(a.match('acx')) self.assertFalse(a.match('bbbx')) self.assertFalse(a.match('bbbbx')) self.assertFalse(a.match('abca'))
def test_posplus(self): a = pcre2nfa('a0+a') self.assertFalse(a.match('aa')) self.assertTrue(a.match('a0a')) self.assertTrue(a.match('a00a')) self.assertTrue(a.match('a000a')) self.assertFalse(a.match('a00b'))
def test_notposplus(self): a = pcre2nfa('a[^x]+x') self.assertTrue(a.match('aax')) self.assertTrue(a.match('abx')) self.assertTrue(a.match('acdefx')) self.assertFalse(a.match('axx')) self.assertFalse(a.match('ax'))
def test_wordchar(self): a = pcre2nfa(':\w{2}:') self.assertFalse(a.match(':%%:')) self.assertTrue(a.match(':aA:')) self.assertTrue(a.match(':zZ:')) self.assertTrue(a.match(':_a:')) self.assertFalse(a.match(':aaa:'))
def test_whitespace(self): a = pcre2nfa('\s') self.assertTrue(a.match('\x0c')) self.assertTrue(a.match(' ')) self.assertTrue(a.match('\n')) self.assertTrue(a.match('\t')) self.assertFalse(a.match('a'))
def test_crstar(self): a = pcre2nfa('a[0-1]*a') self.assertTrue(a.match('aa')) self.assertTrue(a.match('a0a')) self.assertTrue(a.match('a10a')) self.assertTrue(a.match('a111000a')) self.assertFalse(a.match('a0012100a'))
def test_notplus(self): a = pcre2nfa('a[^x]+a') self.assertTrue(a.match('aaa')) self.assertTrue(a.match('aba')) self.assertTrue(a.match('acdefa')) self.assertFalse(a.match('axa')) self.assertFalse(a.match('acdexsda')) self.assertFalse(a.match('aa'))
def test_actual(self): a = pcre2nfa('/clsid\s*\x3a\s*\x7B?\s*' 'EC5D5118-9FDE-4A3E-84F3-C2B711740E70(\x22)?.*' 'DownloadCertificateExt\(/is') self.assertTrue(a.match('clsid:EC5D5118-9FDE-4A3E-84F3-C2B711740E70' 'DownloadCertificateExt(')) self.assertTrue(a.match('CLSID : { EC5D5118-9FDE-4A3E-84F3-' 'C2B711740E70xxxxxxDownloadCertificateExt('))
def test_crplus(self): # OP_CRPOSPLUS in pcre >= 8.34 a = pcre2nfa('a[0-1]+a') self.assertTrue(a.match('a0a')) self.assertTrue(a.match('a10a')) self.assertTrue(a.match('a111000a')) self.assertFalse(a.match('aa')) self.assertFalse(a.match('a0012100a'))