11"Test , coverage 17%."
22
33from idlelib import iomenu
4- import builtins
5- import os
6- import tempfile
74import unittest
8- from unittest .mock import patch
5+ from unittest .mock import patch , mock_open
96from test .support import requires
107from tkinter import Tk
118from 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
156139def _extension_in_filetypes (extension ):
0 commit comments