FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-151678: Add tests for tkinter.filedialog by serhiy-storchaka · Pull Request #151781 · python/cpython · GitHub

Repository navigation

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .py  (1) All 1 file type selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
73 changes: 73 additions & 0 deletions Lib/test/test_tkinter/test_filedialog.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import os
import unittest
from tkinter import filedialog
from tkinter.commondialog import Dialog
from test.support import requires, swap_attr
from test.test_tkinter.support import setUpModule # noqa: F401
from test.test_tkinter.support import AbstractTkTest

requires('gui')


class NativeDialogTest(AbstractTkTest, unittest.TestCase):
# Open, SaveAs and Directory wrap modal native dialogs. The _test_callback
# seam is called by show() just before the dialog would open; replacing it
# with a function that raises exercises show() without blocking on the
# dialog.

def check(self, dialog_class, command):
self.assertEqual(dialog_class.command, command)
master = None
def test_callback(dialog, parent):
nonlocal master
master = parent
raise ZeroDivisionError
with swap_attr(Dialog, '_test_callback', test_callback):
d = dialog_class(self.root, title='Test')
self.assertRaises(ZeroDivisionError, d.show)
self.assertIs(master, self.root)

def test_open(self):
self.check(filedialog.Open, 'tk_getOpenFile')

def test_saveas(self):
self.check(filedialog.SaveAs, 'tk_getSaveFile')

def test_directory(self):
self.check(filedialog.Directory, 'tk_chooseDirectory')


class FileDialogTest(AbstractTkTest, unittest.TestCase):
# The pure-Python FileDialog runs its own modal loop in go(); its logic is
# exercised here without entering the loop.

def test_selection(self):
d = filedialog.FileDialog(self.root)
d.directory = os.path.abspath(os.sep)
d.set_selection('spam.txt')
self.assertEqual(os.path.basename(d.get_selection()), 'spam.txt')

def test_filter(self):
d = filedialog.FileDialog(self.root)
d.set_filter(os.getcwd(), '*.py')
self.assertEqual(d.get_filter(), (os.getcwd(), '*.py'))

def test_ok_cancel(self):
d = filedialog.FileDialog(self.root)
d.directory = os.getcwd()
d.set_selection('spam.txt')
d.ok_command() # Accepts the current selection.
self.assertEqual(os.path.basename(d.how), 'spam.txt')
d.cancel_command() # Returns no selection.
self.assertIsNone(d.how)

def test_subclasses(self):
for cls in filedialog.LoadFileDialog, filedialog.SaveFileDialog:
with self.subTest(cls=cls.__name__):
d = cls(self.root)
self.assertIsInstance(d, filedialog.FileDialog)
self.assertEqual(d.top.title(), cls.title)


if __name__ == "__main__":
unittest.main()
Loading

Back | FazBrowse Home | New Git URL