rewrite tests

This commit is contained in:
Shamil Abdulaev 2025-11-16 01:32:49 +03:00
parent bd28bb4471
commit fe997ec485
No known key found for this signature in database
GPG key ID: F9F7726024C005E7

View file

@ -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):