Skip to content

Commit f34e03e

Browse files
authored
bpo-32826: Add "encoding=utf-8" to open() in idle_test/test_help_about. (GH-5639)
GUI test test_file_buttons() only looks at initial ascii-only lines, but failed on systems where open() defaults to 'ascii' because readline() internally reads and decodes far enough ahead to encounter a non-ascii character in CREDITS.txt.
1 parent 7766b96 commit f34e03e

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

Lib/idlelib/idle_test/test_help_about.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -50,35 +50,37 @@ def test_dialog_logo(self):
5050
def test_printer_buttons(self):
5151
"""Test buttons whose commands use printer function."""
5252
dialog = self.dialog
53-
button_sources = [(dialog.py_license, license),
54-
(dialog.py_copyright, copyright),
55-
(dialog.py_credits, credits)]
56-
57-
for button, printer in button_sources:
58-
printer._Printer__setup()
59-
button.invoke()
60-
get = dialog._current_textview.viewframe.textframe.text.get
61-
self.assertEqual(printer._Printer__lines[0], get('1.0', '1.end'))
62-
self.assertEqual(
63-
printer._Printer__lines[1], get('2.0', '2.end'))
64-
dialog._current_textview.destroy()
53+
button_sources = [(dialog.py_license, license, 'license'),
54+
(dialog.py_copyright, copyright, 'copyright'),
55+
(dialog.py_credits, credits, 'credits')]
56+
57+
for button, printer, name in button_sources:
58+
with self.subTest(name=name):
59+
printer._Printer__setup()
60+
button.invoke()
61+
get = dialog._current_textview.viewframe.textframe.text.get
62+
lines = printer._Printer__lines
63+
self.assertEqual(lines[0], get('1.0', '1.end'))
64+
self.assertEqual(lines[1], get('2.0', '2.end'))
65+
dialog._current_textview.destroy()
6566

6667
def test_file_buttons(self):
6768
"""Test buttons that display files."""
6869
dialog = self.dialog
69-
button_sources = [(self.dialog.readme, 'README.txt'),
70-
(self.dialog.idle_news, 'NEWS.txt'),
71-
(self.dialog.idle_credits, 'CREDITS.txt')]
72-
73-
for button, filename in button_sources:
74-
button.invoke()
75-
fn = findfile(filename, subdir='idlelib')
76-
get = dialog._current_textview.viewframe.textframe.text.get
77-
with open(fn) as f:
78-
self.assertEqual(f.readline().strip(), get('1.0', '1.end'))
79-
f.readline()
80-
self.assertEqual(f.readline().strip(), get('3.0', '3.end'))
81-
dialog._current_textview.destroy()
70+
button_sources = [(self.dialog.readme, 'README.txt', 'readme'),
71+
(self.dialog.idle_news, 'NEWS.txt', 'news'),
72+
(self.dialog.idle_credits, 'CREDITS.txt', 'credits')]
73+
74+
for button, filename, name in button_sources:
75+
with self.subTest(name=name):
76+
button.invoke()
77+
fn = findfile(filename, subdir='idlelib')
78+
get = dialog._current_textview.viewframe.textframe.text.get
79+
with open(fn, encoding='utf-8') as f:
80+
self.assertEqual(f.readline().strip(), get('1.0', '1.end'))
81+
f.readline()
82+
self.assertEqual(f.readline().strip(), get('3.0', '3.end'))
83+
dialog._current_textview.destroy()
8284

8385

8486
class DefaultTitleTest(unittest.TestCase):
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Add "encoding=utf-8" to open() in IDLE's test_help_about.
2+
GUI test test_file_buttons() only looks at initial ascii-only lines,
3+
but failed on systems where open() defaults to 'ascii' because
4+
readline() internally reads and decodes far enough ahead to encounter
5+
a non-ascii character in CREDITS.txt.

0 commit comments

Comments
 (0)