PageRenderTime 52ms CodeModel.GetById 20ms app.highlight 10ms RepoModel.GetById 20ms app.codeStats 0ms

/Lib/test/test_contains.py

http://unladen-swallow.googlecode.com/
Python | 111 lines | 102 code | 8 blank | 1 comment | 12 complexity | 9d7d115f3183f262c63e259762a48162 MD5 | raw file
  1from test.test_support import have_unicode, run_unittest
  2import unittest
  3
  4
  5class base_set:
  6    def __init__(self, el):
  7        self.el = el
  8
  9class set(base_set):
 10    def __contains__(self, el):
 11        return self.el == el
 12
 13class seq(base_set):
 14    def __getitem__(self, n):
 15        return [self.el][n]
 16
 17
 18class TestContains(unittest.TestCase):
 19    def test_common_tests(self):
 20        a = base_set(1)
 21        b = set(1)
 22        c = seq(1)
 23        self.assert_(1 in b)
 24        self.assert_(0 not in b)
 25        self.assert_(1 in c)
 26        self.assert_(0 not in c)
 27        self.assertRaises(TypeError, lambda: 1 in a)
 28        self.assertRaises(TypeError, lambda: 1 not in a)
 29
 30        # test char in string
 31        self.assert_('c' in 'abc')
 32        self.assert_('d' not in 'abc')
 33
 34        self.assert_('' in '')
 35        self.assert_('' in 'abc')
 36
 37        self.assertRaises(TypeError, lambda: None in 'abc')
 38
 39    if have_unicode:
 40        def test_char_in_unicode(self):
 41            self.assert_('c' in unicode('abc'))
 42            self.assert_('d' not in unicode('abc'))
 43
 44            self.assert_('' in unicode(''))
 45            self.assert_(unicode('') in '')
 46            self.assert_(unicode('') in unicode(''))
 47            self.assert_('' in unicode('abc'))
 48            self.assert_(unicode('') in 'abc')
 49            self.assert_(unicode('') in unicode('abc'))
 50
 51            self.assertRaises(TypeError, lambda: None in unicode('abc'))
 52
 53            # test Unicode char in Unicode
 54            self.assert_(unicode('c') in unicode('abc'))
 55            self.assert_(unicode('d') not in unicode('abc'))
 56
 57            # test Unicode char in string
 58            self.assert_(unicode('c') in 'abc')
 59            self.assert_(unicode('d') not in 'abc')
 60
 61    def test_builtin_sequence_types(self):
 62        # a collection of tests on builtin sequence types
 63        a = range(10)
 64        for i in a:
 65            self.assert_(i in a)
 66        self.assert_(16 not in a)
 67        self.assert_(a not in a)
 68
 69        a = tuple(a)
 70        for i in a:
 71            self.assert_(i in a)
 72        self.assert_(16 not in a)
 73        self.assert_(a not in a)
 74
 75        class Deviant1:
 76            """Behaves strangely when compared
 77
 78            This class is designed to make sure that the contains code
 79            works when the list is modified during the check.
 80            """
 81            aList = range(15)
 82            def __cmp__(self, other):
 83                if other == 12:
 84                    self.aList.remove(12)
 85                    self.aList.remove(13)
 86                    self.aList.remove(14)
 87                return 1
 88
 89        self.assert_(Deviant1() not in Deviant1.aList)
 90
 91        class Deviant2:
 92            """Behaves strangely when compared
 93
 94            This class raises an exception during comparison.  That in
 95            turn causes the comparison to fail with a TypeError.
 96            """
 97            def __cmp__(self, other):
 98                if other == 4:
 99                    raise RuntimeError, "gotcha"
100
101        try:
102            self.assert_(Deviant2() not in a)
103        except TypeError:
104            pass
105
106
107def test_main():
108    run_unittest(TestContains)
109
110if __name__ == '__main__':
111    test_main()