| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | from test.test_support import have_unicode, run_unittest | 
					
						
							|  |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2000-03-06 21:00:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | class base_set: | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __init__(self, el): | 
					
						
							|  |  |  |         self.el = el | 
					
						
							| 
									
										
										
										
											2000-03-06 21:00:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class set(base_set): | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __contains__(self, el): | 
					
						
							|  |  |  |         return self.el == el | 
					
						
							| 
									
										
										
										
											2000-03-06 21:00:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class seq(base_set): | 
					
						
							| 
									
										
										
										
											2000-10-23 17:22:08 +00:00
										 |  |  |     def __getitem__(self, n): | 
					
						
							|  |  |  |         return [self.el][n] | 
					
						
							| 
									
										
										
										
											2000-03-06 21:00:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-04-27 21:40:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | class TestContains(unittest.TestCase): | 
					
						
							|  |  |  |     def test_common_tests(self): | 
					
						
							|  |  |  |         a = base_set(1) | 
					
						
							|  |  |  |         b = set(1) | 
					
						
							|  |  |  |         c = seq(1) | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |         self.assertIn(1, b) | 
					
						
							|  |  |  |         self.assertNotIn(0, b) | 
					
						
							|  |  |  |         self.assertIn(1, c) | 
					
						
							|  |  |  |         self.assertNotIn(0, c) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  |         self.assertRaises(TypeError, lambda: 1 in a) | 
					
						
							|  |  |  |         self.assertRaises(TypeError, lambda: 1 not in a) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # test char in string | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |         self.assertIn('c', 'abc') | 
					
						
							|  |  |  |         self.assertNotIn('d', 'abc') | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |         self.assertIn('', '') | 
					
						
							|  |  |  |         self.assertIn('', 'abc') | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         self.assertRaises(TypeError, lambda: None in 'abc') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if have_unicode: | 
					
						
							|  |  |  |         def test_char_in_unicode(self): | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn('c', unicode('abc')) | 
					
						
							|  |  |  |             self.assertNotIn('d', unicode('abc')) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn('', unicode('')) | 
					
						
							|  |  |  |             self.assertIn(unicode(''), '') | 
					
						
							|  |  |  |             self.assertIn(unicode(''), unicode('')) | 
					
						
							|  |  |  |             self.assertIn('', unicode('abc')) | 
					
						
							|  |  |  |             self.assertIn(unicode(''), 'abc') | 
					
						
							|  |  |  |             self.assertIn(unicode(''), unicode('abc')) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             self.assertRaises(TypeError, lambda: None in unicode('abc')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             # test Unicode char in Unicode | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn(unicode('c'), unicode('abc')) | 
					
						
							|  |  |  |             self.assertNotIn(unicode('d'), unicode('abc')) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |             # test Unicode char in string | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn(unicode('c'), 'abc') | 
					
						
							|  |  |  |             self.assertNotIn(unicode('d'), 'abc') | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_builtin_sequence_types(self): | 
					
						
							|  |  |  |         # a collection of tests on builtin sequence types | 
					
						
							|  |  |  |         a = range(10) | 
					
						
							|  |  |  |         for i in a: | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn(i, a) | 
					
						
							|  |  |  |         self.assertNotIn(16, a) | 
					
						
							|  |  |  |         self.assertNotIn(a, a) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         a = tuple(a) | 
					
						
							|  |  |  |         for i in a: | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertIn(i, a) | 
					
						
							|  |  |  |         self.assertNotIn(16, a) | 
					
						
							|  |  |  |         self.assertNotIn(a, a) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |         self.assertNotIn(Deviant1(), Deviant1.aList) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         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: | 
					
						
							| 
									
										
										
										
											2010-01-23 23:04:36 +00:00
										 |  |  |             self.assertNotIn(Deviant2(), a) | 
					
						
							| 
									
										
										
										
											2008-02-06 19:28:49 +00:00
										 |  |  |         except TypeError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_main(): | 
					
						
							|  |  |  |     run_unittest(TestContains) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     test_main() |