From 7a614ac7104cc59f6af70de1b0ba3eee472c3c21 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 4 Mar 2012 03:12:35 +0100 Subject: selftest.testlist: Add read_test_regexes. --- selftest/testlist.py | 21 ++++++++++++++++++++- selftest/tests/test_testlist.py | 19 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/selftest/testlist.py b/selftest/testlist.py index 8fb31fd898..e535194510 100644 --- a/selftest/testlist.py +++ b/selftest/testlist.py @@ -19,13 +19,14 @@ """Selftest test list management.""" -__all__ = ['find_in_list'] +__all__ = ['find_in_list', 'read_test_regexes'] import re def find_in_list(list, fullname): """Find test in list. + :param list: List with 2-tuples with regex and reason """ for (regex, reason) in list: if re.match(regex, fullname): @@ -34,3 +35,21 @@ def find_in_list(list, fullname): else: return "" return None + + +def read_test_regexes(f): + """Read tuples with regular expression and optional string from a file. + + :param f: File-like object to read from + :return: Iterator over tuples with regular expression and test name + """ + for l in f.readlines(): + l = l.strip() + if l[0] == "#": + continue + try: + (test, reason) = l.split("#", 1) + except ValueError: + yield l, None + else: + yield test.strip(), reason.strip() diff --git a/selftest/tests/test_testlist.py b/selftest/tests/test_testlist.py index e62300cace..5f03887b4e 100644 --- a/selftest/tests/test_testlist.py +++ b/selftest/tests/test_testlist.py @@ -21,8 +21,11 @@ from selftest.testlist import ( find_in_list, + read_test_regexes, ) +from cStringIO import StringIO + import unittest @@ -34,3 +37,19 @@ class FindInListTests(unittest.TestCase): def test_no_reason(self): self.assertEquals("because", find_in_list([("foo.*bar", "because")], "foo.bla.bar")) + + +class ReadTestRegexesTests(unittest.TestCase): + + def test_comment(self): + f = StringIO("# I am a comment\n # I am also a comment\n") + self.assertEquals([], list(read_test_regexes(f))) + + def test_no_reason(self): + f = StringIO(" foo\n") + self.assertEquals([("foo", None)], list(read_test_regexes(f))) + + def test_reason(self): + f = StringIO(" foo # because\nbar\n") + self.assertEquals([("foo", "because"), ("bar", None)], + list(read_test_regexes(f))) -- cgit