blob: 97d9975e6806060fa1f1a4d3f94454b37c06bedc [file] [log] [blame]
# Test support for declaring needed Go version in module.
env GO111MODULE=on
go list
go build
go build sub.1
go build subver.1
! stderr 'module requires'
! go build badsub.1
stderr '^note: module requires Go 1.11111$'
go build versioned.1
go mod edit -require versioned.1@v1.1.0
! go build versioned.1
stderr '^note: module requires Go 1.99999$'
[short] stop
# The message should be printed even if the compiler emits no output.
go build -o $WORK/nooutput.exe nooutput.go
! go build -toolexec=$WORK/nooutput.exe versioned.1
stderr '^# versioned.1\nnote: module requires Go 1.99999$'
-- go.mod --
module m
go 1.999
require (
sub.1 v1.0.0
subver.1 v1.0.0
badsub.1 v1.0.0
versioned.1 v1.0.0
)
replace (
sub.1 => ./sub
subver.1 => ./subver
badsub.1 => ./badsub
versioned.1 v1.0.0 => ./versioned1
versioned.1 v1.1.0 => ./versioned2
)
-- x.go --
package x
-- sub/go.mod --
module m
go 1.11
-- sub/x.go --
package x
-- subver/go.mod --
module m
go 1.11111
-- subver/x.go --
package x
-- badsub/go.mod --
module m
go 1.11111
-- badsub/x.go --
package x
invalid syntax
-- versioned1/go.mod --
module versioned
go 1.0
-- versioned1/x.go --
package x
-- versioned2/go.mod --
module versioned
go 1.99999
-- versioned2/x.go --
package x
invalid syntax
-- nooutput.go --
// +build ignore
package main
import (
"bytes"
"os"
"os/exec"
"strings"
)
func main() {
stderr := new(bytes.Buffer)
stdout := new(bytes.Buffer)
cmd := exec.Command(os.Args[1], os.Args[2:]...)
cmd.Stderr = stderr
cmd.Stdout = stdout
err := cmd.Run()
if strings.HasPrefix(os.Args[2], "-V") {
os.Stderr.Write(stderr.Bytes())
os.Stdout.Write(stdout.Bytes())
}
if err != nil {
os.Exit(1)
}
}