symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_contains.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 from test.test_support import have_unicode, run_unittest
       
     2 import unittest
       
     3 
       
     4 
       
     5 class base_set:
       
     6     def __init__(self, el):
       
     7         self.el = el
       
     8 
       
     9 class set(base_set):
       
    10     def __contains__(self, el):
       
    11         return self.el == el
       
    12 
       
    13 class seq(base_set):
       
    14     def __getitem__(self, n):
       
    15         return [self.el][n]
       
    16 
       
    17 
       
    18 class 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 
       
   107 def test_main():
       
   108     run_unittest(TestContains)
       
   109 
       
   110 if __name__ == '__main__':
       
   111     test_main()