# This test checks the behavior of 'go run' with a 'cmd@version' argument.
# Most of 'go run' is covered in other tests.
# mod_install_pkg_version covers most of the package loading functionality.
# This test focuses on 'go run' behavior specific to this mode.
[short] skip

# 'go run pkg@version' works outside a module.
env GO111MODULE=auto
go run example.com/cmd/a@v1.0.0
stdout '^a@v1.0.0$'


# 'go run pkg@version' reports an error if modules are disabled.
env GO111MODULE=off
! go run example.com/cmd/a@v1.0.0
stderr '^go: modules disabled by GO111MODULE=off; see ''go help modules''$'
env GO111MODULE=on


# 'go run pkg@version' ignores go.mod in the current directory.
cd m
cp go.mod go.mod.orig
! go list -m all
stderr '^go: example.com/cmd@v1.1.0-doesnotexist: reading http.*/mod/example\.com/cmd/@v/v1.1.0-doesnotexist.info: 404 Not Found\n\tserver response: 404 page not found$'
stderr '^go: example.com/cmd@v1.1.0-doesnotexist: missing go.sum entry for go.mod file; to add it:\n\tgo mod download example.com/cmd$'
go run example.com/cmd/a@v1.0.0
stdout '^a@v1.0.0$'
cmp go.mod go.mod.orig
cd ..


# 'go install pkg@version' works on a module that doesn't have a go.mod file
# and with a module whose go.mod file has missing requirements.
# With a proxy, the two cases are indistinguishable.
go run rsc.io/fortune@v1.0.0
stderr '^go: found rsc.io/quote in rsc.io/quote v1.5.2$'
stderr '^Hello, world.$'


# 'go run pkg@version' should report an error if pkg is not a main package.
! go run example.com/cmd/err@v1.0.0
stderr '^package example.com/cmd/err is not a main package$'


# 'go run pkg@version' should report errors if the module contains
# replace or exclude directives.
go mod download example.com/cmd@v1.0.0-replace
! go run example.com/cmd/a@v1.0.0-replace
cmp stderr replace-err

go mod download example.com/cmd@v1.0.0-exclude
! go run example.com/cmd/a@v1.0.0-exclude
cmp stderr exclude-err


# 'go run dir@version' works like a normal 'go run' command if
# dir is a relative or absolute path.
go mod download rsc.io/fortune@v1.0.0
! go run $GOPATH/pkg/mod/rsc.io/fortune@v1.0.0
stderr '^go: go\.mod file not found in current directory or any parent directory; see ''go help modules''$'
! go run ../pkg/mod/rsc.io/fortune@v1.0.0
stderr '^go: go\.mod file not found in current directory or any parent directory; see ''go help modules''$'
mkdir tmp
cd tmp
go mod init tmp
go mod edit -require=rsc.io/fortune@v1.0.0
! go run -mod=readonly $GOPATH/pkg/mod/rsc.io/fortune@v1.0.0
stderr '^missing go\.sum entry for module providing package rsc\.io/fortune; to add:\n\tgo mod download rsc\.io/fortune$'
! go run -mod=readonly ../../pkg/mod/rsc.io/fortune@v1.0.0
stderr '^missing go\.sum entry for module providing package rsc\.io/fortune; to add:\n\tgo mod download rsc\.io/fortune$'
cd ..
rm tmp


# 'go run' does not interpret @version arguments after the first.
go run example.com/cmd/a@v1.0.0 example.com/doesnotexist@v1.0.0
stdout '^a@v1.0.0$'


# 'go run pkg@version' succeeds when -mod=readonly is set explicitly.
# Verifies #43278.
go run -mod=readonly example.com/cmd/a@v1.0.0
stdout '^a@v1.0.0$'


# 'go run pkg@version' should show a deprecation message if the module is deprecated.
go run example.com/deprecated/a/cmd/a@latest
stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$'
stdout '^a@v1.9.0$'
go run example.com/deprecated/a/cmd/a@v1.0.0
stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$'
stdout '^a@v1.0.0$'

# 'go run pkg@version' does not show a deprecation message if the module is no longer
# deprecated in its latest version, even if the module is deprecated in its current version.
go run example.com/undeprecated/cmd/a@v1.0.0
! stderr 'module.*is deprecated'

-- m/go.mod --
module m

go 1.16

require example.com/cmd v1.1.0-doesnotexist
-- x/x.go --
package main

func main() {}
-- replace-err --
go: example.com/cmd/a@v1.0.0-replace (in example.com/cmd@v1.0.0-replace):
	The go.mod file for the module providing named packages contains one or
	more replace directives. It must not contain directives that would cause
	it to be interpreted differently than if it were the main module.
-- exclude-err --
go: example.com/cmd/a@v1.0.0-exclude (in example.com/cmd@v1.0.0-exclude):
	The go.mod file for the module providing named packages contains one or
	more exclude directives. It must not contain directives that would cause
	it to be interpreted differently than if it were the main module.
