14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test.test_support import have_unicode, run_unittest 24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest 34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass base_set: 64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __init__(self, el): 74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.el = el 84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass set(base_set): 104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __contains__(self, el): 114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return self.el == el 124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass seq(base_set): 144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __getitem__(self, n): 154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return [self.el][n] 164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestContains(unittest.TestCase): 194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_common_tests(self): 204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = base_set(1) 214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm b = set(1) 224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm c = seq(1) 234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(1, b) 244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(0, b) 254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(1, c) 264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(0, c) 274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, lambda: 1 in a) 284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, lambda: 1 not in a) 294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test char in string 314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn('c', 'abc') 324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn('d', 'abc') 334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn('', '') 354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn('', 'abc') 364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, lambda: None in 'abc') 384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if have_unicode: 404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_char_in_unicode(self): 414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn('c', unicode('abc')) 424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn('d', unicode('abc')) 434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn('', unicode('')) 454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(unicode(''), '') 464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(unicode(''), unicode('')) 474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn('', unicode('abc')) 484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(unicode(''), 'abc') 494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(unicode(''), unicode('abc')) 504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertRaises(TypeError, lambda: None in unicode('abc')) 524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test Unicode char in Unicode 544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(unicode('c'), unicode('abc')) 554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(unicode('d'), unicode('abc')) 564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # test Unicode char in string 584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(unicode('c'), 'abc') 594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(unicode('d'), 'abc') 604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def test_builtin_sequence_types(self): 624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm # a collection of tests on builtin sequence types 634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = range(10) 644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i in a: 654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(i, a) 664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(16, a) 674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(a, a) 684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm a = tuple(a) 704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm for i in a: 714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertIn(i, a) 724710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(16, a) 734710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(a, a) 744710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 754710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Deviant1: 764710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Behaves strangely when compared 774710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 784710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This class is designed to make sure that the contains code 794710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm works when the list is modified during the check. 804710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 814710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm aList = range(15) 824710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __cmp__(self, other): 834710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if other == 12: 844710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.aList.remove(12) 854710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.aList.remove(13) 864710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.aList.remove(14) 874710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm return 1 884710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 894710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(Deviant1(), Deviant1.aList) 904710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 914710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm class Deviant2: 924710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """Behaves strangely when compared 934710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 944710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm This class raises an exception during comparison. That in 954710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm turn causes the comparison to fail with a TypeError. 964710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm """ 974710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm def __cmp__(self, other): 984710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm if other == 4: 994710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm raise RuntimeError, "gotcha" 1004710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1014710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm try: 1024710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm self.assertNotIn(Deviant2(), a) 1034710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm except TypeError: 1044710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm pass 1054710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1064710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1074710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main(): 1084710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm run_unittest(TestContains) 1094710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm 1104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__': 1114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm test_main() 112