mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			128 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Test idlelib.configdialog.
 | 
						|
 | 
						|
Half the class creates dialog, half works with user customizations.
 | 
						|
Coverage: 46% just by creating dialog, 56% with current tests.
 | 
						|
"""
 | 
						|
from idlelib.configdialog import ConfigDialog, idleConf  # test import
 | 
						|
from test.support import requires
 | 
						|
requires('gui')
 | 
						|
from tkinter import Tk
 | 
						|
import unittest
 | 
						|
import idlelib.config as config
 | 
						|
 | 
						|
# Tests should not depend on fortuitous user configurations.
 | 
						|
# They must not affect actual user .cfg files.
 | 
						|
# Use solution from test_config: empty parsers with no filename.
 | 
						|
usercfg = idleConf.userCfg
 | 
						|
testcfg = {
 | 
						|
    'main': config.IdleUserConfParser(''),
 | 
						|
    'highlight': config.IdleUserConfParser(''),
 | 
						|
    'keys': config.IdleUserConfParser(''),
 | 
						|
    'extensions': config.IdleUserConfParser(''),
 | 
						|
}
 | 
						|
 | 
						|
# ConfigDialog.changedItems is a 3-level hierarchical dictionary of
 | 
						|
# pending changes that mirrors the multilevel user config dict.
 | 
						|
# For testing, record args in a list for comparison with expected.
 | 
						|
changes = []
 | 
						|
class TestDialog(ConfigDialog):
 | 
						|
    def AddChangedItem(self, *args):
 | 
						|
        changes.append(args)
 | 
						|
 | 
						|
def setUpModule():
 | 
						|
    global root, configure
 | 
						|
    idleConf.userCfg = testcfg
 | 
						|
    root = Tk()
 | 
						|
    root.withdraw()
 | 
						|
    configure = TestDialog(root, 'Test', _utest=True)
 | 
						|
 | 
						|
 | 
						|
def tearDownModule():
 | 
						|
    global root, configure
 | 
						|
    idleConf.userCfg = testcfg
 | 
						|
    configure.remove_var_callbacks()
 | 
						|
    del configure
 | 
						|
    root.update_idletasks()
 | 
						|
    root.destroy()
 | 
						|
    del root
 | 
						|
 | 
						|
 | 
						|
class FontTabTest(unittest.TestCase):
 | 
						|
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        changes.clear()
 | 
						|
 | 
						|
    def test_font(self):
 | 
						|
        # Set values guaranteed not to be defaults.
 | 
						|
        dfont = idleConf.GetFont(root, 'main', 'EditorWindow')
 | 
						|
        dsize = str(dfont[1])
 | 
						|
        dbold = dfont[2] == 'bold'
 | 
						|
        configure.fontName.set('Test Font')
 | 
						|
        expected = [
 | 
						|
            ('main', 'EditorWindow', 'font', 'Test Font'),
 | 
						|
            ('main', 'EditorWindow', 'font-size', dsize),
 | 
						|
            ('main', 'EditorWindow', 'font-bold', dbold)]
 | 
						|
        self.assertEqual(changes, expected)
 | 
						|
        changes.clear()
 | 
						|
        configure.fontSize.set(20)
 | 
						|
        expected = [
 | 
						|
            ('main', 'EditorWindow', 'font', 'Test Font'),
 | 
						|
            ('main', 'EditorWindow', 'font-size', '20'),
 | 
						|
            ('main', 'EditorWindow', 'font-bold', dbold)]
 | 
						|
        self.assertEqual(changes, expected)
 | 
						|
        changes.clear()
 | 
						|
        configure.fontBold.set(not dbold)
 | 
						|
        expected = [
 | 
						|
            ('main', 'EditorWindow', 'font', 'Test Font'),
 | 
						|
            ('main', 'EditorWindow', 'font-size', '20'),
 | 
						|
            ('main', 'EditorWindow', 'font-bold', not dbold)]
 | 
						|
        self.assertEqual(changes, expected)
 | 
						|
 | 
						|
    #def test_sample(self): pass  # TODO
 | 
						|
 | 
						|
    def test_tabspace(self):
 | 
						|
        configure.spaceNum.set(6)
 | 
						|
        self.assertEqual(changes, [('main', 'Indent', 'num-spaces', 6)])
 | 
						|
 | 
						|
 | 
						|
class HighlightTest(unittest.TestCase):
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        changes.clear()
 | 
						|
 | 
						|
    #def test_colorchoose(self): pass  # TODO
 | 
						|
 | 
						|
 | 
						|
class KeysTest(unittest.TestCase):
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        changes.clear()
 | 
						|
 | 
						|
 | 
						|
class GeneralTest(unittest.TestCase):
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        changes.clear()
 | 
						|
 | 
						|
    def test_startup(self):
 | 
						|
        configure.radioStartupEdit.invoke()
 | 
						|
        self.assertEqual(changes,
 | 
						|
                         [('main', 'General', 'editor-on-startup', 1)])
 | 
						|
 | 
						|
    def test_autosave(self):
 | 
						|
        configure.radioSaveAuto.invoke()
 | 
						|
        self.assertEqual(changes, [('main', 'General', 'autosave', 1)])
 | 
						|
 | 
						|
    def test_editor_size(self):
 | 
						|
        configure.entryWinHeight.insert(0, '1')
 | 
						|
        self.assertEqual(changes, [('main', 'EditorWindow', 'height', '140')])
 | 
						|
        changes.clear()
 | 
						|
        configure.entryWinWidth.insert(0, '1')
 | 
						|
        self.assertEqual(changes, [('main', 'EditorWindow', 'width', '180')])
 | 
						|
 | 
						|
    #def test_help_sources(self): pass  # TODO
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    unittest.main(verbosity=2)
 |