summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/idle_test/test_query.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/idlelib/idle_test/test_query.py')
-rw-r--r--Lib/idlelib/idle_test/test_query.py405
1 files changed, 0 insertions, 405 deletions
diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py
deleted file mode 100644
index f957585..0000000
--- a/Lib/idlelib/idle_test/test_query.py
+++ /dev/null
@@ -1,405 +0,0 @@
-"""Test query, coverage 93%).
-
-Non-gui tests for Query, SectionName, ModuleName, and HelpSource use
-dummy versions that extract the non-gui methods and add other needed
-attributes. GUI tests create an instance of each class and simulate
-entries and button clicks. Subclass tests only target the new code in
-the subclass definition.
-
-The appearance of the widgets is checked by the Query and
-HelpSource htests. These are run by running query.py.
-"""
-from idlelib import query
-import unittest
-from test.support import requires
-from tkinter import Tk, END
-
-import sys
-from unittest import mock
-from idlelib.idle_test.mock_tk import Var
-
-
-# NON-GUI TESTS
-
-class QueryTest(unittest.TestCase):
- "Test Query base class."
-
- class Dummy_Query:
- # Test the following Query methods.
- entry_ok = query.Query.entry_ok
- ok = query.Query.ok
- cancel = query.Query.cancel
- # Add attributes and initialization needed for tests.
- def __init__(self, dummy_entry):
- self.entry = Var(value=dummy_entry)
- self.entry_error = {'text': ''}
- self.result = None
- self.destroyed = False
- def showerror(self, message):
- self.entry_error['text'] = message
- def destroy(self):
- self.destroyed = True
-
- def test_entry_ok_blank(self):
- dialog = self.Dummy_Query(' ')
- self.assertEqual(dialog.entry_ok(), None)
- self.assertEqual((dialog.result, dialog.destroyed), (None, False))
- self.assertIn('blank line', dialog.entry_error['text'])
-
- def test_entry_ok_good(self):
- dialog = self.Dummy_Query(' good ')
- Equal = self.assertEqual
- Equal(dialog.entry_ok(), 'good')
- Equal((dialog.result, dialog.destroyed), (None, False))
- Equal(dialog.entry_error['text'], '')
-
- def test_ok_blank(self):
- dialog = self.Dummy_Query('')
- dialog.entry.focus_set = mock.Mock()
- self.assertEqual(dialog.ok(), None)
- self.assertTrue(dialog.entry.focus_set.called)
- del dialog.entry.focus_set
- self.assertEqual((dialog.result, dialog.destroyed), (None, False))
-
- def test_ok_good(self):
- dialog = self.Dummy_Query('good')
- self.assertEqual(dialog.ok(), None)
- self.assertEqual((dialog.result, dialog.destroyed), ('good', True))
-
- def test_cancel(self):
- dialog = self.Dummy_Query('does not matter')
- self.assertEqual(dialog.cancel(), None)
- self.assertEqual((dialog.result, dialog.destroyed), (None, True))
-
-
-class SectionNameTest(unittest.TestCase):
- "Test SectionName subclass of Query."
-
- class Dummy_SectionName:
- entry_ok = query.SectionName.entry_ok # Function being tested.
- used_names = ['used']
- def __init__(self, dummy_entry):
- self.entry = Var(value=dummy_entry)
- self.entry_error = {'text': ''}
- def showerror(self, message):
- self.entry_error['text'] = message
-
- def test_blank_section_name(self):
- dialog = self.Dummy_SectionName(' ')
- self.assertEqual(dialog.entry_ok(), None)
- self.assertIn('no name', dialog.entry_error['text'])
-
- def test_used_section_name(self):
- dialog = self.Dummy_SectionName('used')
- self.assertEqual(dialog.entry_ok(), None)
- self.assertIn('use', dialog.entry_error['text'])
-
- def test_long_section_name(self):
- dialog = self.Dummy_SectionName('good'*8)
- self.assertEqual(dialog.entry_ok(), None)
- self.assertIn('longer than 30', dialog.entry_error['text'])
-
- def test_good_section_name(self):
- dialog = self.Dummy_SectionName(' good ')
- self.assertEqual(dialog.entry_ok(), 'good')
- self.assertEqual(dialog.entry_error['text'], '')
-
-
-class ModuleNameTest(unittest.TestCase):
- "Test ModuleName subclass of Query."
-
- class Dummy_ModuleName:
- entry_ok = query.ModuleName.entry_ok # Function being tested.
- text0 = ''
- def __init__(self, dummy_entry):
- self.entry = Var(value=dummy_entry)
- self.entry_error = {'text': ''}
- def showerror(self, message):
- self.entry_error['text'] = message
-
- def test_blank_module_name(self):
- dialog = self.Dummy_ModuleName(' ')
- self.assertEqual(dialog.entry_ok(), None)
- self.assertIn('no name', dialog.entry_error['text'])
-
- def test_bogus_module_name(self):
- dialog = self.Dummy_ModuleName('__name_xyz123_should_not_exist__')
- self.assertEqual(dialog.entry_ok(), None)
- self.assertIn('not found', dialog.entry_error['text'])
-
- def test_c_source_name(self):
- dialog = self.Dummy_ModuleName('itertools')
- self.assertEqual(dialog.entry_ok(), None)
- self.assertIn('source-based', dialog.entry_error['text'])
-
- def test_good_module_name(self):
- dialog = self.Dummy_ModuleName('idlelib')
- self.assertTrue(dialog.entry_ok().endswith('__init__.py'))
- self.assertEqual(dialog.entry_error['text'], '')
-
-
-# 3 HelpSource test classes each test one method.
-
-class HelpsourceBrowsefileTest(unittest.TestCase):
- "Test browse_file method of ModuleName subclass of Query."
-
- class Dummy_HelpSource:
- browse_file = query.HelpSource.browse_file
- pathvar = Var()
-
- def test_file_replaces_path(self):
- dialog = self.Dummy_HelpSource()
- # Path is widget entry, either '' or something.
- # Func return is file dialog return, either '' or something.
- # Func return should override widget entry.
- # We need all 4 combinations to test all (most) code paths.
- for path, func, result in (
- ('', lambda a,b,c:'', ''),
- ('', lambda a,b,c: __file__, __file__),
- ('htest', lambda a,b,c:'', 'htest'),
- ('htest', lambda a,b,c: __file__, __file__)):
- with self.subTest():
- dialog.pathvar.set(path)
- dialog.askfilename = func
- dialog.browse_file()
- self.assertEqual(dialog.pathvar.get(), result)
-
-
-class HelpsourcePathokTest(unittest.TestCase):
- "Test path_ok method of HelpSource subclass of Query."
-
- class Dummy_HelpSource:
- path_ok = query.HelpSource.path_ok
- def __init__(self, dummy_path):
- self.path = Var(value=dummy_path)
- self.path_error = {'text': ''}
- def showerror(self, message, widget=None):
- self.path_error['text'] = message
-
- orig_platform = query.platform # Set in test_path_ok_file.
- @classmethod
- def tearDownClass(cls):
- query.platform = cls.orig_platform
-
- def test_path_ok_blank(self):
- dialog = self.Dummy_HelpSource(' ')
- self.assertEqual(dialog.path_ok(), None)
- self.assertIn('no help file', dialog.path_error['text'])
-
- def test_path_ok_bad(self):
- dialog = self.Dummy_HelpSource(__file__ + 'bad-bad-bad')
- self.assertEqual(dialog.path_ok(), None)
- self.assertIn('not exist', dialog.path_error['text'])
-
- def test_path_ok_web(self):
- dialog = self.Dummy_HelpSource('')
- Equal = self.assertEqual
- for url in 'www.py.org', 'http://py.org':
- with self.subTest():
- dialog.path.set(url)
- self.assertEqual(dialog.path_ok(), url)
- self.assertEqual(dialog.path_error['text'], '')
-
- def test_path_ok_file(self):
- dialog = self.Dummy_HelpSource('')
- for platform, prefix in ('darwin', 'file://'), ('other', ''):
- with self.subTest():
- query.platform = platform
- dialog.path.set(__file__)
- self.assertEqual(dialog.path_ok(), prefix + __file__)
- self.assertEqual(dialog.path_error['text'], '')
-
-
-class HelpsourceEntryokTest(unittest.TestCase):
- "Test entry_ok method of HelpSource subclass of Query."
-
- class Dummy_HelpSource:
- entry_ok = query.HelpSource.entry_ok
- entry_error = {}
- path_error = {}
- def item_ok(self):
- return self.name
- def path_ok(self):
- return self.path
-
- def test_entry_ok_helpsource(self):
- dialog = self.Dummy_HelpSource()
- for name, path, result in ((None, None, None),
- (None, 'doc.txt', None),
- ('doc', None, None),
- ('doc', 'doc.txt', ('doc', 'doc.txt'))):
- with self.subTest():
- dialog.name, dialog.path = name, path
- self.assertEqual(dialog.entry_ok(), result)
-
-
-# 2 CustomRun test classes each test one method.
-
-class CustomRunCLIargsokTest(unittest.TestCase):
- "Test cli_ok method of the CustomRun subclass of Query."
-
- class Dummy_CustomRun:
- cli_args_ok = query.CustomRun.cli_args_ok
- def __init__(self, dummy_entry):
- self.entry = Var(value=dummy_entry)
- self.entry_error = {'text': ''}
- def showerror(self, message):
- self.entry_error['text'] = message
-
- def test_blank_args(self):
- dialog = self.Dummy_CustomRun(' ')
- self.assertEqual(dialog.cli_args_ok(), [])
-
- def test_invalid_args(self):
- dialog = self.Dummy_CustomRun("'no-closing-quote")
- self.assertEqual(dialog.cli_args_ok(), None)
- self.assertIn('No closing', dialog.entry_error['text'])
-
- def test_good_args(self):
- args = ['-n', '10', '--verbose', '-p', '/path', '--name']
- dialog = self.Dummy_CustomRun(' '.join(args) + ' "my name"')
- self.assertEqual(dialog.cli_args_ok(), args + ["my name"])
- self.assertEqual(dialog.entry_error['text'], '')
-
-
-class CustomRunEntryokTest(unittest.TestCase):
- "Test entry_ok method of the CustomRun subclass of Query."
-
- class Dummy_CustomRun:
- entry_ok = query.CustomRun.entry_ok
- entry_error = {}
- restartvar = Var()
- def cli_args_ok(self):
- return self.cli_args
-
- def test_entry_ok_customrun(self):
- dialog = self.Dummy_CustomRun()
- for restart in {True, False}:
- dialog.restartvar.set(restart)
- for cli_args, result in ((None, None),
- (['my arg'], (['my arg'], restart))):
- with self.subTest(restart=restart, cli_args=cli_args):
- dialog.cli_args = cli_args
- self.assertEqual(dialog.entry_ok(), result)
-
-
-# GUI TESTS
-
-class QueryGuiTest(unittest.TestCase):
-
- @classmethod
- def setUpClass(cls):
- requires('gui')
- cls.root = root = Tk()
- cls.root.withdraw()
- cls.dialog = query.Query(root, 'TEST', 'test', _utest=True)
- cls.dialog.destroy = mock.Mock()
-
- @classmethod
- def tearDownClass(cls):
- del cls.dialog.destroy
- del cls.dialog
- cls.root.destroy()
- del cls.root
-
- def setUp(self):
- self.dialog.entry.delete(0, 'end')
- self.dialog.result = None
- self.dialog.destroy.reset_mock()
-
- def test_click_ok(self):
- dialog = self.dialog
- dialog.entry.insert(0, 'abc')
- dialog.button_ok.invoke()
- self.assertEqual(dialog.result, 'abc')
- self.assertTrue(dialog.destroy.called)
-
- def test_click_blank(self):
- dialog = self.dialog
- dialog.button_ok.invoke()
- self.assertEqual(dialog.result, None)
- self.assertFalse(dialog.destroy.called)
-
- def test_click_cancel(self):
- dialog = self.dialog
- dialog.entry.insert(0, 'abc')
- dialog.button_cancel.invoke()
- self.assertEqual(dialog.result, None)
- self.assertTrue(dialog.destroy.called)
-
-
-class SectionnameGuiTest(unittest.TestCase):
-
- @classmethod
- def setUpClass(cls):
- requires('gui')
-
- def test_click_section_name(self):
- root = Tk()
- root.withdraw()
- dialog = query.SectionName(root, 'T', 't', {'abc'}, _utest=True)
- Equal = self.assertEqual
- self.assertEqual(dialog.used_names, {'abc'})
- dialog.entry.insert(0, 'okay')
- dialog.button_ok.invoke()
- self.assertEqual(dialog.result, 'okay')
- root.destroy()
-
-
-class ModulenameGuiTest(unittest.TestCase):
-
- @classmethod
- def setUpClass(cls):
- requires('gui')
-
- def test_click_module_name(self):
- root = Tk()
- root.withdraw()
- dialog = query.ModuleName(root, 'T', 't', 'idlelib', _utest=True)
- self.assertEqual(dialog.text0, 'idlelib')
- self.assertEqual(dialog.entry.get(), 'idlelib')
- dialog.button_ok.invoke()
- self.assertTrue(dialog.result.endswith('__init__.py'))
- root.destroy()
-
-
-class HelpsourceGuiTest(unittest.TestCase):
-
- @classmethod
- def setUpClass(cls):
- requires('gui')
-
- def test_click_help_source(self):
- root = Tk()
- root.withdraw()
- dialog = query.HelpSource(root, 'T', menuitem='__test__',
- filepath=__file__, _utest=True)
- Equal = self.assertEqual
- Equal(dialog.entry.get(), '__test__')
- Equal(dialog.path.get(), __file__)
- dialog.button_ok.invoke()
- prefix = "file://" if sys.platform == 'darwin' else ''
- Equal(dialog.result, ('__test__', prefix + __file__))
- root.destroy()
-
-
-class CustomRunGuiTest(unittest.TestCase):
-
- @classmethod
- def setUpClass(cls):
- requires('gui')
-
- def test_click_args(self):
- root = Tk()
- root.withdraw()
- dialog = query.CustomRun(root, 'Title',
- cli_args=['a', 'b=1'], _utest=True)
- self.assertEqual(dialog.entry.get(), 'a b=1')
- dialog.entry.insert(END, ' c')
- dialog.button_ok.invoke()
- self.assertEqual(dialog.result, (['a', 'b=1', 'c'], True))
- root.destroy()
-
-
-if __name__ == '__main__':
- unittest.main(verbosity=2, exit=False)