@@ -129,11 +129,11 @@ def test_regressions(self):
129129 }
130130 reference = {
131131 "tests/ls/test1" : "PASS" ,
132- "tests/ls/test2" : "SKIP " ,
132+ "tests/ls/test2" : "PASS " ,
133133 "tests/cp/test3" : "PASS" ,
134134 "tests/cp/test4" : "FAIL" ,
135135 }
136- regressions , _ , _ , _ = identify_test_changes (current , reference )
136+ regressions , _ , _ , _ , _ = identify_test_changes (current , reference )
137137 self .assertEqual (sorted (regressions ), ["tests/ls/test1" , "tests/ls/test2" ])
138138
139139 def test_fixes (self ):
@@ -150,7 +150,7 @@ def test_fixes(self):
150150 "tests/cp/test3" : "PASS" ,
151151 "tests/cp/test4" : "FAIL" ,
152152 }
153- _ , fixes , _ , _ = identify_test_changes (current , reference )
153+ _ , fixes , _ , _ , _ = identify_test_changes (current , reference )
154154 self .assertEqual (sorted (fixes ), ["tests/ls/test1" , "tests/ls/test2" ])
155155
156156 def test_newly_skipped (self ):
@@ -165,7 +165,7 @@ def test_newly_skipped(self):
165165 "tests/ls/test2" : "FAIL" ,
166166 "tests/cp/test3" : "PASS" ,
167167 }
168- _ , _ , newly_skipped , _ = identify_test_changes (current , reference )
168+ _ , _ , newly_skipped , _ , _ = identify_test_changes (current , reference )
169169 self .assertEqual (newly_skipped , ["tests/ls/test1" ])
170170
171171 def test_newly_passing (self ):
@@ -180,7 +180,7 @@ def test_newly_passing(self):
180180 "tests/ls/test2" : "FAIL" ,
181181 "tests/cp/test3" : "SKIP" ,
182182 }
183- _ , _ , _ , newly_passing = identify_test_changes (current , reference )
183+ _ , _ , _ , newly_passing , _ = identify_test_changes (current , reference )
184184 self .assertEqual (newly_passing , ["tests/ls/test1" ])
185185
186186 def test_all_categories (self ):
@@ -191,21 +191,24 @@ def test_all_categories(self):
191191 "tests/cp/test3" : "SKIP" , # Newly skipped
192192 "tests/cp/test4" : "PASS" , # Newly passing
193193 "tests/rm/test5" : "PASS" , # No change
194+ "tests/rm/test6" : "FAIL" , # Newly failing
194195 }
195196 reference = {
196197 "tests/ls/test1" : "PASS" , # Regression
197198 "tests/ls/test2" : "FAIL" , # Fix
198199 "tests/cp/test3" : "PASS" , # Newly skipped
199200 "tests/cp/test4" : "SKIP" , # Newly passing
200201 "tests/rm/test5" : "PASS" , # No change
202+ "tests/rm/test6" : "SKIP" , # Newly failing
201203 }
202- regressions , fixes , newly_skipped , newly_passing = identify_test_changes (
203- current , reference
204+ regressions , fixes , newly_skipped , newly_passing , newly_failing = (
205+ identify_test_changes ( current , reference )
204206 )
205207 self .assertEqual (regressions , ["tests/ls/test1" ])
206208 self .assertEqual (fixes , ["tests/ls/test2" ])
207209 self .assertEqual (newly_skipped , ["tests/cp/test3" ])
208210 self .assertEqual (newly_passing , ["tests/cp/test4" ])
211+ self .assertEqual (newly_failing , ["tests/rm/test6" ])
209212
210213 def test_new_and_removed_tests (self ):
211214 """Test handling of tests that are only in one of the datasets."""
@@ -219,13 +222,43 @@ def test_new_and_removed_tests(self):
219222 "tests/ls/test2" : "PASS" ,
220223 "tests/rm/old_test" : "FAIL" ,
221224 }
222- regressions , fixes , newly_skipped , newly_passing = identify_test_changes (
223- current , reference
225+ regressions , fixes , newly_skipped , newly_passing , newly_failing = (
226+ identify_test_changes ( current , reference )
224227 )
225228 self .assertEqual (regressions , ["tests/ls/test2" ])
226229 self .assertEqual (fixes , [])
227230 self .assertEqual (newly_skipped , [])
228231 self .assertEqual (newly_passing , [])
232+ self .assertEqual (newly_failing , [])
233+
234+ def test_newly_failing (self ):
235+ """Test identifying newly failing tests (SKIP -> FAIL)."""
236+ current = {
237+ "tests/ls/test1" : "FAIL" ,
238+ "tests/ls/test2" : "ERROR" ,
239+ "tests/cp/test3" : "PASS" ,
240+ }
241+ reference = {
242+ "tests/ls/test1" : "SKIP" ,
243+ "tests/ls/test2" : "SKIP" ,
244+ "tests/cp/test3" : "SKIP" ,
245+ }
246+ _ , _ , _ , _ , newly_failing = identify_test_changes (current , reference )
247+ self .assertEqual (sorted (newly_failing ), ["tests/ls/test1" , "tests/ls/test2" ])
248+
249+ def test_skip_to_fail_not_regression (self ):
250+ """Test that SKIP -> FAIL is not counted as a regression."""
251+ current = {
252+ "tests/ls/test1" : "FAIL" ,
253+ "tests/ls/test2" : "FAIL" ,
254+ }
255+ reference = {
256+ "tests/ls/test1" : "SKIP" ,
257+ "tests/ls/test2" : "PASS" ,
258+ }
259+ regressions , _ , _ , _ , newly_failing = identify_test_changes (current , reference )
260+ self .assertEqual (regressions , ["tests/ls/test2" ])
261+ self .assertEqual (newly_failing , ["tests/ls/test1" ])
229262
230263
231264class TestMainFunction (unittest .TestCase ):
@@ -285,7 +318,7 @@ def test_main_exit_code_with_real_regressions(self):
285318 current_flat = flatten_test_results (self .current_data )
286319 reference_flat = flatten_test_results (self .reference_data )
287320
288- regressions , _ , _ , _ = identify_test_changes (current_flat , reference_flat )
321+ regressions , _ , _ , _ , _ = identify_test_changes (current_flat , reference_flat )
289322
290323 self .assertIn ("tests/ls/test2" , regressions )
291324
@@ -320,7 +353,7 @@ def test_filter_intermittent_fixes(self):
320353 current_flat = flatten_test_results (self .current_data )
321354 reference_flat = flatten_test_results (self .reference_data )
322355
323- _ , fixes , _ , _ = identify_test_changes (current_flat , reference_flat )
356+ _ , fixes , _ , _ , _ = identify_test_changes (current_flat , reference_flat )
324357
325358 # tests/cp/test1 and tests/cp/test2 should be fixed but tests/cp/test1 is in ignore list
326359 self .assertIn ("tests/cp/test1" , fixes )
0 commit comments