-
Notifications
You must be signed in to change notification settings - Fork 17.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/go: in module mode, populate PackagePublic.Root with the module root
'go test' uses the Root field to determine the set of files that invalidate test results, and there is no other sensible meaning of “root” for code within a module. Fixes #29111 Change-Id: Icf1be90a26d22665613e42cb968087b63c36e74c Reviewed-on: https://go-review.googlesource.com/c/go/+/154100 Run-TryBot: Bryan C. Mills <[email protected]> TryBot-Result: Gobot Gobot <[email protected]> Reviewed-by: Jay Conrod <[email protected]>
- Loading branch information
Bryan C. Mills
committed
Jul 18, 2019
1 parent
5ba15db
commit 4a2d3d0
Showing
4 changed files
with
100 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
[short] skip | ||
|
||
env GO111MODULE=on | ||
env GOCACHE=$WORK/gocache | ||
env GODEBUG=gocachetest=1 | ||
|
||
# The first run of a test should not be cached. | ||
# The second run should be. | ||
go test -run=WriteTmp . | ||
! stdout '(cached)' | ||
go test -run=WriteTmp . | ||
stdout '(cached)' | ||
|
||
# 'go test' without arguments should never be cached. | ||
go test -run=WriteTmp | ||
! stdout '(cached)' | ||
go test -run=WriteTmp | ||
! stdout '(cached)' | ||
|
||
# We should never cache a test run from command-line files. | ||
go test -run=WriteTmp ./foo_test.go | ||
! stdout '(cached)' | ||
go test -run=WriteTmp ./foo_test.go | ||
! stdout '(cached)' | ||
|
||
[!exec:sleep] stop | ||
# The go command refuses to cache access to files younger than 2s, so sleep that long. | ||
exec sleep 2 | ||
|
||
# Touching a file that the test reads from within its testdata should invalidate the cache. | ||
go test -run=ReadTestdata . | ||
! stdout '(cached)' | ||
go test -run=ReadTestdata . | ||
stdout '(cached)' | ||
cp testdata/bar.txt testdata/foo.txt | ||
go test -run=ReadTestdata . | ||
! stdout '(cached)' | ||
|
||
-- go.mod -- | ||
module golang.org/issue/29111/foo | ||
|
||
-- foo.go -- | ||
package foo | ||
|
||
-- testdata/foo.txt -- | ||
foo | ||
-- testdata/bar.txt -- | ||
bar | ||
|
||
-- foo_test.go -- | ||
package foo_test | ||
|
||
import ( | ||
"io/ioutil" | ||
"os" | ||
"path/filepath" | ||
"testing" | ||
) | ||
|
||
func TestWriteTmp(t *testing.T) { | ||
dir, err := ioutil.TempDir("", "") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(dir) | ||
err = ioutil.WriteFile(filepath.Join(dir, "x"), nil, 0666) | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
} | ||
|
||
func TestReadTestdata(t *testing.T) { | ||
_, err := ioutil.ReadFile("testdata/foo.txt") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
} |