# Test of go work sync in a workspace in which some dependency needed by `a`
# appears at a lower version in the build list of `b`, but is not needed at all
# by `b` (so it should not be upgraded within b).
#
# a -> p 1.1
# b -> q 1.0 -(through a test dependency)-> p 1.0
go work sync
cmp a/go.mod a/want_go.mod
cmp b/go.mod b/want_go.mod

-- go.work --
go 1.18

use (
	./a
	./b
)

-- a/go.mod --
go 1.18

module example.com/a

require (
	example.com/p v1.1.0
)

replace (
	example.com/p => ../p
)
-- a/want_go.mod --
go 1.18

module example.com/a

require (
	example.com/p v1.1.0
)

replace (
	example.com/p => ../p
)
-- a/a.go --
package a

import (
	"example.com/p"
)

func Foo() {
	p.P()
}
-- b/go.mod --
go 1.18

module example.com/b

require (
	example.com/q v1.0.0
)

replace (
	example.com/q => ../q
)
-- b/want_go.mod --
go 1.18

module example.com/b

require (
	example.com/q v1.0.0
)

replace (
	example.com/q => ../q
)
-- b/b.go --
package b

import (
	"example.com/q"
)

func Foo() {
	q.Q()
}
-- p/go.mod --
go 1.18

module example.com/p
-- p/p.go --
package p

func P() {}
-- q/go.mod --
go 1.18

module example.com/q

require (
	example.com/p v1.0.0
)

replace (
	example.com/p => ../p
)
-- q/q.go --
package q

func Q() {
}
-- q/q_test.go --
package q

import example.com/p

func TestQ(t *testing.T) {
	p.P()
}