def test_str(self): """ The string representation is readable and shows which matchers have been matched and which are still to be matched. """ matcher = OrderedLinesMatcher(EqualsMatcher('foo'), RegexMatcher('^bar')) self.assertEqual( str(matcher), 'OrderedLinesMatcher(matched=[], ' "unmatched=[EqualsMatcher('foo'), RegexMatcher('^bar')])") self.assertEqual(repr(matcher), str(matcher)) self.assertFalse(matcher('foo')) self.assertEqual( str(matcher), "OrderedLinesMatcher(matched=[EqualsMatcher('foo')], " "unmatched=[RegexMatcher('^bar')])") self.assertEqual(repr(matcher), str(matcher)) self.assertTrue(matcher('barfoo')) self.assertEqual( str(matcher), "OrderedLinesMatcher(matched=[EqualsMatcher('foo'), " "RegexMatcher('^bar')], unmatched=[])") self.assertEqual(repr(matcher), str(matcher))
def test_by_regex(self): """ The ``by_regex`` utility method takes a list of patterns and produces a matcher that matches by those regex patterns sequentially. """ matcher = OrderedLinesMatcher.by_regex(r'^foo', r'bar$') self.assertFalse(matcher('fuzzbar')) self.assertFalse(matcher('foobar')) self.assertFalse(matcher('baz')) self.assertTrue(matcher('foobar'))
def test_by_equality(self): """ The ``by_equality`` utility method takes a list of strings and produces a matcher that matches those strings by equality sequentially. """ matcher = OrderedLinesMatcher.by_equality('foo', 'bar') self.assertFalse(matcher('bar')) self.assertFalse(matcher('foo')) self.assertFalse(matcher('baz')) self.assertTrue(matcher('bar'))
def test_matching(self): """ Applies each matcher sequentially and returns True on the final match. """ matcher = OrderedLinesMatcher(EqualsMatcher('foo'), RegexMatcher('^bar')) self.assertFalse(matcher('barfoo')) self.assertFalse(matcher('foo')) self.assertFalse(matcher('baz')) self.assertTrue(matcher('barfoo'))
def test_exhaustion(self): """ Once all matchers have been matched, further calls to ``match`` should raise an error. """ matcher = OrderedLinesMatcher.by_equality('foo') self.assertTrue(matcher('foo')) with self.assertRaises(RuntimeError) as cm: matcher('bar') self.assertEqual(str(cm.exception), 'Matcher exhausted, no more matchers to use')