From 5af2f7454daec9b8526ce5437783137f17a0bce3 Mon Sep 17 00:00:00 2001 From: Facundo Batista Date: Wed, 6 Feb 2008 19:28:49 +0000 Subject: [PATCH] Fixes issue 1959. Converted tests to unittest. Thanks Giampaolo Rodola. --- Lib/test/test_contains.py | 196 +++++++++++++++++--------------------- 1 file changed, 87 insertions(+), 109 deletions(-) diff --git a/Lib/test/test_contains.py b/Lib/test/test_contains.py index e6f5cf72727..0d540995bc1 100644 --- a/Lib/test/test_contains.py +++ b/Lib/test/test_contains.py @@ -1,133 +1,111 @@ -from test.test_support import TestFailed, have_unicode +from test.test_support import have_unicode, run_unittest +import unittest + class base_set: - def __init__(self, el): self.el = el class set(base_set): - def __contains__(self, el): return self.el == el class seq(base_set): - def __getitem__(self, n): return [self.el][n] -def check(ok, *args): - if not ok: - raise TestFailed, " ".join(map(str, args)) -a = base_set(1) -b = set(1) -c = seq(1) +class TestContains(unittest.TestCase): + def test_common_tests(self): + a = base_set(1) + b = set(1) + c = seq(1) + self.assert_(1 in b) + self.assert_(0 not in b) + self.assert_(1 in c) + self.assert_(0 not in c) + self.assertRaises(TypeError, lambda: 1 in a) + self.assertRaises(TypeError, lambda: 1 not in a) -check(1 in b, "1 not in set(1)") -check(0 not in b, "0 in set(1)") -check(1 in c, "1 not in seq(1)") -check(0 not in c, "0 in seq(1)") + # test char in string + self.assert_('c' in 'abc') + self.assert_('d' not in 'abc') -try: - 1 in a - check(0, "in base_set did not raise error") -except TypeError: - pass + self.assert_('' in '') + self.assert_('' in 'abc') -try: - 1 not in a - check(0, "not in base_set did not raise error") -except TypeError: - pass + self.assertRaises(TypeError, lambda: None in 'abc') -# Test char in string + if have_unicode: + def test_char_in_unicode(self): + self.assert_('c' in unicode('abc')) + self.assert_('d' not in unicode('abc')) -check('c' in 'abc', "'c' not in 'abc'") -check('d' not in 'abc', "'d' in 'abc'") + self.assert_('' in unicode('')) + self.assert_(unicode('') in '') + self.assert_(unicode('') in unicode('')) + self.assert_('' in unicode('abc')) + self.assert_(unicode('') in 'abc') + self.assert_(unicode('') in unicode('abc')) -check('' in '', "'' not in ''") -check('' in 'abc', "'' not in 'abc'") + self.assertRaises(TypeError, lambda: None in unicode('abc')) -try: - None in 'abc' - check(0, "None in 'abc' did not raise error") -except TypeError: - pass + # test Unicode char in Unicode + self.assert_(unicode('c') in unicode('abc')) + self.assert_(unicode('d') not in unicode('abc')) + + # test Unicode char in string + self.assert_(unicode('c') in 'abc') + self.assert_(unicode('d') not in 'abc') + + def test_builtin_sequence_types(self): + # a collection of tests on builtin sequence types + a = range(10) + for i in a: + self.assert_(i in a) + self.assert_(16 not in a) + self.assert_(a not in a) + + a = tuple(a) + for i in a: + self.assert_(i in a) + self.assert_(16 not in a) + self.assert_(a not in a) + + class Deviant1: + """Behaves strangely when compared + + This class is designed to make sure that the contains code + works when the list is modified during the check. + """ + aList = range(15) + def __cmp__(self, other): + if other == 12: + self.aList.remove(12) + self.aList.remove(13) + self.aList.remove(14) + return 1 + + self.assert_(Deviant1() not in Deviant1.aList) + + class Deviant2: + """Behaves strangely when compared + + This class raises an exception during comparison. That in + turn causes the comparison to fail with a TypeError. + """ + def __cmp__(self, other): + if other == 4: + raise RuntimeError, "gotcha" + + try: + self.assert_(Deviant2() not in a) + except TypeError: + pass -if have_unicode: +def test_main(): + run_unittest(TestContains) - # Test char in Unicode - - check('c' in unicode('abc'), "'c' not in u'abc'") - check('d' not in unicode('abc'), "'d' in u'abc'") - - check('' in unicode(''), "'' not in u''") - check(unicode('') in '', "u'' not in ''") - check(unicode('') in unicode(''), "u'' not in u''") - check('' in unicode('abc'), "'' not in u'abc'") - check(unicode('') in 'abc', "u'' not in 'abc'") - check(unicode('') in unicode('abc'), "u'' not in u'abc'") - - try: - None in unicode('abc') - check(0, "None in u'abc' did not raise error") - except TypeError: - pass - - # Test Unicode char in Unicode - - check(unicode('c') in unicode('abc'), "u'c' not in u'abc'") - check(unicode('d') not in unicode('abc'), "u'd' in u'abc'") - - # Test Unicode char in string - - check(unicode('c') in 'abc', "u'c' not in 'abc'") - check(unicode('d') not in 'abc', "u'd' in 'abc'") - -# A collection of tests on builtin sequence types -a = range(10) -for i in a: - check(i in a, "%r not in %r" % (i, a)) -check(16 not in a, "16 not in %r" % (a,)) -check(a not in a, "%s not in %r" % (a, a)) - -a = tuple(a) -for i in a: - check(i in a, "%r not in %r" % (i, a)) -check(16 not in a, "16 not in %r" % (a,)) -check(a not in a, "%r not in %r" % (a, a)) - -class Deviant1: - """Behaves strangely when compared - - This class is designed to make sure that the contains code - works when the list is modified during the check. - """ - - aList = range(15) - - def __cmp__(self, other): - if other == 12: - self.aList.remove(12) - self.aList.remove(13) - self.aList.remove(14) - return 1 - -check(Deviant1() not in Deviant1.aList, "Deviant1 failed") - -class Deviant2: - """Behaves strangely when compared - - This class raises an exception during comparison. That in - turn causes the comparison to fail with a TypeError. - """ - - def __cmp__(self, other): - if other == 4: - raise RuntimeError, "gotcha" - -try: - check(Deviant2() not in a, "oops") -except TypeError: - pass +if __name__ == '__main__': + test_main()