1 [short] skip
2
3 # test fail fast
4 ! go test ./failfast_test.go -run='TestFailingA' -failfast=true
5 stdout -count=1 'FAIL - '
6 ! go test ./failfast_test.go -run='TestFailing[AB]' -failfast=true
7 stdout -count=1 'FAIL - '
8 ! go test ./failfast_test.go -run='TestFailing[AB]' -failfast=false
9 stdout -count=2 'FAIL - '
10
11 # mix with non-failing tests
12 ! go test ./failfast_test.go -run='TestA|TestFailing[AB]' -failfast=true
13 stdout -count=1 'FAIL - '
14 ! go test ./failfast_test.go -run='TestA|TestFailing[AB]' -failfast=false
15 stdout -count=2 'FAIL - '
16
17 # mix with parallel tests
18 ! go test ./failfast_test.go -run='TestFailingB|TestParallelFailingA' -failfast=true
19 stdout -count=2 'FAIL - '
20 ! go test ./failfast_test.go -run='TestFailingB|TestParallelFailingA' -failfast=false
21 stdout -count=2 'FAIL - '
22 ! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]' -failfast=true
23 stdout -count=3 'FAIL - '
24 ! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]' -failfast=false
25 stdout -count=3 'FAIL - '
26
27 # mix with parallel sub-tests
28 ! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA' -failfast=true
29 stdout -count=3 'FAIL - '
30 ! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA' -failfast=false
31 stdout -count=5 'FAIL - '
32 ! go test ./failfast_test.go -run='TestParallelFailingSubtestsA' -failfast=true
33 stdout -count=1 'FAIL - '
34
35 # a failure in a cleanup of a test with a parallel subtest must stop failfast
36 # (go.dev/issue/61034)
37 ! go test ./failfast_test.go -run='TestCleanupFailingWithParallelSubtestA|TestFailingB' -failfast=true
38 stdout -count=1 'FAIL - '
39 ! go test ./failfast_test.go -run='TestCleanupFailingWithParallelSubtestA|TestFailingB' -failfast=false
40 stdout -count=2 'FAIL - '
41
42 # only parallels
43 ! go test ./failfast_test.go -run='TestParallelFailing[AB]' -failfast=false
44 stdout -count=2 'FAIL - '
45
46 # non-parallel subtests
47 ! go test ./failfast_test.go -run='TestFailingSubtestsA' -failfast=true
48 stdout -count=1 'FAIL - '
49 ! go test ./failfast_test.go -run='TestFailingSubtestsA' -failfast=false
50 stdout -count=2 'FAIL - '
51
52 # fatal test
53 ! go test ./failfast_test.go -run='TestFatal[CD]' -failfast=true
54 stdout -count=1 'FAIL - '
55 ! go test ./failfast_test.go -run='TestFatal[CD]' -failfast=false
56 stdout -count=2 'FAIL - '
57
58 # cross package failfast
59 ! go test -p 1 -failfast ./a ./b ./c
60 stdout -count=1 'FAIL - '
61 stdout -count=1 'FAIL - TestFailingPkgA'
62
63 -- go.mod --
64 module m
65
66 go 1.21.0
67 -- failfast_test.go --
68 // Copyright 2017 The Go Authors. All rights reserved.
69 // Use of this source code is governed by a BSD-style
70 // license that can be found in the LICENSE file.
71
72 package failfast
73
74 import "testing"
75
76 func TestA(t *testing.T) {
77 // Edge-case testing, mixing unparallel tests too
78 t.Logf("LOG: %s", t.Name())
79 }
80
81 func TestFailingA(t *testing.T) {
82 t.Errorf("FAIL - %s", t.Name())
83 }
84
85 func TestB(t *testing.T) {
86 // Edge-case testing, mixing unparallel tests too
87 t.Logf("LOG: %s", t.Name())
88 }
89
90 func TestParallelFailingA(t *testing.T) {
91 t.Parallel()
92 t.Errorf("FAIL - %s", t.Name())
93 }
94
95 func TestParallelFailingB(t *testing.T) {
96 t.Parallel()
97 t.Errorf("FAIL - %s", t.Name())
98 }
99
100 func TestParallelFailingSubtestsA(t *testing.T) {
101 t.Parallel()
102 t.Run("TestFailingSubtestsA1", func(t *testing.T) {
103 t.Errorf("FAIL - %s", t.Name())
104 })
105 t.Run("TestFailingSubtestsA2", func(t *testing.T) {
106 t.Errorf("FAIL - %s", t.Name())
107 })
108 }
109
110 func TestFailingSubtestsA(t *testing.T) {
111 t.Run("TestFailingSubtestsA1", func(t *testing.T) {
112 t.Errorf("FAIL - %s", t.Name())
113 })
114 t.Run("TestFailingSubtestsA2", func(t *testing.T) {
115 t.Errorf("FAIL - %s", t.Name())
116 })
117 }
118
119 func TestCleanupFailingWithParallelSubtestA(t *testing.T) {
120 // Regression test for go.dev/issue/61034: a failure in a Cleanup
121 // function must be counted for -failfast even when the test has a
122 // parallel subtest.
123 t.Cleanup(func() {
124 t.Errorf("FAIL - %s", t.Name())
125 })
126 t.Run("sub", func(t *testing.T) {
127 t.Parallel()
128 })
129 }
130
131 func TestFailingB(t *testing.T) {
132 t.Errorf("FAIL - %s", t.Name())
133 }
134
135 func TestFatalC(t *testing.T) {
136 t.Fatalf("FAIL - %s", t.Name())
137 }
138
139 func TestFatalD(t *testing.T) {
140 t.Fatalf("FAIL - %s", t.Name())
141 }
142 -- a/a_test.go --
143 package a
144
145 import "testing"
146
147 func TestFailingPkgA(t *testing.T) {
148 t.Errorf("FAIL - %s", t.Name())
149 }
150 -- b/b_test.go --
151 package b
152
153 import "testing"
154
155 func TestFailingPkgB(t *testing.T) {
156 t.Errorf("FAIL - %s", t.Name())
157 }
158 -- c/c_test.go --
159 package c
160
161 import "testing"
162
163 func TestFailingPkgC(t *testing.T) {
164 t.Errorf("FAIL - %s", t.Name())
165 }
166
View as plain text