bpo-32857: Raise error when tkinter after_cancel() is called with Non… · python/cpython@73a4396 (original) (raw)

`@@ -48,6 +48,114 @@ def test_tk_setPalette(self):

`

48

48

`'^must specify a background color$',

`

49

49

`root.tk_setPalette, highlightColor='blue')

`

50

50

``

``

51

`+

def test_after(self):

`

``

52

`+

root = self.root

`

``

53

+

``

54

`+

def callback(start=0, step=1):

`

``

55

`+

nonlocal count

`

``

56

`+

count = start + step

`

``

57

+

``

58

`+

Without function, sleeps for ms.

`

``

59

`+

self.assertIsNone(root.after(1))

`

``

60

+

``

61

`+

Set up with callback with no args.

`

``

62

`+

count = 0

`

``

63

`+

timer1 = root.after(0, callback)

`

``

64

`+

self.assertIn(timer1, root.tk.call('after', 'info'))

`

``

65

`+

(script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))

`

``

66

`+

root.update() # Process all pending events.

`

``

67

`+

self.assertEqual(count, 1)

`

``

68

`+

with self.assertRaises(tkinter.TclError):

`

``

69

`+

root.tk.call(script)

`

``

70

+

``

71

`+

Set up with callback with args.

`

``

72

`+

count = 0

`

``

73

`+

timer1 = root.after(0, callback, 42, 11)

`

``

74

`+

root.update() # Process all pending events.

`

``

75

`+

self.assertEqual(count, 53)

`

``

76

+

``

77

`+

Cancel before called.

`

``

78

`+

timer1 = root.after(1000, callback)

`

``

79

`+

self.assertIn(timer1, root.tk.call('after', 'info'))

`

``

80

`+

(script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))

`

``

81

`+

root.after_cancel(timer1) # Cancel this event.

`

``

82

`+

self.assertEqual(count, 53)

`

``

83

`+

with self.assertRaises(tkinter.TclError):

`

``

84

`+

root.tk.call(script)

`

``

85

+

``

86

`+

def test_after_idle(self):

`

``

87

`+

root = self.root

`

``

88

+

``

89

`+

def callback(start=0, step=1):

`

``

90

`+

nonlocal count

`

``

91

`+

count = start + step

`

``

92

+

``

93

`+

Set up with callback with no args.

`

``

94

`+

count = 0

`

``

95

`+

idle1 = root.after_idle(callback)

`

``

96

`+

self.assertIn(idle1, root.tk.call('after', 'info'))

`

``

97

`+

(script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))

`

``

98

`+

root.update_idletasks() # Process all pending events.

`

``

99

`+

self.assertEqual(count, 1)

`

``

100

`+

with self.assertRaises(tkinter.TclError):

`

``

101

`+

root.tk.call(script)

`

``

102

+

``

103

`+

Set up with callback with args.

`

``

104

`+

count = 0

`

``

105

`+

idle1 = root.after_idle(callback, 42, 11)

`

``

106

`+

root.update_idletasks() # Process all pending events.

`

``

107

`+

self.assertEqual(count, 53)

`

``

108

+

``

109

`+

Cancel before called.

`

``

110

`+

idle1 = root.after_idle(callback)

`

``

111

`+

self.assertIn(idle1, root.tk.call('after', 'info'))

`

``

112

`+

(script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))

`

``

113

`+

root.after_cancel(idle1) # Cancel this event.

`

``

114

`+

self.assertEqual(count, 53)

`

``

115

`+

with self.assertRaises(tkinter.TclError):

`

``

116

`+

root.tk.call(script)

`

``

117

+

``

118

`+

def test_after_cancel(self):

`

``

119

`+

root = self.root

`

``

120

+

``

121

`+

def callback():

`

``

122

`+

nonlocal count

`

``

123

`+

count += 1

`

``

124

+

``

125

`+

timer1 = root.after(5000, callback)

`

``

126

`+

idle1 = root.after_idle(callback)

`

``

127

+

``

128

`+

No value for id raises a ValueError.

`

``

129

`+

with self.assertRaises(ValueError):

`

``

130

`+

root.after_cancel(None)

`

``

131

+

``

132

`+

Cancel timer event.

`

``

133

`+

count = 0

`

``

134

`+

(script, _) = root.tk.splitlist(root.tk.call('after', 'info', timer1))

`

``

135

`+

root.tk.call(script)

`

``

136

`+

self.assertEqual(count, 1)

`

``

137

`+

root.after_cancel(timer1)

`

``

138

`+

with self.assertRaises(tkinter.TclError):

`

``

139

`+

root.tk.call(script)

`

``

140

`+

self.assertEqual(count, 1)

`

``

141

`+

with self.assertRaises(tkinter.TclError):

`

``

142

`+

root.tk.call('after', 'info', timer1)

`

``

143

+

``

144

`+

Cancel same event - nothing happens.

`

``

145

`+

root.after_cancel(timer1)

`

``

146

+

``

147

`+

Cancel idle event.

`

``

148

`+

count = 0

`

``

149

`+

(script, _) = root.tk.splitlist(root.tk.call('after', 'info', idle1))

`

``

150

`+

root.tk.call(script)

`

``

151

`+

self.assertEqual(count, 1)

`

``

152

`+

root.after_cancel(idle1)

`

``

153

`+

with self.assertRaises(tkinter.TclError):

`

``

154

`+

root.tk.call(script)

`

``

155

`+

self.assertEqual(count, 1)

`

``

156

`+

with self.assertRaises(tkinter.TclError):

`

``

157

`+

root.tk.call('after', 'info', idle1)

`

``

158

+

51

159

``

52

160

`tests_gui = (MiscTest, )

`

53

161

``