@@ -45,13 +45,6 @@ def setUp(self):
4545 def tearDown (self ):
4646 print (f"[TEST END] { self ._testMethodName } \n " , flush = True )
4747
48- # -------------------------------------------------------------------------
49- # HELPER: The "Watchdog" Timer
50- # -------------------------------------------------------------------------
51- def _timeout_handler (self , signum , frame ):
52- raise TimeoutError (
53- "Test {self._testMethodName} took longer than 30s! Infinite Loop suspected." )
54-
5548 def run_module_safely (self , module_name ):
5649 """Imports and runs a module with a strict 30-second timeout."""
5750 # Set an alarm for 30 seconds (Works on Linux/GitHub Actions)
@@ -110,9 +103,9 @@ def side_effect(*args, **kwargs):
110103
111104 def test_01_k2400_iv_backend (self ):
112105 # GLOBAL PATCH for sleep is critical here
113- with patch ('pymeasure.instruments.keithley.Keithley2400' ) as MockInst , \
114- patch ('time.sleep' , side_effect = self .get_circuit_breaker (5 )) as mock_sleep :
115-
106+ with patch ('pymeasure.instruments.keithley.Keithley2400' ) as MockInst :
107+ mock_sleep = patch ('time.sleep' , side_effect = self .get_circuit_breaker (5 ))
108+ mock_sleep . start ()
116109 self .addCleanup (mock_sleep .stop )
117110
118111 spy = MockInst .return_value
@@ -123,7 +116,9 @@ def test_01_k2400_iv_backend(self):
123116 spy .enable_source .assert_called ()
124117
125118 def test_02_lakeshore_backend (self ):
126- with patch ('pyvisa.ResourceManager' ) as MockRM :
119+ with patch ('pyvisa.ResourceManager' ) as MockRM , \
120+ patch ('tkinter.Tk' ), \
121+ patch ('tkinter.filedialog.asksaveasfilename' , return_value = "test.csv" ):
127122 mock_sleep = patch ('time.sleep' , side_effect = self .get_circuit_breaker (15 ))
128123 mock_sleep .start ()
129124 self .addCleanup (mock_sleep .stop )
@@ -138,15 +133,14 @@ def test_02_lakeshore_backend(self):
138133
139134 with patch ('builtins.input' , side_effect = ['10' , '300' , '10' , '350' ]), \
140135 patch ('builtins.open' , mock_open ()), \
141- patch ('tkinter.filedialog.asksaveasfilename' , return_value = "test.csv" ), \
142136 patch ('matplotlib.pyplot.show' ), \
143137 patch ('matplotlib.pyplot.subplots' , return_value = (mock_fig , mock_ax )):
144138 self .run_module_safely (
145139 "Lakeshore_350_340.Backends.T_Control_L350_Simple_Backend_v10" )
146140
147141 def test_03_k6517b_pyro_backend (self ):
148142 with patch ('pymeasure.instruments.keithley.Keithley6517B' ) as MockInst :
149- mock_sleep = patch ('time.sleep' , side_effect = self .get_circuit_breaker (5 ))
143+ mock_sleep = patch ('time.sleep' , side_effect = self .get_circuit_breaker (10 ))
150144 mock_sleep .start ()
151145 self .addCleanup (mock_sleep .stop )
152146
@@ -158,9 +152,9 @@ def test_03_k6517b_pyro_backend(self):
158152
159153 def test_04_lcr_keysight_backend (self ):
160154 with patch ('pymeasure.instruments.agilent.AgilentE4980' ), \
161- patch ('pyvisa.ResourceManager' ) as MockRM , \
162- patch ('time.sleep' , side_effect = self .get_circuit_breaker (5 )) as mock_sleep :
163-
155+ patch ('pyvisa.ResourceManager' ) as MockRM :
156+ mock_sleep = patch ('time.sleep' , side_effect = self .get_circuit_breaker (5 ))
157+ mock_sleep . start ()
164158 self .addCleanup (mock_sleep .stop )
165159
166160 visa_spy = MockRM .return_value .open_resource .return_value
@@ -202,10 +196,10 @@ def test_06_delta_sensing(self):
202196 def test_07_lockin_backend (self ):
203197 with patch ('pyvisa.ResourceManager' ) as MockRM :
204198 mock_sleep = patch ('time.sleep' , side_effect = self .get_circuit_breaker (5 ))
199+ spy = MockRM .return_value .open_resource .return_value
205200 mock_sleep .start ()
206201 self .addCleanup (mock_sleep .stop )
207202
208- spy = MockRM .return_value .open_resource .return_value
209203 spy .query .side_effect = [
210204 "SRS,SR830,s/n12345,ver1.07" , # *IDN?
211205 "15" , # SENS?
@@ -217,10 +211,10 @@ def test_07_lockin_backend(self):
217211 def test_08_combined_2400_2182 (self ):
218212 # THIS WAS THE TEST CAUSING THE HANG
219213 # We suspect input mismatch or resource opening hang.
220- with patch ('pyvisa.ResourceManager' ) as MockRM , \
221- patch ('pymeasure.instruments.keithley.Keithley2400' ), \
222- patch ('time.sleep' , side_effect = self . get_circuit_breaker ( 10 )) as mock_sleep :
223-
214+ with patch ('pyvisa.ResourceManager' ) as MockRM :
215+ mock_sleep = patch ('time.sleep' , side_effect = self . get_circuit_breaker ( 10 ))
216+ mock_pymeasure = patch ('pymeasure.instruments.keithley.Keithley2400' )
217+ mock_pymeasure . start ()
224218 self .addCleanup (mock_sleep .stop )
225219
226220 rm = MockRM .return_value
@@ -231,11 +225,12 @@ def test_08_combined_2400_2182(self):
231225 # Add extra inputs just in case the script asks for more than
232226 # expected
233227 inputs = ['10' , '1' , 'test_file' , 'y' , 'y' , 'y' , 'y' ]
234-
228+ mock_sleep . start ()
235229 with patch ('builtins.input' , side_effect = inputs ), \
236230 patch ('pandas.DataFrame.to_csv' ):
237231 self .run_module_safely (
238232 "Keithley_2400_Keithley_2182.Backends.IV_K2400_K2182_Backend_v1" )
233+ mock_pymeasure .stop ()
239234
240235 def test_09_poling (self ):
241236 with patch ('pymeasure.instruments.keithley.Keithley6517B' ):
0 commit comments