# Create basic modules and work space. env TESTGO_VERSION=go1.50 mkdir m1_22_0 go mod init -C m1_22_0 go mod edit -C m1_22_0 -go=1.22.0 -toolchain=go1.99.0 mkdir m1_22_1 go mod init -C m1_22_1 go mod edit -C m1_22_1 -go=1.22.1 -toolchain=go1.99.1 mkdir m1_24_rc0 go mod init -C m1_24_rc0 go mod edit -C m1_24_rc0 -go=1.24rc0 -toolchain=go1.99.2 go work init grep '^go 1.50$' go.work ! grep toolchain go.work # work use with older modules should leave go 1.50 in the go.work. go work use ./m1_22_0 grep '^go 1.50$' go.work ! grep toolchain go.work # work use with newer modules should bump go and toolchain, # including updating to a newer toolchain as needed. env TESTGO_VERSION=go1.21 env TESTGO_VERSION_SWITCH=switch rm go.work go work init env GOTOOLCHAIN=local ! go work use ./m1_22_0 stderr '^go: m1_22_0'${/}'go.mod requires go >= 1.22.0 \(running go 1.21; GOTOOLCHAIN=local\)$' env GOTOOLCHAIN=auto go work use ./m1_22_0 stderr '^go: m1_22_0'${/}'go.mod requires go >= 1.22.0; switching to go1.22.9$' grep '^go 1.22.0$' go.work grep '^toolchain go1.22.9$' go.work # work use with an even newer module should bump go again. go work use ./m1_22_1 ! stderr switching grep '^go 1.22.1$' go.work grep '^toolchain go1.22.9$' go.work # unchanged # work use with an even newer module should bump go and toolchain again. env GOTOOLCHAIN=go1.22.9 ! go work use ./m1_24_rc0 stderr '^go: m1_24_rc0'${/}'go.mod requires go >= 1.24rc0 \(running go 1.22.9; GOTOOLCHAIN=go1.22.9\)$' env GOTOOLCHAIN=auto go work use ./m1_24_rc0 stderr '^go: m1_24_rc0'${/}'go.mod requires go >= 1.24rc0; switching to go1.24rc1$' grep '^go 1.24rc0$' go.work grep '^toolchain go1.24rc1$' go.work