Skip to content

Commit

Permalink
bpo-32826: Add "encoding=utf-8" to open() in idle_test/test_help_abou…
Browse files Browse the repository at this point in the history
…t. (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.
  • Loading branch information
terryjreedy committed Feb 12, 2018
1 parent 7766b96 commit f34e03e
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 25 deletions.
52 changes: 27 additions & 25 deletions Lib/idlelib/idle_test/test_help_about.py
Expand Up @@ -50,35 +50,37 @@ def test_dialog_logo(self):
def test_printer_buttons(self):
"""Test buttons whose commands use printer function."""
dialog = self.dialog
button_sources = [(dialog.py_license, license),
(dialog.py_copyright, copyright),
(dialog.py_credits, credits)]

for button, printer in button_sources:
printer._Printer__setup()
button.invoke()
get = dialog._current_textview.viewframe.textframe.text.get
self.assertEqual(printer._Printer__lines[0], get('1.0', '1.end'))
self.assertEqual(
printer._Printer__lines[1], get('2.0', '2.end'))
dialog._current_textview.destroy()
button_sources = [(dialog.py_license, license, 'license'),
(dialog.py_copyright, copyright, 'copyright'),
(dialog.py_credits, credits, 'credits')]

for button, printer, name in button_sources:
with self.subTest(name=name):
printer._Printer__setup()
button.invoke()
get = dialog._current_textview.viewframe.textframe.text.get
lines = printer._Printer__lines
self.assertEqual(lines[0], get('1.0', '1.end'))
self.assertEqual(lines[1], get('2.0', '2.end'))
dialog._current_textview.destroy()

def test_file_buttons(self):
"""Test buttons that display files."""
dialog = self.dialog
button_sources = [(self.dialog.readme, 'README.txt'),
(self.dialog.idle_news, 'NEWS.txt'),
(self.dialog.idle_credits, 'CREDITS.txt')]

for button, filename in button_sources:
button.invoke()
fn = findfile(filename, subdir='idlelib')
get = dialog._current_textview.viewframe.textframe.text.get
with open(fn) as f:
self.assertEqual(f.readline().strip(), get('1.0', '1.end'))
f.readline()
self.assertEqual(f.readline().strip(), get('3.0', '3.end'))
dialog._current_textview.destroy()
button_sources = [(self.dialog.readme, 'README.txt', 'readme'),
(self.dialog.idle_news, 'NEWS.txt', 'news'),
(self.dialog.idle_credits, 'CREDITS.txt', 'credits')]

for button, filename, name in button_sources:
with self.subTest(name=name):
button.invoke()
fn = findfile(filename, subdir='idlelib')
get = dialog._current_textview.viewframe.textframe.text.get
with open(fn, encoding='utf-8') as f:
self.assertEqual(f.readline().strip(), get('1.0', '1.end'))
f.readline()
self.assertEqual(f.readline().strip(), get('3.0', '3.end'))
dialog._current_textview.destroy()


class DefaultTitleTest(unittest.TestCase):
Expand Down
@@ -0,0 +1,5 @@
Add "encoding=utf-8" to open() in IDLE's test_help_about.
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.

0 comments on commit f34e03e

Please sign in to comment.