Coverage for idle_test/test_percolator.py: 4%

91 statements  

« prev     ^ index     » next       coverage.py v7.2.5, created at 2023-05-11 13:22 -0700

1"Test percolator, coverage 100%." 

2 

3from idlelib.percolator import Percolator, Delegator 

4import unittest 

5from test.support import requires 

6requires('gui') 

7from tkinter import Text, Tk, END 

8 

9 

10class MyFilter(Delegator): 

11 def __init__(self): 

12 Delegator.__init__(self, None) 

13 

14 def insert(self, *args): 

15 self.insert_called_with = args 

16 self.delegate.insert(*args) 

17 

18 def delete(self, *args): 

19 self.delete_called_with = args 

20 self.delegate.delete(*args) 

21 

22 def uppercase_insert(self, index, chars, tags=None): 

23 chars = chars.upper() 

24 self.delegate.insert(index, chars) 

25 

26 def lowercase_insert(self, index, chars, tags=None): 

27 chars = chars.lower() 

28 self.delegate.insert(index, chars) 

29 

30 def dont_insert(self, index, chars, tags=None): 

31 pass 

32 

33 

34class PercolatorTest(unittest.TestCase): 

35 

36 @classmethod 

37 def setUpClass(cls): 

38 cls.root = Tk() 

39 cls.text = Text(cls.root) 

40 

41 @classmethod 

42 def tearDownClass(cls): 

43 del cls.text 

44 cls.root.destroy() 

45 del cls.root 

46 

47 def setUp(self): 

48 self.percolator = Percolator(self.text) 

49 self.filter_one = MyFilter() 

50 self.filter_two = MyFilter() 

51 self.percolator.insertfilter(self.filter_one) 

52 self.percolator.insertfilter(self.filter_two) 

53 

54 def tearDown(self): 

55 self.percolator.close() 

56 self.text.delete('1.0', END) 

57 

58 def test_insertfilter(self): 

59 self.assertIsNotNone(self.filter_one.delegate) 

60 self.assertEqual(self.percolator.top, self.filter_two) 

61 self.assertEqual(self.filter_two.delegate, self.filter_one) 

62 self.assertEqual(self.filter_one.delegate, self.percolator.bottom) 

63 

64 def test_removefilter(self): 

65 filter_three = MyFilter() 

66 self.percolator.removefilter(self.filter_two) 

67 self.assertEqual(self.percolator.top, self.filter_one) 

68 self.assertIsNone(self.filter_two.delegate) 

69 

70 filter_three = MyFilter() 

71 self.percolator.insertfilter(self.filter_two) 

72 self.percolator.insertfilter(filter_three) 

73 self.percolator.removefilter(self.filter_one) 

74 self.assertEqual(self.percolator.top, filter_three) 

75 self.assertEqual(filter_three.delegate, self.filter_two) 

76 self.assertEqual(self.filter_two.delegate, self.percolator.bottom) 

77 self.assertIsNone(self.filter_one.delegate) 

78 

79 def test_insert(self): 

80 self.text.insert('insert', 'foo') 

81 self.assertEqual(self.text.get('1.0', END), 'foo\n') 

82 self.assertTupleEqual(self.filter_one.insert_called_with, 

83 ('insert', 'foo', None)) 

84 

85 def test_modify_insert(self): 

86 self.filter_one.insert = self.filter_one.uppercase_insert 

87 self.text.insert('insert', 'bAr') 

88 self.assertEqual(self.text.get('1.0', END), 'BAR\n') 

89 

90 def test_modify_chain_insert(self): 

91 filter_three = MyFilter() 

92 self.percolator.insertfilter(filter_three) 

93 self.filter_two.insert = self.filter_two.uppercase_insert 

94 self.filter_one.insert = self.filter_one.lowercase_insert 

95 self.text.insert('insert', 'BaR') 

96 self.assertEqual(self.text.get('1.0', END), 'bar\n') 

97 

98 def test_dont_insert(self): 

99 self.filter_one.insert = self.filter_one.dont_insert 

100 self.text.insert('insert', 'foo bar') 

101 self.assertEqual(self.text.get('1.0', END), '\n') 

102 self.filter_one.insert = self.filter_one.dont_insert 

103 self.text.insert('insert', 'foo bar') 

104 self.assertEqual(self.text.get('1.0', END), '\n') 

105 

106 def test_without_filter(self): 

107 self.text.insert('insert', 'hello') 

108 self.assertEqual(self.text.get('1.0', 'end'), 'hello\n') 

109 

110 def test_delete(self): 

111 self.text.insert('insert', 'foo') 

112 self.text.delete('1.0', '1.2') 

113 self.assertEqual(self.text.get('1.0', END), 'o\n') 

114 self.assertTupleEqual(self.filter_one.delete_called_with, 

115 ('1.0', '1.2')) 

116 

117if __name__ == '__main__': 

118 unittest.main(verbosity=2)