aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/testdata/script/test_exit.txt
blob: 23a2429d1ecaaaa9d7b8ab50cb975a34c6a9e386 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Builds and runs test binaries, so skip in short mode.
[short] skip

env GO111MODULE=on

# If a test invoked by 'go test' exits with a zero status code,
# it will panic.
! go test ./zero
! stdout ^ok
! stdout 'exit status'
stdout 'panic'
stdout ^FAIL

# If a test exits with a non-zero status code, 'go test' fails normally.
! go test ./one
! stdout ^ok
stdout 'exit status'
! stdout 'panic'
stdout ^FAIL

# Ensure that other flags still do the right thing.
go test -list=. ./zero
stdout ExitZero

! go test -bench=. ./zero
stdout 'panic'

# 'go test' with no args streams output without buffering. Ensure that it still
# catches a zero exit with missing output.
cd zero
! go test
stdout 'panic'
cd ../normal
go test
stdout ^ok
cd ..

# If a TestMain exits with a zero status code, 'go test' shouldn't
# complain about that. It's a common way to skip testing a package
# entirely.
go test ./main_zero
! stdout 'skipping all tests'
stdout ^ok

# With -v, we'll see the warning from TestMain.
go test -v ./main_zero
stdout 'skipping all tests'
stdout ^ok

# Listing all tests won't actually give a result if TestMain exits. That's okay,
# because this is how TestMain works. If we decide to support -list even when
# TestMain is used to skip entire packages, we can change this test case.
go test -list=. ./main_zero
stdout 'skipping all tests'
! stdout TestNotListed

-- go.mod --
module m

-- ./normal/normal.go --
package normal
-- ./normal/normal_test.go --
package normal

import "testing"

func TestExitZero(t *testing.T) {
}

-- ./zero/zero.go --
package zero
-- ./zero/zero_test.go --
package zero

import (
	"os"
	"testing"
)

func TestExitZero(t *testing.T) {
	os.Exit(0)
}

-- ./one/one.go --
package one
-- ./one/one_test.go --
package one

import (
	"os"
	"testing"
)

func TestExitOne(t *testing.T) {
	os.Exit(1)
}

-- ./main_zero/zero.go --
package zero
-- ./main_zero/zero_test.go --
package zero

import (
	"fmt"
	"os"
	"testing"
)

func TestMain(m *testing.M) {
	fmt.Println("skipping all tests")
	os.Exit(0)
}

func TestNotListed(t *testing.T) {}