@@ -53,16 +53,23 @@ def dummy_onsave_generic_error(filename, *args, **kwargs):
5353 }
5454
5555
56+ @pytest .fixture
57+ def parent (qtbot ):
58+ parent = QWidget ()
59+ qtbot .addWidget (parent )
60+ return parent
61+
62+
5663# =============================================================================
5764# ---- Tests
5865# =============================================================================
5966@pytest .mark .parametrize ('atomic' , [True , False ])
60- def test_save_file_success (tmp_path , atomic ):
67+ def test_save_file_success (tmp_path , atomic , parent ):
6168 """Test successful file save in atomic and non-atomic modes."""
6269 manager = SaveFileManager (
6370 namefilters = NAMEFILTERS ,
6471 onsave = dummy_onsave_success ,
65- parent = QWidget () ,
72+ parent = parent ,
6673 atomic = atomic
6774 )
6875
@@ -75,12 +82,12 @@ def test_save_file_success(tmp_path, atomic):
7582
7683
7784@pytest .mark .parametrize ('atomic' , [True , False ])
78- def test_save_file_as_success (tmp_path , mocker , atomic ):
85+ def test_save_file_as_success (tmp_path , mocker , atomic , parent ):
7986 """Test successful file save using the 'Save As' dialog."""
8087 manager = SaveFileManager (
8188 namefilters = NAMEFILTERS ,
8289 onsave = dummy_onsave_success ,
83- parent = QWidget () ,
90+ parent = parent ,
8491 atomic = atomic
8592 )
8693
@@ -101,12 +108,12 @@ def test_save_file_as_success(tmp_path, mocker, atomic):
101108
102109
103110@pytest .mark .parametrize ('atomic' , [True , False ])
104- def test_save_file_permission_error (tmp_path , mocker , atomic ):
111+ def test_save_file_permission_error (tmp_path , mocker , atomic , parent ):
105112 """Test handling of PermissionError during save with user cancel."""
106113 manager = SaveFileManager (
107114 namefilters = NAMEFILTERS ,
108115 onsave = dummy_onsave_permission_error ,
109- parent = QWidget () ,
116+ parent = parent ,
110117 atomic = atomic
111118 )
112119
@@ -132,12 +139,12 @@ def test_save_file_permission_error(tmp_path, mocker, atomic):
132139
133140
134141@pytest .mark .parametrize ('atomic' , [True , False ])
135- def test_save_file_generic_exception (tmp_path , mocker , atomic ):
142+ def test_save_file_generic_exception (tmp_path , mocker , atomic , parent ):
136143 """Test handling of generic exception during save."""
137144 manager = SaveFileManager (
138145 namefilters = NAMEFILTERS ,
139146 onsave = dummy_onsave_generic_error ,
140- parent = QWidget () ,
147+ parent = parent ,
141148 atomic = atomic
142149 )
143150
@@ -155,12 +162,12 @@ def test_save_file_generic_exception(tmp_path, mocker, atomic):
155162
156163
157164@pytest .mark .parametrize ('atomic' , [True , False ])
158- def test_extension_added_if_missing (tmp_path , mocker , atomic ):
165+ def test_extension_added_if_missing (tmp_path , mocker , atomic , parent ):
159166 """Test automatic extension addition when missing in file name."""
160167 manager = SaveFileManager (
161168 namefilters = NAMEFILTERS ,
162169 onsave = dummy_onsave_success ,
163- parent = QWidget () ,
170+ parent = parent ,
164171 atomic = atomic
165172 )
166173
@@ -181,12 +188,12 @@ def test_extension_added_if_missing(tmp_path, mocker, atomic):
181188
182189
183190@pytest .mark .parametrize ('atomic' , [True , False ])
184- def test_save_file_as_cancel (tmp_path , mocker , atomic ):
191+ def test_save_file_as_cancel (tmp_path , mocker , atomic , parent ):
185192 """Test 'Save As' dialog cancel returns None and does not save."""
186193 manager = SaveFileManager (
187194 namefilters = NAMEFILTERS ,
188195 onsave = dummy_onsave_success ,
189- parent = QWidget () ,
196+ parent = parent ,
190197 atomic = atomic
191198 )
192199
@@ -204,12 +211,12 @@ def test_save_file_as_cancel(tmp_path, mocker, atomic):
204211 assert not osp .exists (filename )
205212
206213
207- def test_atomic_save_replace_permission_error (tmp_path , mocker ):
214+ def test_atomic_save_replace_permission_error (tmp_path , mocker , parent ):
208215 """Test atomic save when os.replace raises PermissionError."""
209216 manager = SaveFileManager (
210217 namefilters = NAMEFILTERS ,
211218 onsave = dummy_onsave_success ,
212- parent = QWidget () ,
219+ parent = parent ,
213220 atomic = True
214221 )
215222 filename = osp .join (tmp_path , "file.txt" )
0 commit comments