@@ -57,6 +57,130 @@ def test_fixnewlines_end(self):
5757 eq (text .get ('1.0' , 'end-1c' ), 'a\n ' )
5858 eq (fix (), 'a' + io .eol_convention )
5959
60+ def test_reload_no_file (self ):
61+ # Test reload when no file is associated
62+ import tempfile
63+ import os
64+ from unittest .mock import Mock
65+
66+ io = self .io
67+ # Ensure no filename is set
68+ io .filename = None
69+
70+ # Mock the messagebox.showinfo
71+ orig_showinfo = iomenu .messagebox .showinfo
72+ showinfo_called = []
73+ def mock_showinfo (* args , ** kwargs ):
74+ showinfo_called .append ((args , kwargs ))
75+ iomenu .messagebox .showinfo = mock_showinfo
76+
77+ try :
78+ result = io .reload (None )
79+ self .assertEqual (result , "break" )
80+ self .assertEqual (len (showinfo_called ), 1 )
81+ self .assertIn ("No File" , showinfo_called [0 ][0 ])
82+ finally :
83+ iomenu .messagebox .showinfo = orig_showinfo
84+
85+ def test_reload_with_file (self ):
86+ # Test reload with an actual file
87+ import tempfile
88+ import os
89+
90+ io = self .io
91+ text = io .editwin .text
92+
93+ # Create a temporary file
94+ with tempfile .NamedTemporaryFile (mode = 'w' , delete = False , suffix = '.py' ) as f :
95+ f .write ("# Original content\n " )
96+ temp_filename = f .name
97+
98+ try :
99+ # Load the file
100+ io .loadfile (temp_filename )
101+ self .assertEqual (text .get ('1.0' , 'end-1c' ), "# Original content\n " )
102+
103+ # Modify the file content externally
104+ with open (temp_filename , 'w' ) as f :
105+ f .write ("# Modified content\n " )
106+
107+ # Reload should update the content
108+ result = io .reload (None )
109+ self .assertEqual (result , "break" )
110+ self .assertEqual (text .get ('1.0' , 'end-1c' ), "# Modified content\n " )
111+ finally :
112+ os .unlink (temp_filename )
113+
114+ def test_reload_with_unsaved_changes_cancel (self ):
115+ # Test reload with unsaved changes and user cancels
116+ import tempfile
117+ import os
118+
119+ io = self .io
120+ text = io .editwin .text
121+
122+ # Create a temporary file
123+ with tempfile .NamedTemporaryFile (mode = 'w' , delete = False , suffix = '.py' ) as f :
124+ f .write ("# Original content\n " )
125+ temp_filename = f .name
126+
127+ try :
128+ # Load the file
129+ io .loadfile (temp_filename )
130+
131+ # Make unsaved changes
132+ text .insert ('end-1c' , "\n # Unsaved change" )
133+ io .set_saved (False )
134+
135+ # Mock askokcancel to return False (cancel)
136+ orig_askokcancel = iomenu .messagebox .askokcancel
137+ iomenu .messagebox .askokcancel = lambda * args , ** kwargs : False
138+
139+ try :
140+ result = io .reload (None )
141+ self .assertEqual (result , "break" )
142+ # Content should not change
143+ self .assertIn ("# Unsaved change" , text .get ('1.0' , 'end-1c' ))
144+ finally :
145+ iomenu .messagebox .askokcancel = orig_askokcancel
146+ finally :
147+ os .unlink (temp_filename )
148+
149+ def test_reload_with_unsaved_changes_confirm (self ):
150+ # Test reload with unsaved changes and user confirms
151+ import tempfile
152+ import os
153+
154+ io = self .io
155+ text = io .editwin .text
156+
157+ # Create a temporary file
158+ with tempfile .NamedTemporaryFile (mode = 'w' , delete = False , suffix = '.py' ) as f :
159+ f .write ("# Original content\n " )
160+ temp_filename = f .name
161+
162+ try :
163+ # Load the file
164+ io .loadfile (temp_filename )
165+
166+ # Make unsaved changes
167+ text .insert ('end-1c' , "\n # Unsaved change" )
168+ io .set_saved (False )
169+
170+ # Mock askokcancel to return True (confirm)
171+ orig_askokcancel = iomenu .messagebox .askokcancel
172+ iomenu .messagebox .askokcancel = lambda * args , ** kwargs : True
173+
174+ try :
175+ result = io .reload (None )
176+ self .assertEqual (result , "break" )
177+ # Content should be reverted to original
178+ self .assertEqual (text .get ('1.0' , 'end-1c' ), "# Original content\n " )
179+ finally :
180+ iomenu .messagebox .askokcancel = orig_askokcancel
181+ finally :
182+ os .unlink (temp_filename )
183+
60184
61185def _extension_in_filetypes (extension ):
62186 return any (
0 commit comments