Skip to content

Commit fe997ec

Browse files
committed
rewrite tests
1 parent bd28bb4 commit fe997ec

File tree

1 file changed

+37
-54
lines changed

1 file changed

+37
-54
lines changed

Lib/idlelib/idle_test/test_iomenu.py

Lines changed: 37 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
"Test , coverage 17%."
22

33
from idlelib import iomenu
4-
import builtins
5-
import os
6-
import tempfile
74
import unittest
8-
from unittest.mock import patch
5+
from unittest.mock import patch, mock_open
96
from test.support import requires
107
from tkinter import Tk
118
from idlelib.editor import EditorWindow
@@ -63,12 +60,9 @@ def test_fixnewlines_end(self):
6360

6461
def test_reload_no_file(self):
6562
# Test reload when no file is associated
66-
6763
io = self.io
68-
# Ensure no filename is set
6964
io.filename = None
7065

71-
# Mock the messagebox.showinfo using unittest.mock
7266
with patch.object(iomenu.messagebox, 'showinfo') as mock_showinfo:
7367
result = io.reload(None)
7468
self.assertEqual(result, "break")
@@ -78,79 +72,68 @@ def test_reload_no_file(self):
7872

7973
def test_reload_with_file(self):
8074
# Test reload with an actual file
81-
8275
io = self.io
8376
text = io.editwin.text
77+
io.filename = "/dummy/path/test.py"
8478

85-
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.py') as f:
86-
f.write("# Original content\n")
87-
temp_filename = f.name
88-
self.addCleanup(os.unlink, temp_filename)
79+
original_content = "# Original content\n"
80+
modified_content = "# Modified content\n"
8981

90-
# Load the file
91-
io.loadfile(temp_filename)
92-
self.assertEqual(text.get('1.0', 'end-1c'), "# Original content\n")
82+
m = mock_open()
83+
m.side_effect = [
84+
mock_open(read_data=original_content).return_value,
85+
mock_open(read_data=modified_content).return_value,
86+
]
9387

94-
# Modify the file content externally
95-
with builtins.open(temp_filename, 'w') as f:
96-
f.write("# Modified content\n")
88+
with patch('builtins.open', m):
89+
io.loadfile(io.filename)
90+
self.assertEqual(text.get('1.0', 'end-1c'), original_content)
91+
result = io.reload(None)
9792

98-
# Reload should update the content
99-
result = io.reload(None)
10093
self.assertEqual(result, "break")
101-
self.assertEqual(text.get('1.0', 'end-1c'), "# Modified content\n")
94+
self.assertEqual(text.get('1.0', 'end-1c'), modified_content)
10295

10396
def test_reload_with_unsaved_changes_cancel(self):
10497
# Test reload with unsaved changes and user cancels
105-
10698
io = self.io
10799
text = io.editwin.text
100+
io.filename = "/dummy/path/test.py"
101+
original_content = "# Original content\n"
102+
unsaved_content = original_content + "\n# Unsaved change"
108103

109-
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.py') as f:
110-
f.write("# Original content\n")
111-
temp_filename = f.name
112-
self.addCleanup(os.unlink, temp_filename)
113-
114-
# Load the file
115-
io.loadfile(temp_filename)
104+
# Mock the initial file load.
105+
with patch('builtins.open', mock_open(read_data=original_content)):
106+
io.loadfile(io.filename)
116107

117-
# Make unsaved changes
118-
text.insert('end-1c', "\n# Unsaved change")
108+
text.insert('end', "\n# Unsaved change")
119109
io.set_saved(False)
120110

121-
# Mock askokcancel to return False (cancel)
122-
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=False) as mock_askokcancel:
111+
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=False) as mock_ask:
123112
result = io.reload(None)
124113
self.assertEqual(result, "break")
125-
# Content should not change
126-
self.assertIn("# Unsaved change", text.get('1.0', 'end-1c'))
127-
mock_askokcancel.assert_called_once()
114+
# Content should not change.
115+
self.assertEqual(text.get('1.0', 'end-1c'), unsaved_content)
116+
mock_ask.assert_called_once()
128117

129118
def test_reload_with_unsaved_changes_confirm(self):
130119
# Test reload with unsaved changes and user confirms
131-
132120
io = self.io
133121
text = io.editwin.text
122+
io.filename = "/dummy/path/test.py"
123+
original_content = "# Original content\n"
134124

135-
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.py') as f:
136-
f.write("# Original content\n")
137-
temp_filename = f.name
138-
self.addCleanup(os.unlink, temp_filename)
125+
with patch('builtins.open', mock_open(read_data=original_content)):
126+
io.loadfile(io.filename)
127+
text.insert('end', "\n# Unsaved change")
128+
io.set_saved(False)
139129

140-
# Load the file
141-
io.loadfile(temp_filename)
130+
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=True) as mock_ask:
131+
result = io.reload(None)
142132

143-
# Make unsaved changes
144-
text.insert('end-1c', "\n# Unsaved change")
145-
io.set_saved(False)
146-
147-
# Mock askokcancel to return True (confirm)
148-
with patch('idlelib.iomenu.messagebox.askokcancel', return_value=True) as mock_askokcancel:
149-
result = io.reload(None)
150-
self.assertEqual(result, "break")
151-
# Content should be reverted to original
152-
self.assertEqual(text.get('1.0', 'end-1c'), "# Original content\n")
153-
mock_askokcancel.assert_called_once()
133+
self.assertEqual(result, "break")
134+
# Content should be reverted to original.
135+
self.assertEqual(text.get('1.0', 'end-1c'), original_content)
136+
mock_ask.assert_called_once()
154137

155138

156139
def _extension_in_filetypes(extension):

0 commit comments

Comments
 (0)