tg.grepStdout(`\{"Action":"pass","Package":"errors"\}`, "did not see final pass")
}
-func TestFailFast(t *testing.T) {
- tooSlow(t)
- tg := testgo(t)
- defer tg.cleanup()
-
- tests := []struct {
- run string
- failfast bool
- nfail int
- }{
- {"TestFailingA", true, 1},
- {"TestFailing[AB]", true, 1},
- {"TestFailing[AB]", false, 2},
- // mix with non-failing tests:
- {"TestA|TestFailing[AB]", true, 1},
- {"TestA|TestFailing[AB]", false, 2},
- // mix with parallel tests:
- {"TestFailingB|TestParallelFailingA", true, 2},
- {"TestFailingB|TestParallelFailingA", false, 2},
- {"TestFailingB|TestParallelFailing[AB]", true, 3},
- {"TestFailingB|TestParallelFailing[AB]", false, 3},
- // mix with parallel sub-tests
- {"TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA", true, 3},
- {"TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA", false, 5},
- {"TestParallelFailingSubtestsA", true, 1},
- // only parallels:
- {"TestParallelFailing[AB]", false, 2},
- // non-parallel subtests:
- {"TestFailingSubtestsA", true, 1},
- {"TestFailingSubtestsA", false, 2},
- // fatal test
- {"TestFatal[CD]", true, 1},
- {"TestFatal[CD]", false, 2},
- }
-
- for _, tt := range tests {
- t.Run(tt.run, func(t *testing.T) {
- tg.runFail("test", "./testdata/src/failfast_test.go", "-run="+tt.run, "-failfast="+strconv.FormatBool(tt.failfast))
-
- nfail := strings.Count(tg.getStdout(), "FAIL - ")
-
- if nfail != tt.nfail {
- t.Errorf("go test -run=%s -failfast=%t printed %d FAILs, want %d", tt.run, tt.failfast, nfail, tt.nfail)
- }
- })
- }
-}
-
// Issue 22986.
func TestImportPath(t *testing.T) {
tooSlow(t)
--- /dev/null
+[short] skip
+
+# test fail fast
+! go test ./failfast_test.go -run='TestFailingA' -failfast=true
+stdout -count=1 'FAIL - '
+! go test ./failfast_test.go -run='TestFailing[AB]' -failfast=true
+stdout -count=1 'FAIL - '
+! go test ./failfast_test.go -run='TestFailing[AB]' -failfast=false
+stdout -count=2 'FAIL - '
+
+# mix with non-failing tests
+! go test ./failfast_test.go -run='TestA|TestFailing[AB]' -failfast=true
+stdout -count=1 'FAIL - '
+! go test ./failfast_test.go -run='TestA|TestFailing[AB]' -failfast=false
+stdout -count=2 'FAIL - '
+
+# mix with parallel tests
+! go test ./failfast_test.go -run='TestFailingB|TestParallelFailingA' -failfast=true
+stdout -count=2 'FAIL - '
+! go test ./failfast_test.go -run='TestFailingB|TestParallelFailingA' -failfast=false
+stdout -count=2 'FAIL - '
+! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]' -failfast=true
+stdout -count=3 'FAIL - '
+! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]' -failfast=false
+stdout -count=3 'FAIL - '
+
+# mix with parallel sub-tests
+! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA' -failfast=true
+stdout -count=3 'FAIL - '
+! go test ./failfast_test.go -run='TestFailingB|TestParallelFailing[AB]|TestParallelFailingSubtestsA' -failfast=false
+stdout -count=5 'FAIL - '
+! go test ./failfast_test.go -run='TestParallelFailingSubtestsA' -failfast=true
+stdout -count=1 'FAIL - '
+
+# only parallels
+! go test ./failfast_test.go -run='TestParallelFailing[AB]' -failfast=false
+stdout -count=2 'FAIL - '
+
+# non-parallel subtests
+! go test ./failfast_test.go -run='TestFailingSubtestsA' -failfast=true
+stdout -count=1 'FAIL - '
+! go test ./failfast_test.go -run='TestFailingSubtestsA' -failfast=false
+stdout -count=2 'FAIL - '
+
+# fatal test
+! go test ./failfast_test.go -run='TestFatal[CD]' -failfast=true
+stdout -count=1 'FAIL - '
+! go test ./failfast_test.go -run='TestFatal[CD]' -failfast=false
+stdout -count=2 'FAIL - '
+
+-- failfast_test.go --
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package failfast
+
+import "testing"
+
+func TestA(t *testing.T) {
+ // Edge-case testing, mixing unparallel tests too
+ t.Logf("LOG: %s", t.Name())
+}
+
+func TestFailingA(t *testing.T) {
+ t.Errorf("FAIL - %s", t.Name())
+}
+
+func TestB(t *testing.T) {
+ // Edge-case testing, mixing unparallel tests too
+ t.Logf("LOG: %s", t.Name())
+}
+
+func TestParallelFailingA(t *testing.T) {
+ t.Parallel()
+ t.Errorf("FAIL - %s", t.Name())
+}
+
+func TestParallelFailingB(t *testing.T) {
+ t.Parallel()
+ t.Errorf("FAIL - %s", t.Name())
+}
+
+func TestParallelFailingSubtestsA(t *testing.T) {
+ t.Parallel()
+ t.Run("TestFailingSubtestsA1", func(t *testing.T) {
+ t.Errorf("FAIL - %s", t.Name())
+ })
+ t.Run("TestFailingSubtestsA2", func(t *testing.T) {
+ t.Errorf("FAIL - %s", t.Name())
+ })
+}
+
+func TestFailingSubtestsA(t *testing.T) {
+ t.Run("TestFailingSubtestsA1", func(t *testing.T) {
+ t.Errorf("FAIL - %s", t.Name())
+ })
+ t.Run("TestFailingSubtestsA2", func(t *testing.T) {
+ t.Errorf("FAIL - %s", t.Name())
+ })
+}
+
+func TestFailingB(t *testing.T) {
+ t.Errorf("FAIL - %s", t.Name())
+}
+
+func TestFatalC(t *testing.T) {
+ t.Fatalf("FAIL - %s", t.Name())
+}
+
+func TestFatalD(t *testing.T) {
+ t.Fatalf("FAIL - %s", t.Name())
+}
+++ /dev/null
-// Copyright 2017 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package failfast
-
-import "testing"
-
-func TestA(t *testing.T) {
- // Edge-case testing, mixing unparallel tests too
- t.Logf("LOG: %s", t.Name())
-}
-
-func TestFailingA(t *testing.T) {
- t.Errorf("FAIL - %s", t.Name())
-}
-
-func TestB(t *testing.T) {
- // Edge-case testing, mixing unparallel tests too
- t.Logf("LOG: %s", t.Name())
-}
-
-func TestParallelFailingA(t *testing.T) {
- t.Parallel()
- t.Errorf("FAIL - %s", t.Name())
-}
-
-func TestParallelFailingB(t *testing.T) {
- t.Parallel()
- t.Errorf("FAIL - %s", t.Name())
-}
-
-func TestParallelFailingSubtestsA(t *testing.T) {
- t.Parallel()
- t.Run("TestFailingSubtestsA1", func(t *testing.T) {
- t.Errorf("FAIL - %s", t.Name())
- })
- t.Run("TestFailingSubtestsA2", func(t *testing.T) {
- t.Errorf("FAIL - %s", t.Name())
- })
-}
-
-func TestFailingSubtestsA(t *testing.T) {
- t.Run("TestFailingSubtestsA1", func(t *testing.T) {
- t.Errorf("FAIL - %s", t.Name())
- })
- t.Run("TestFailingSubtestsA2", func(t *testing.T) {
- t.Errorf("FAIL - %s", t.Name())
- })
-}
-
-func TestFailingB(t *testing.T) {
- t.Errorf("FAIL - %s", t.Name())
-}
-
-func TestFatalC(t *testing.T) {
- t.Fatalf("FAIL - %s", t.Name())
-}
-
-func TestFatalD(t *testing.T) {
- t.Fatalf("FAIL - %s", t.Name())
-}