1 env GODEBUG=gotestjsonbuildtext=0
2
3 # There are several places where paths appear in JSON in regexps here.
4 # For the path separator we use (/|\\\\).
5 # Unfortunately, we can't just use ${/} because, while script test automatically
6 # escapes Windows-style \ in regexps, it doesn't know that it needs to escape
7 # them *again* for JSON. If we ever teach script test about matching JSON,
8 # we can probably fix this.
9
10 # Test a build error directly in a test file.
11 ! go test -json -o=$devnull ./builderror
12 stdout '"ImportPath":"m/builderror \[m/builderror\.test\]","Action":"build-output","Output":"# m/builderror \[m/builderror.test\]\\n"'
13 stdout '"ImportPath":"m/builderror \[m/builderror\.test\]","Action":"build-output","Output":"builderror(/|\\\\)main_test.go:3:11: undefined: y\\n"'
14 stdout '"ImportPath":"m/builderror \[m/builderror\.test\]","Action":"build-fail"'
15 stdout '"Action":"start","Package":"m/builderror"'
16 stdout '"Action":"output","Package":"m/builderror","Output":"FAIL\\tm/builderror \[build failed\]\\n"'
17 stdout '"Action":"fail","Package":"m/builderror","Elapsed":.*,"FailedBuild":"m/builderror \[m/builderror\.test\]"'
18 ! stderr '.'
19
20 # Test a build error in an imported package. Make sure it's attributed to the right package.
21 ! go test -json -o=$devnull ./builderror2
22 stdout '"ImportPath":"m/builderror2/x","Action":"build-output","Output":"# m/builderror2/x\\n"'
23 stdout '"ImportPath":"m/builderror2/x","Action":"build-output","Output":"builderror2(/|\\\\)x(/|\\\\)main.go:3:11: undefined: y\\n"'
24 stdout '"ImportPath":"m/builderror2/x","Action":"build-fail"'
25 stdout '"Action":"start","Package":"m/builderror2"'
26 stdout '"Action":"output","Package":"m/builderror2","Output":"FAIL\\tm/builderror2 \[build failed\]\\n"'
27 stdout '"Action":"fail","Package":"m/builderror2","Elapsed":.*,"FailedBuild":"m/builderror2/x"'
28 ! stderr '.'
29
30 # Test a loading error in a test file
31 # TODO(#65335): ImportPath attribution is weird
32 ! go test -json -o=$devnull ./loaderror
33 stdout '"ImportPath":"x","Action":"build-output","Output":"# m/loaderror\\n"'
34 stdout '"ImportPath":"x","Action":"build-output","Output":".*package x is not in std.*"'
35 stdout '"ImportPath":"x","Action":"build-fail"'
36 stdout '"Action":"start","Package":"m/loaderror"'
37 stdout '"Action":"output","Package":"m/loaderror","Output":"FAIL\\tm/loaderror \[setup failed\]\\n"'
38 stdout '"Action":"fail","Package":"m/loaderror","Elapsed":.*,"FailedBuild":"x"'
39 ! stderr '.'
40
41 # Test an import cycle loading error in a non test file. (#70820)
42 ! go test -json -o=$devnull ./cycle/p
43 stdout '"ImportPath":"m/cycle/q","Action":"build-output","Output":"# m/cycle/p\\n"'
44 stdout '"ImportPath":"m/cycle/q","Action":"build-output","Output":"package m/cycle/p\\n"'
45 stdout '"ImportPath":"m/cycle/q","Action":"build-output","Output":"\\timports m/cycle/q from p.go\\n"'
46 stdout '"ImportPath":"m/cycle/q","Action":"build-output","Output":"\\timports m/cycle/q from q.go: import cycle not allowed\\n"'
47 stdout '"ImportPath":"m/cycle/q","Action":"build-fail"'
48 stdout '"Action":"start","Package":"m/cycle/p"'
49 stdout '"Action":"output","Package":"m/cycle/p","Output":"FAIL\\tm/cycle/p \[setup failed\]\\n"'
50 stdout '"Action":"fail","Package":"m/cycle/p","Elapsed":.*,"FailedBuild":"m/cycle/q"'
51 ! stderr '.'
52
53 # Test a vet error
54 ! go test -json -o=$devnull ./veterror
55 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"# m/veterror\\n"'
56 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"# \[m/veterror\]\\n"'
57 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-output","Output":"veterror(/|\\\\)main_test.go:9:21: fmt.Printf format %s reads arg #1, but call has 0 args\\n"'
58 stdout '"ImportPath":"m/veterror \[m/veterror.test\]","Action":"build-fail"'
59 stdout '"Action":"start","Package":"m/veterror"'
60 stdout '"Action":"output","Package":"m/veterror","Output":"FAIL\\tm/veterror \[build failed\]\\n"'
61 stdout '"Action":"fail","Package":"m/veterror","Elapsed":.*,"FailedBuild":"m/veterror \[m/veterror.test\]"'
62 ! stderr '.'
63
64 # Test that the GODEBUG fallback works.
65 env GODEBUG=gotestjsonbuildtext=1
66 ! go test -json -o=$devnull ./builderror
67 stderr '# m/builderror \[m/builderror.test\]\n'
68 stderr 'builderror'${/}'main_test.go:3:11: undefined: y\n'
69 stdout '"Action":"start","Package":"m/builderror"'
70 stdout '"Action":"output","Package":"m/builderror","Output":"FAIL\\tm/builderror \[build failed\]\\n"'
71 stdout '"Action":"fail","Package":"m/builderror","Elapsed":[0-9.]+\}'
72 # FailedBuild should NOT appear in the output in this mode.
73 ! stdout '"FailedBuild"'
74
75 -- go.mod --
76 module m
77 go 1.21
78 -- builderror/main_test.go --
79 package builderror
80
81 const x = y
82 -- builderror2/x/main.go --
83 package x
84
85 const x = y
86 -- builderror2/main_test.go --
87 package builderror2
88
89 import _ "m/builderror2/x"
90 -- loaderror/main_test.go --
91 // A bad import causes a "[setup failed]" message from cmd/go because
92 // it fails in package graph setup, before it can even get to the
93 // build.
94 //
95 // "[setup failed]" can also occur with various low-level failures in
96 // cmd/go, like failing to create a temporary directory.
97
98 package loaderror
99
100 import _ "x"
101 -- veterror/main_test.go --
102 package veterror
103
104 import (
105 "fmt"
106 "testing"
107 )
108
109 func TestVetError(t *testing.T) {
110 fmt.Printf("%s")
111 }
112 -- cycle/p/p.go --
113 package p
114
115 import "m/cycle/q"
116 -- cycle/q/q.go --
117 package q
118
119 import (
120 "m/cycle/q"
121 )
122
View as plain text