mirror of
https://github.com/python/cpython.git
synced 2025-12-08 06:10:17 +00:00
rewrite tests
This commit is contained in:
parent
bd28bb4471
commit
fe997ec485
1 changed files with 37 additions and 54 deletions
|
|
@ -1,11 +1,8 @@
|
||||||
"Test , coverage 17%."
|
"Test , coverage 17%."
|
||||||
|
|
||||||
from idlelib import iomenu
|
from idlelib import iomenu
|
||||||
import builtins
|
|
||||||
import os
|
|
||||||
import tempfile
|
|
||||||
import unittest
|
import unittest
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch, mock_open
|
||||||
from test.support import requires
|
from test.support import requires
|
||||||
from tkinter import Tk
|
from tkinter import Tk
|
||||||
from idlelib.editor import EditorWindow
|
from idlelib.editor import EditorWindow
|
||||||
|
|
@ -63,12 +60,9 @@ def test_fixnewlines_end(self):
|
||||||
|
|
||||||
def test_reload_no_file(self):
|
def test_reload_no_file(self):
|
||||||
# Test reload when no file is associated
|
# Test reload when no file is associated
|
||||||
|
|
||||||
io = self.io
|
io = self.io
|
||||||
# Ensure no filename is set
|
|
||||||
io.filename = None
|
io.filename = None
|
||||||
|
|
||||||
# Mock the messagebox.showinfo using unittest.mock
|
|
||||||
with patch.object(iomenu.messagebox, 'showinfo') as mock_showinfo:
|
with patch.object(iomenu.messagebox, 'showinfo') as mock_showinfo:
|
||||||
result = io.reload(None)
|
result = io.reload(None)
|
||||||
self.assertEqual(result, "break")
|
self.assertEqual(result, "break")
|
||||||
|
|
@ -78,79 +72,68 @@ def test_reload_no_file(self):
|
||||||
|
|
||||||
def test_reload_with_file(self):
|
def test_reload_with_file(self):
|
||||||
# Test reload with an actual file
|
# Test reload with an actual file
|
||||||
|
|
||||||
io = self.io
|
io = self.io
|
||||||
text = io.editwin.text
|
text = io.editwin.text
|
||||||
|
io.filename = "/dummy/path/test.py"
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.py') as f:
|
original_content = "# Original content\n"
|
||||||
f.write("# Original content\n")
|
modified_content = "# Modified content\n"
|
||||||
temp_filename = f.name
|
|
||||||
self.addCleanup(os.unlink, temp_filename)
|
|
||||||
|
|
||||||
# Load the file
|
m = mock_open()
|
||||||
io.loadfile(temp_filename)
|
m.side_effect = [
|
||||||
self.assertEqual(text.get('1.0', 'end-1c'), "# Original content\n")
|
mock_open(read_data=original_content).return_value,
|
||||||
|
mock_open(read_data=modified_content).return_value,
|
||||||
|
]
|
||||||
|
|
||||||
# Modify the file content externally
|
with patch('builtins.open', m):
|
||||||
with builtins.open(temp_filename, 'w') as f:
|
io.loadfile(io.filename)
|
||||||
f.write("# Modified content\n")
|
self.assertEqual(text.get('1.0', 'end-1c'), original_content)
|
||||||
|
result = io.reload(None)
|
||||||
|
|
||||||
# Reload should update the content
|
|
||||||
result = io.reload(None)
|
|
||||||
self.assertEqual(result, "break")
|
self.assertEqual(result, "break")
|
||||||
self.assertEqual(text.get('1.0', 'end-1c'), "# Modified content\n")
|
self.assertEqual(text.get('1.0', 'end-1c'), modified_content)
|
||||||
|
|
||||||
def test_reload_with_unsaved_changes_cancel(self):
|
def test_reload_with_unsaved_changes_cancel(self):
|
||||||
# Test reload with unsaved changes and user cancels
|
# Test reload with unsaved changes and user cancels
|
||||||
|
|
||||||
io = self.io
|
io = self.io
|
||||||
text = io.editwin.text
|
text = io.editwin.text
|
||||||
|
io.filename = "/dummy/path/test.py"
|
||||||
|
original_content = "# Original content\n"
|
||||||
|
unsaved_content = original_content + "\n# Unsaved change"
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.py') as f:
|
# Mock the initial file load.
|
||||||
f.write("# Original content\n")
|
with patch('builtins.open', mock_open(read_data=original_content)):
|
||||||
temp_filename = f.name
|
io.loadfile(io.filename)
|
||||||
self.addCleanup(os.unlink, temp_filename)
|
|
||||||
|
|
||||||
# Load the file
|
text.insert('end', "\n# Unsaved change")
|
||||||
io.loadfile(temp_filename)
|
|
||||||
|
|
||||||
# Make unsaved changes
|
|
||||||
text.insert('end-1c', "\n# Unsaved change")
|
|
||||||
io.set_saved(False)
|
io.set_saved(False)
|
||||||
|
|
||||||
# Mock askokcancel to return False (cancel)
|
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=False) as mock_ask:
|
||||||
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=False) as mock_askokcancel:
|
|
||||||
result = io.reload(None)
|
result = io.reload(None)
|
||||||
self.assertEqual(result, "break")
|
self.assertEqual(result, "break")
|
||||||
# Content should not change
|
# Content should not change.
|
||||||
self.assertIn("# Unsaved change", text.get('1.0', 'end-1c'))
|
self.assertEqual(text.get('1.0', 'end-1c'), unsaved_content)
|
||||||
mock_askokcancel.assert_called_once()
|
mock_ask.assert_called_once()
|
||||||
|
|
||||||
def test_reload_with_unsaved_changes_confirm(self):
|
def test_reload_with_unsaved_changes_confirm(self):
|
||||||
# Test reload with unsaved changes and user confirms
|
# Test reload with unsaved changes and user confirms
|
||||||
|
|
||||||
io = self.io
|
io = self.io
|
||||||
text = io.editwin.text
|
text = io.editwin.text
|
||||||
|
io.filename = "/dummy/path/test.py"
|
||||||
|
original_content = "# Original content\n"
|
||||||
|
|
||||||
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.py') as f:
|
with patch('builtins.open', mock_open(read_data=original_content)):
|
||||||
f.write("# Original content\n")
|
io.loadfile(io.filename)
|
||||||
temp_filename = f.name
|
text.insert('end', "\n# Unsaved change")
|
||||||
self.addCleanup(os.unlink, temp_filename)
|
io.set_saved(False)
|
||||||
|
|
||||||
# Load the file
|
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=True) as mock_ask:
|
||||||
io.loadfile(temp_filename)
|
result = io.reload(None)
|
||||||
|
|
||||||
# Make unsaved changes
|
self.assertEqual(result, "break")
|
||||||
text.insert('end-1c', "\n# Unsaved change")
|
# Content should be reverted to original.
|
||||||
io.set_saved(False)
|
self.assertEqual(text.get('1.0', 'end-1c'), original_content)
|
||||||
|
mock_ask.assert_called_once()
|
||||||
# Mock askokcancel to return True (confirm)
|
|
||||||
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=True) as mock_askokcancel:
|
|
||||||
result = io.reload(None)
|
|
||||||
self.assertEqual(result, "break")
|
|
||||||
# Content should be reverted to original
|
|
||||||
self.assertEqual(text.get('1.0', 'end-1c'), "# Original content\n")
|
|
||||||
mock_askokcancel.assert_called_once()
|
|
||||||
|
|
||||||
|
|
||||||
def _extension_in_filetypes(extension):
|
def _extension_in_filetypes(extension):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue