Skip to content

Commit fde4112

Browse files
IanButterworthKristofferC
authored andcommitted
Test: Fix failfast for for loops (#58695)
(cherry picked from commit 8567a3a)
1 parent f204148 commit fde4112

File tree

2 files changed

+35
-3
lines changed

2 files changed

+35
-3
lines changed

stdlib/Test/src/Test.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,10 @@ end
14881488
trigger_test_failure_break(@nospecialize(err)) =
14891489
ccall(:jl_test_failure_breakpoint, Cvoid, (Any,), err)
14901490

1491+
is_failfast_error(err::FailFastError) = true
1492+
is_failfast_error(err::LoadError) = is_failfast_error(err.error) # handle `include` barrier
1493+
is_failfast_error(err) = false
1494+
14911495
"""
14921496
Generate the code for an `@testset` with a `let` argument.
14931497
"""
@@ -1581,7 +1585,7 @@ function testset_beginend_call(args, tests, source)
15811585
# something in the test block threw an error. Count that as an
15821586
# error in this test set
15831587
trigger_test_failure_break(err)
1584-
if err isa FailFastError
1588+
if is_failfast_error(err)
15851589
get_testset_depth() > 1 ? rethrow() : failfast_print()
15861590
else
15871591
record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source))))
@@ -1672,7 +1676,9 @@ function testset_forloop(args, testloop, source)
16721676
# Something in the test block threw an error. Count that as an
16731677
# error in this test set
16741678
trigger_test_failure_break(err)
1675-
if !isa(err, FailFastError)
1679+
if is_failfast_error(err)
1680+
get_testset_depth() > 1 ? rethrow() : failfast_print()
1681+
else
16761682
record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source))))
16771683
end
16781684
end

stdlib/Test/test/runtests.jl

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1296,7 +1296,7 @@ end
12961296
@test occursin(expected, result)
12971297
end
12981298
end
1299-
@testset "failfast" begin
1299+
@testset "failfast begin-end" begin
13001300
expected = r"""
13011301
Test Summary: | Fail Total Time
13021302
Foo | 1 1 \s*\d*.\ds
@@ -1321,6 +1321,32 @@ end
13211321
@test occursin(expected, result)
13221322
end
13231323
end
1324+
@testset "failfast for-loop" begin
1325+
expected = r"""
1326+
Test Summary: \| Fail Total +Time
1327+
Foo \| 1 1 \s*\d*\.\ds
1328+
1 \| 1 1 \s*\d*\.\ds
1329+
"""
1330+
mktemp() do f, _
1331+
write(f,
1332+
"""
1333+
using Test
1334+
1335+
@testset "Foo" failfast=true begin
1336+
@testset "\$x" for x in 1:2
1337+
@test false
1338+
end
1339+
@testset "Bar" begin
1340+
@test false
1341+
@test true
1342+
end
1343+
end
1344+
""")
1345+
cmd = `$(Base.julia_cmd()) --startup-file=no --color=no $f`
1346+
result = read(pipeline(ignorestatus(cmd), stderr=devnull), String)
1347+
@test occursin(expected, result)
1348+
end
1349+
end
13241350
@testset "failfast passes to child testsets" begin
13251351
expected = r"""
13261352
Test Summary: | Fail Total Time

0 commit comments

Comments
 (0)