/Lib/test/test_contains.py
http://unladen-swallow.googlecode.com/ · Python · 111 lines · 74 code · 23 blank · 14 comment · 8 complexity · 9d7d115f3183f262c63e259762a48162 MD5 · raw file
- 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]
- 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)
- # test char in string
- self.assert_('c' in 'abc')
- self.assert_('d' not in 'abc')
- self.assert_('' in '')
- self.assert_('' in 'abc')
- self.assertRaises(TypeError, lambda: None in 'abc')
- if have_unicode:
- def test_char_in_unicode(self):
- self.assert_('c' in unicode('abc'))
- self.assert_('d' not in unicode('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'))
- self.assertRaises(TypeError, lambda: None in unicode('abc'))
- # 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
- def test_main():
- run_unittest(TestContains)
- if __name__ == '__main__':
- test_main()