# Check that with -mod=readonly, when we load a package in a module that is
# replaced but not required, we emit an error with the command to add the
# requirement.
# Verifies golang.org/issue/41416, golang.org/issue/41577.
cp go.mod go.mod.orig

# Replace all versions of a module without requiring it.
# With -mod=mod, we'd add a requirement for a "zero" pseudo-version, but we
# can't in readonly mode, since its go.mod may alter the build list.
go mod edit -replace rsc.io/quote=./quote
! go list rsc.io/quote
stderr '^module rsc.io/quote provides package rsc.io/quote and is replaced but not required; to add it:\n\tgo get rsc.io/quote$'
go get -d rsc.io/quote
cmp go.mod go.mod.latest
go list rsc.io/quote
cp go.mod.orig go.mod

# Same test with a specific version.
go mod edit -replace rsc.io/quote@v1.0.0-doesnotexist=./quote
! go list rsc.io/quote
stderr '^module rsc.io/quote provides package rsc.io/quote and is replaced but not required; to add it:\n\tgo get rsc.io/quote@v1.0.0-doesnotexist$'
go get -d rsc.io/quote@v1.0.0-doesnotexist
cmp go.mod go.mod.specific
go list rsc.io/quote
cp go.mod.orig go.mod

# If there are multiple versions, the highest is suggested.
go mod edit -replace rsc.io/quote@v1.0.0-doesnotexist=./quote
go mod edit -replace rsc.io/quote@v1.1.0-doesnotexist=./quote
! go list rsc.io/quote
stderr '^module rsc.io/quote provides package rsc.io/quote and is replaced but not required; to add it:\n\tgo get rsc.io/quote@v1.1.0-doesnotexist$'

-- go.mod --
module m

go 1.16
-- go.mod.latest --
module m

go 1.16

replace rsc.io/quote => ./quote

require rsc.io/quote v1.5.2 // indirect
-- go.mod.specific --
module m

go 1.16

replace rsc.io/quote v1.0.0-doesnotexist => ./quote

require rsc.io/quote v1.0.0-doesnotexist // indirect
-- use.go --
package use

import _ "rsc.io/quote"
-- quote/go.mod --
module rsc.io/quote

go 1.16
-- quote/quote.go --
package quote
