def test_zero_or_more(self): """ Does it return the kleene star? """ substring = Randomizer.letters() text = Randomizer.letters() complement = text + Randomizer.letters_complement(substring) expression = text + Quantifier.zero_or_more('(' + substring + ')') text_1 = text + substring * random.randint(0, 10) + Randomizer.letters() self.assertIsNotNone(re.search(expression, complement)) self.assertIsNotNone(re.search(expression, text_1)) return
def test_one_or_more(self): """ Does it return the one-or-more metacharachter? """ character = random.choice(string.letters) complement = Randomizer.letters_complement(character) text = Randomizer.letters() + character * random.randint(1,100) + Randomizer.letters() expression = character + '+' self.assertIsNone(re.search(expression, complement)) self.assertIsNotNone(re.search(expression, text)) return
def test_not(self): ''' Does it convert the string to a non-matching class? ''' sample = Randomizer.letters(maximum=10) complement = Randomizer.letters_complement(sample) expression = CharacterClass.not_in(sample) self.assertEqual(LEFT_BRACKET + '^' + sample + RIGHT_BRACKET, expression) self.assertIsNone(re.search(expression, sample)) self.assertIsNotNone(re.search(expression, complement)) return
def test_class(self): ''' Does it convert the string to a character class? ''' sample = Randomizer.letters() expression = CharacterClass.character_class(sample) self.assertEqual(LEFT_BRACKET + sample + RIGHT_BRACKET, expression) sub_string = random.choice(sample) complement = Randomizer.letters_complement(sample) self.assertIsNotNone(re.search(expression, sub_string)) self.assertIsNone(re.search(expression, complement)) return
def test_not_followed_by(self): """ Does not_followed_by create a negative lookahead assertion? """ prefix = Randomizer.letters(maximum=5) suffix = Randomizer.letters_complement(prefix) expr = Group.not_followed_by(suffix) text = Randomizer.letters() self.assertEqual(L_PERL_GROUP + '!' + suffix + R_GROUP, expr) self.assertIsNone(re.search(text + expr, text + suffix)) self.assertIsNotNone(re.search(text + expr, text)) return
def test_m_to_n(self): """ Does it return the expression to match m-to-n repetitions """ m = Randomizer.integer(minimum=5) n = Randomizer.integer(minimum=m+1) substring = Randomizer.letters() quantifier = Quantifier.m_to_n(m,n) expression = '(' + substring + ')' + quantifier self.assertEqual("{" + str(m) + ',' + str(n) + '}',quantifier) text = Randomizer.letters() + substring * Randomizer.integer(m, n) complement = (Randomizer.letters_complement(substring) + substring * Randomizer.integer(0,m-1)) too_many = substring * Randomizer.integer(n+1, n*2) self.assertIsNotNone(re.search(expression, text)) self.assertIsNone(re.search(expression, complement)) self.assertEqual(re.search(expression, too_many).groups(), (substring,)) return