| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | "Test percolator, coverage 100%." | 
					
						
							| 
									
										
										
										
											2016-05-17 22:48:22 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | from idlelib.percolator import Percolator, Delegator | 
					
						
							| 
									
										
										
										
											2016-05-17 22:48:22 -04:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2018-06-18 04:47:59 -04:00
										 |  |  | from test.support import requires | 
					
						
							|  |  |  | requires('gui') | 
					
						
							| 
									
										
										
										
											2016-05-17 22:48:22 -04:00
										 |  |  | from tkinter import Text, Tk, END | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MyFilter(Delegator): | 
					
						
							|  |  |  |     def __init__(self): | 
					
						
							|  |  |  |         Delegator.__init__(self, None) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def insert(self, *args): | 
					
						
							|  |  |  |         self.insert_called_with = args | 
					
						
							|  |  |  |         self.delegate.insert(*args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def delete(self, *args): | 
					
						
							|  |  |  |         self.delete_called_with = args | 
					
						
							|  |  |  |         self.delegate.delete(*args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def uppercase_insert(self, index, chars, tags=None): | 
					
						
							|  |  |  |         chars = chars.upper() | 
					
						
							|  |  |  |         self.delegate.insert(index, chars) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def lowercase_insert(self, index, chars, tags=None): | 
					
						
							|  |  |  |         chars = chars.lower() | 
					
						
							|  |  |  |         self.delegate.insert(index, chars) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def dont_insert(self, index, chars, tags=None): | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class PercolatorTest(unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def setUpClass(cls): | 
					
						
							|  |  |  |         cls.root = Tk() | 
					
						
							|  |  |  |         cls.text = Text(cls.root) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     @classmethod | 
					
						
							|  |  |  |     def tearDownClass(cls): | 
					
						
							| 
									
										
										
										
											2016-06-03 22:19:17 -04:00
										 |  |  |         del cls.text | 
					
						
							| 
									
										
										
										
											2016-05-17 22:48:22 -04:00
										 |  |  |         cls.root.destroy() | 
					
						
							| 
									
										
										
										
											2016-06-03 22:19:17 -04:00
										 |  |  |         del cls.root | 
					
						
							| 
									
										
										
										
											2016-05-17 22:48:22 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def setUp(self): | 
					
						
							|  |  |  |         self.percolator = Percolator(self.text) | 
					
						
							|  |  |  |         self.filter_one = MyFilter() | 
					
						
							|  |  |  |         self.filter_two = MyFilter() | 
					
						
							|  |  |  |         self.percolator.insertfilter(self.filter_one) | 
					
						
							|  |  |  |         self.percolator.insertfilter(self.filter_two) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def tearDown(self): | 
					
						
							|  |  |  |         self.percolator.close() | 
					
						
							|  |  |  |         self.text.delete('1.0', END) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_insertfilter(self): | 
					
						
							|  |  |  |         self.assertIsNotNone(self.filter_one.delegate) | 
					
						
							|  |  |  |         self.assertEqual(self.percolator.top, self.filter_two) | 
					
						
							|  |  |  |         self.assertEqual(self.filter_two.delegate, self.filter_one) | 
					
						
							|  |  |  |         self.assertEqual(self.filter_one.delegate, self.percolator.bottom) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_removefilter(self): | 
					
						
							|  |  |  |         filter_three = MyFilter() | 
					
						
							|  |  |  |         self.percolator.removefilter(self.filter_two) | 
					
						
							|  |  |  |         self.assertEqual(self.percolator.top, self.filter_one) | 
					
						
							|  |  |  |         self.assertIsNone(self.filter_two.delegate) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         filter_three = MyFilter() | 
					
						
							|  |  |  |         self.percolator.insertfilter(self.filter_two) | 
					
						
							|  |  |  |         self.percolator.insertfilter(filter_three) | 
					
						
							|  |  |  |         self.percolator.removefilter(self.filter_one) | 
					
						
							|  |  |  |         self.assertEqual(self.percolator.top, filter_three) | 
					
						
							|  |  |  |         self.assertEqual(filter_three.delegate, self.filter_two) | 
					
						
							|  |  |  |         self.assertEqual(self.filter_two.delegate, self.percolator.bottom) | 
					
						
							|  |  |  |         self.assertIsNone(self.filter_one.delegate) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_insert(self): | 
					
						
							|  |  |  |         self.text.insert('insert', 'foo') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', END), 'foo\n') | 
					
						
							|  |  |  |         self.assertTupleEqual(self.filter_one.insert_called_with, | 
					
						
							|  |  |  |                               ('insert', 'foo', None)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_modify_insert(self): | 
					
						
							|  |  |  |         self.filter_one.insert = self.filter_one.uppercase_insert | 
					
						
							|  |  |  |         self.text.insert('insert', 'bAr') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', END), 'BAR\n') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_modify_chain_insert(self): | 
					
						
							|  |  |  |         filter_three = MyFilter() | 
					
						
							|  |  |  |         self.percolator.insertfilter(filter_three) | 
					
						
							|  |  |  |         self.filter_two.insert = self.filter_two.uppercase_insert | 
					
						
							|  |  |  |         self.filter_one.insert = self.filter_one.lowercase_insert | 
					
						
							|  |  |  |         self.text.insert('insert', 'BaR') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', END), 'bar\n') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_dont_insert(self): | 
					
						
							|  |  |  |         self.filter_one.insert = self.filter_one.dont_insert | 
					
						
							|  |  |  |         self.text.insert('insert', 'foo bar') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', END), '\n') | 
					
						
							|  |  |  |         self.filter_one.insert = self.filter_one.dont_insert | 
					
						
							|  |  |  |         self.text.insert('insert', 'foo bar') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', END), '\n') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_without_filter(self): | 
					
						
							|  |  |  |         self.text.insert('insert', 'hello') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', 'end'), 'hello\n') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_delete(self): | 
					
						
							|  |  |  |         self.text.insert('insert', 'foo') | 
					
						
							|  |  |  |         self.text.delete('1.0', '1.2') | 
					
						
							|  |  |  |         self.assertEqual(self.text.get('1.0', END), 'o\n') | 
					
						
							|  |  |  |         self.assertTupleEqual(self.filter_one.delete_called_with, | 
					
						
							|  |  |  |                               ('1.0', '1.2')) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     unittest.main(verbosity=2) |