[3.6] bpo-30495: IDLE: improve textview with docstrings, PEP8 names, … · python/cpython@6f31717 (original) (raw)

1

1

`'''Test idlelib.textview.

`

2

2

``

3

``

`-

Since all methods and functions create (or destroy) a TextViewer, which

`

4

``

`-

is a widget containing multiple widgets, all tests must be gui tests.

`

``

3

`+

Since all methods and functions create (or destroy) a ViewWindow, which

`

``

4

`+

is a widget containing a widget, etcetera, all tests must be gui tests.

`

5

5

`Using mock Text would not change this. Other mocks are used to retrieve

`

6

6

`information about calls.

`

7

7

``

`@@ -13,7 +13,8 @@

`

13

13

``

14

14

`import unittest

`

15

15

`import os

`

16

``

`-

from tkinter import Tk, Button

`

``

16

`+

from tkinter import Tk

`

``

17

`+

from tkinter.ttk import Button

`

17

18

`from idlelib.idle_test.mock_idle import Func

`

18

19

`from idlelib.idle_test.mock_tk import Mbox_func

`

19

20

``

`@@ -25,52 +26,73 @@ def setUpModule():

`

25

26

`def tearDownModule():

`

26

27

`global root

`

27

28

`root.update_idletasks()

`

28

``

`-

root.destroy() # Pyflakes falsely sees root as undefined.

`

``

29

`+

root.destroy()

`

29

30

`del root

`

30

31

``

31

``

`-

If we call TextViewer or wrapper functions with defaults

`

``

32

`+

If we call ViewWindow or wrapper functions with defaults

`

32

33

`# modal=True, _utest=False, test hangs on call to wait_window.

`

33

34

`# Have also gotten tk error 'can't invoke "event" command'.

`

34

35

``

35

36

``

36

``

`-

class TV(tv.TextViewer): # Used in TextViewTest.

`

``

37

`+

class VW(tv.ViewWindow): # Used in ViewWindowTest.

`

37

38

`transient = Func()

`

38

39

`grab_set = Func()

`

39

40

`wait_window = Func()

`

40

41

``

41

42

``

42

``

`-

Call wrapper class with mock wait_window.

`

43

``

`-

class TextViewTest(unittest.TestCase):

`

``

43

`+

Call wrapper class VW with mock wait_window.

`

``

44

`+

class ViewWindowTest(unittest.TestCase):

`

44

45

``

45

46

`def setUp(self):

`

46

``

`-

TV.transient.init()

`

47

``

`-

TV.grab_set.init()

`

48

``

`-

TV.wait_window.init()

`

``

47

`+

VW.transient.init()

`

``

48

`+

VW.grab_set.init()

`

``

49

`+

VW.wait_window.init()

`

49

50

``

50

51

`def test_init_modal(self):

`

51

``

`-

view = TV(root, 'Title', 'test text')

`

52

``

`-

self.assertTrue(TV.transient.called)

`

53

``

`-

self.assertTrue(TV.grab_set.called)

`

54

``

`-

self.assertTrue(TV.wait_window.called)

`

``

52

`+

view = VW(root, 'Title', 'test text')

`

``

53

`+

self.assertTrue(VW.transient.called)

`

``

54

`+

self.assertTrue(VW.grab_set.called)

`

``

55

`+

self.assertTrue(VW.wait_window.called)

`

55

56

`view.ok()

`

56

57

``

57

58

`def test_init_nonmodal(self):

`

58

``

`-

view = TV(root, 'Title', 'test text', modal=False)

`

59

``

`-

self.assertFalse(TV.transient.called)

`

60

``

`-

self.assertFalse(TV.grab_set.called)

`

61

``

`-

self.assertFalse(TV.wait_window.called)

`

``

59

`+

view = VW(root, 'Title', 'test text', modal=False)

`

``

60

`+

self.assertFalse(VW.transient.called)

`

``

61

`+

self.assertFalse(VW.grab_set.called)

`

``

62

`+

self.assertFalse(VW.wait_window.called)

`

62

63

`view.ok()

`

63

64

``

64

65

`def test_ok(self):

`

65

``

`-

view = TV(root, 'Title', 'test text', modal=False)

`

``

66

`+

view = VW(root, 'Title', 'test text', modal=False)

`

66

67

`view.destroy = Func()

`

67

68

`view.ok()

`

68

69

`self.assertTrue(view.destroy.called)

`

69

70

`del view.destroy # Unmask real function.

`

70

71

`view.destroy()

`

71

72

``

72

73

``

73

``

`-

Call TextViewer with modal=False.

`

``

74

`+

class TextFrameTest(unittest.TestCase):

`

``

75

+

``

76

`+

@classmethod

`

``

77

`+

def setUpClass(cls):

`

``

78

`+

"By itself, this tests that file parsed without exception."

`

``

79

`+

cls.root = root = Tk()

`

``

80

`+

root.withdraw()

`

``

81

`+

cls.frame = tv.TextFrame(root, 'test text')

`

``

82

+

``

83

`+

@classmethod

`

``

84

`+

def tearDownClass(cls):

`

``

85

`+

del cls.frame

`

``

86

`+

cls.root.update_idletasks()

`

``

87

`+

cls.root.destroy()

`

``

88

`+

del cls.root

`

``

89

+

``

90

`+

def test_line1(self):

`

``

91

`+

get = self.frame.text.get

`

``

92

`+

self.assertEqual(get('1.0', '1.end'), 'test text')

`

``

93

+

``

94

+

``

95

`+

Call ViewWindow with modal=False.

`

74

96

`class ViewFunctionTest(unittest.TestCase):

`

75

97

``

76

98

`@classmethod

`

`@@ -85,13 +107,16 @@ def tearDownClass(cls):

`

85

107

``

86

108

`def test_view_text(self):

`

87

109

`view = tv.view_text(root, 'Title', 'test text', modal=False)

`

88

``

`-

self.assertIsInstance(view, tv.TextViewer)

`

``

110

`+

self.assertIsInstance(view, tv.ViewWindow)

`

``

111

`+

self.assertIsInstance(view.viewframe, tv.ViewFrame)

`

89

112

`view.ok()

`

90

113

``

91

114

`def test_view_file(self):

`

92

115

`view = tv.view_file(root, 'Title', file, modal=False)

`

93

``

`-

self.assertIsInstance(view, tv.TextViewer)

`

94

``

`-

self.assertIn('Test', view.text.get('1.0', '1.end'))

`

``

116

`+

self.assertIsInstance(view, tv.ViewWindow)

`

``

117

`+

self.assertIsInstance(view.viewframe, tv.ViewFrame)

`

``

118

`+

get = view.viewframe.textframe.text.get

`

``

119

`+

self.assertIn('Test', get('1.0', '1.end'))

`

95

120

`view.ok()

`

96

121

``

97

122

`def test_bad_file(self):

`

`@@ -109,8 +134,7 @@ def test_bad_encoding(self):

`

109

134

`self.assertEqual(tv.showerror.title, 'Unicode Decode Error')

`

110

135

``

111

136

``

112

``

-

113

``

`-

Call TextViewer with _utest=True.

`

``

137

`+

Call ViewWindow with _utest=True.

`

114

138

`class ButtonClickTest(unittest.TestCase):

`

115

139

``

116

140

`def setUp(self):

`

`@@ -131,7 +155,8 @@ def _command():

`

131

155

``

132

156

`self.assertEqual(self.called, True)

`

133

157

`self.assertEqual(self.view.title(), 'TITLE_TEXT')

`

134

``

`-

self.assertEqual(self.view.text.get('1.0', '1.end'), 'COMMAND')

`

``

158

`+

self.assertEqual(self.view.viewframe.textframe.text.get('1.0', '1.end'),

`

``

159

`+

'COMMAND')

`

135

160

``

136

161

`def test_view_file_bind_with_button(self):

`

137

162

`def _command():

`

`@@ -143,12 +168,11 @@ def _command():

`

143

168

``

144

169

`self.assertEqual(self.called, True)

`

145

170

`self.assertEqual(self.view.title(), 'TITLE_FILE')

`

``

171

`+

get = self.view.viewframe.textframe.text.get

`

146

172

`with open(file) as f:

`

147

``

`-

self.assertEqual(self.view.text.get('1.0', '1.end'),

`

148

``

`-

f.readline().strip())

`

``

173

`+

self.assertEqual(get('1.0', '1.end'), f.readline().strip())

`

149

174

`f.readline()

`

150

``

`-

self.assertEqual(self.view.text.get('3.0', '3.end'),

`

151

``

`-

f.readline().strip())

`

``

175

`+

self.assertEqual(get('3.0', '3.end'), f.readline().strip())

`

152

176

``

153

177

``

154

178

`if name == 'main':

`