Skip to content

Commit 520c4c1

Browse files
IanButterworthKristofferC
authored andcommitted
Test: Fix failfast for for loops (#58695)
(cherry picked from commit 8567a3a)
1 parent 40f6d6b commit 520c4c1

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
@@ -1616,6 +1616,10 @@ end
16161616
trigger_test_failure_break(@nospecialize(err)) =
16171617
ccall(:jl_test_failure_breakpoint, Cvoid, (Any,), err)
16181618

1619+
is_failfast_error(err::FailFastError) = true
1620+
is_failfast_error(err::LoadError) = is_failfast_error(err.error) # handle `include` barrier
1621+
is_failfast_error(err) = false
1622+
16191623
"""
16201624
Generate the code for an `@testset` with a `let` argument.
16211625
"""
@@ -1708,7 +1712,7 @@ function testset_beginend_call(args, tests, source)
17081712
# something in the test block threw an error. Count that as an
17091713
# error in this test set
17101714
trigger_test_failure_break(err)
1711-
if err isa FailFastError
1715+
if is_failfast_error(err)
17121716
get_testset_depth() > 1 ? rethrow() : failfast_print()
17131717
else
17141718
record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source))))
@@ -1796,7 +1800,9 @@ function testset_forloop(args, testloop, source)
17961800
# Something in the test block threw an error. Count that as an
17971801
# error in this test set
17981802
trigger_test_failure_break(err)
1799-
if !isa(err, FailFastError)
1803+
if is_failfast_error(err)
1804+
get_testset_depth() > 1 ? rethrow() : failfast_print()
1805+
else
18001806
record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source))))
18011807
end
18021808
end

stdlib/Test/test/runtests.jl

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1348,7 +1348,7 @@ end
13481348
@test occursin(expected, result)
13491349
end
13501350
end
1351-
@testset "failfast" begin
1351+
@testset "failfast begin-end" begin
13521352
expected = r"""
13531353
Test Summary: | Fail Total Time
13541354
Foo | 1 1 \s*\d*.\ds
@@ -1373,6 +1373,32 @@ end
13731373
@test occursin(expected, result)
13741374
end
13751375
end
1376+
@testset "failfast for-loop" begin
1377+
expected = r"""
1378+
Test Summary: \| Fail Total +Time
1379+
Foo \| 1 1 \s*\d*\.\ds
1380+
1 \| 1 1 \s*\d*\.\ds
1381+
"""
1382+
mktemp() do f, _
1383+
write(f,
1384+
"""
1385+
using Test
1386+
1387+
@testset "Foo" failfast=true begin
1388+
@testset "\$x" for x in 1:2
1389+
@test false
1390+
end
1391+
@testset "Bar" begin
1392+
@test false
1393+
@test true
1394+
end
1395+
end
1396+
""")
1397+
cmd = `$(Base.julia_cmd()) --startup-file=no --color=no $f`
1398+
result = read(pipeline(ignorestatus(cmd), stderr=devnull), String)
1399+
@test occursin(expected, result)
1400+
end
1401+
end
13761402
@testset "failfast passes to child testsets" begin
13771403
expected = r"""
13781404
Test Summary: | Fail Total Time

0 commit comments

Comments
 (0)