mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
[3.6] bpo-31004: IDLE: Factor out FontPage class from configdialog (step 1) (GH-2905) (#2950)
The slightly modified tests continue to pass. The General test
broken by the switch to Notebook is fixed.
Patch mostly by Cheryl Sabella.
(cherry picked from commit 9397e2a
)
This commit is contained in:
parent
c9c85321df
commit
7582226a92
3 changed files with 271 additions and 239 deletions
|
@ -9,7 +9,7 @@ requires('gui')
|
|||
import unittest
|
||||
from unittest import mock
|
||||
from idlelib.idle_test.mock_idle import Func
|
||||
from tkinter import Tk, IntVar, BooleanVar, DISABLED, NORMAL
|
||||
from tkinter import Tk, Frame, IntVar, BooleanVar, DISABLED, NORMAL
|
||||
from idlelib import config
|
||||
from idlelib.configdialog import idleConf, changes, tracers
|
||||
|
||||
|
@ -47,7 +47,7 @@ def tearDownModule():
|
|||
del root
|
||||
|
||||
|
||||
class FontTest(unittest.TestCase):
|
||||
class FontPageTest(unittest.TestCase):
|
||||
"""Test that font widgets enable users to make font changes.
|
||||
|
||||
Test that widget actions set vars, that var changes add three
|
||||
|
@ -56,11 +56,15 @@ class FontTest(unittest.TestCase):
|
|||
"""
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
dialog.set_samples = Func() # Mask instance method.
|
||||
page = cls.page = dialog.fontpage
|
||||
#dialog.note.insert(0, page, text='copy')
|
||||
#dialog.note.add(page, text='copyfgfg')
|
||||
dialog.note.select(page)
|
||||
page.set_samples = Func() # Mask instance method.
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
del dialog.set_samples # Unmask instance method.
|
||||
del cls.page.set_samples # Unmask instance method.
|
||||
|
||||
def setUp(self):
|
||||
changes.clear()
|
||||
|
@ -68,7 +72,8 @@ class FontTest(unittest.TestCase):
|
|||
def test_load_font_cfg(self):
|
||||
# Leave widget load test to human visual check.
|
||||
# TODO Improve checks when add IdleConf.get_font_values.
|
||||
d = dialog
|
||||
tracers.detach()
|
||||
d = self.page
|
||||
d.font_name.set('Fake')
|
||||
d.font_size.set('1')
|
||||
d.font_bold.set(True)
|
||||
|
@ -77,16 +82,17 @@ class FontTest(unittest.TestCase):
|
|||
self.assertNotEqual(d.font_name.get(), 'Fake')
|
||||
self.assertNotEqual(d.font_size.get(), '1')
|
||||
self.assertFalse(d.font_bold.get())
|
||||
self.assertEqual(d.set_samples.called, 3)
|
||||
self.assertEqual(d.set_samples.called, 1)
|
||||
tracers.attach()
|
||||
|
||||
def test_fontlist_key(self):
|
||||
# Up and Down keys should select a new font.
|
||||
|
||||
if dialog.fontlist.size() < 2:
|
||||
cls.skipTest('need at least 2 fonts')
|
||||
fontlist = dialog.fontlist
|
||||
d = self.page
|
||||
if d.fontlist.size() < 2:
|
||||
self.skipTest('need at least 2 fonts')
|
||||
fontlist = d.fontlist
|
||||
fontlist.activate(0)
|
||||
font = dialog.fontlist.get('active')
|
||||
font = d.fontlist.get('active')
|
||||
|
||||
# Test Down key.
|
||||
fontlist.focus_force()
|
||||
|
@ -96,7 +102,7 @@ class FontTest(unittest.TestCase):
|
|||
|
||||
down_font = fontlist.get('active')
|
||||
self.assertNotEqual(down_font, font)
|
||||
self.assertIn(dialog.font_name.get(), down_font.lower())
|
||||
self.assertIn(d.font_name.get(), down_font.lower())
|
||||
|
||||
# Test Up key.
|
||||
fontlist.focus_force()
|
||||
|
@ -106,14 +112,14 @@ class FontTest(unittest.TestCase):
|
|||
|
||||
up_font = fontlist.get('active')
|
||||
self.assertEqual(up_font, font)
|
||||
self.assertIn(dialog.font_name.get(), up_font.lower())
|
||||
self.assertIn(d.font_name.get(), up_font.lower())
|
||||
|
||||
def test_fontlist_mouse(self):
|
||||
# Click on item should select that item.
|
||||
|
||||
if dialog.fontlist.size() < 2:
|
||||
d = self.page
|
||||
if d.fontlist.size() < 2:
|
||||
cls.skipTest('need at least 2 fonts')
|
||||
fontlist = dialog.fontlist
|
||||
fontlist = d.fontlist
|
||||
fontlist.activate(0)
|
||||
|
||||
# Select next item in listbox
|
||||
|
@ -129,17 +135,17 @@ class FontTest(unittest.TestCase):
|
|||
font1 = fontlist.get(1)
|
||||
select_font = fontlist.get('anchor')
|
||||
self.assertEqual(select_font, font1)
|
||||
self.assertIn(dialog.font_name.get(), font1.lower())
|
||||
self.assertIn(d.font_name.get(), font1.lower())
|
||||
|
||||
def test_sizelist(self):
|
||||
# Click on number shouod select that number
|
||||
d = dialog
|
||||
d = self.page
|
||||
d.sizelist.variable.set(40)
|
||||
self.assertEqual(d.font_size.get(), '40')
|
||||
|
||||
def test_bold_toggle(self):
|
||||
# Click on checkbutton should invert it.
|
||||
d = dialog
|
||||
d = self.page
|
||||
d.font_bold.set(False)
|
||||
d.bold_toggle.invoke()
|
||||
self.assertTrue(d.font_bold.get())
|
||||
|
@ -154,7 +160,7 @@ class FontTest(unittest.TestCase):
|
|||
default_font = idleConf.GetFont(root, 'main', 'EditorWindow')
|
||||
default_size = str(default_font[1])
|
||||
default_bold = default_font[2] == 'bold'
|
||||
d = dialog
|
||||
d = self.page
|
||||
d.font_size.set(default_size)
|
||||
d.font_bold.set(default_bold)
|
||||
d.set_samples.called = 0
|
||||
|
@ -183,7 +189,7 @@ class FontTest(unittest.TestCase):
|
|||
self.assertEqual(d.set_samples.called, 3)
|
||||
|
||||
def test_set_samples(self):
|
||||
d = dialog
|
||||
d = self.page
|
||||
del d.set_samples # Unmask method for test
|
||||
d.font_sample, d.highlight_sample = {}, {}
|
||||
d.font_name.set('test')
|
||||
|
@ -201,16 +207,21 @@ class FontTest(unittest.TestCase):
|
|||
|
||||
class IndentTest(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
cls.page = dialog.fontpage
|
||||
|
||||
def test_load_tab_cfg(self):
|
||||
d = dialog
|
||||
d = self.page
|
||||
d.space_num.set(16)
|
||||
d.load_tab_cfg()
|
||||
self.assertEqual(d.space_num.get(), 4)
|
||||
|
||||
def test_indent_scale(self):
|
||||
d = self.page
|
||||
changes.clear()
|
||||
dialog.indent_scale.set(26)
|
||||
self.assertEqual(dialog.space_num.get(), 16)
|
||||
d.indent_scale.set(20)
|
||||
self.assertEqual(d.space_num.get(), 16)
|
||||
self.assertEqual(mainpage, {'Indent': {'num-spaces': '16'}})
|
||||
|
||||
|
||||
|
@ -234,8 +245,10 @@ class GeneralTest(unittest.TestCase):
|
|||
"""
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
# Mask instance methods used by help functions.
|
||||
d = dialog
|
||||
# Select General tab so can force focus on helplist.
|
||||
d.note.select(d.genpage)
|
||||
# Mask instance methods used by help functions.
|
||||
d.set = d.set_add_delete_state = Func()
|
||||
d.upc = d.update_help_changes = Func()
|
||||
|
||||
|
@ -311,9 +324,8 @@ class GeneralTest(unittest.TestCase):
|
|||
helplist.event_generate('<Motion>', x=x, y=y)
|
||||
helplist.event_generate('<Button-1>', x=x, y=y)
|
||||
helplist.event_generate('<ButtonRelease-1>', x=x, y=y)
|
||||
# The following fail after the switch to
|
||||
# self.assertEqual(helplist.get('anchor'), 'source')
|
||||
# self.assertTrue(d.set.called)
|
||||
self.assertEqual(helplist.get('anchor'), 'source')
|
||||
self.assertTrue(d.set.called)
|
||||
self.assertFalse(d.upc.called)
|
||||
|
||||
def test_set_add_delete_state(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue