...

Text file src/cmd/go/testdata/script/gotoolchain_local.txt

Documentation: cmd/go/testdata/script

     1# This test uses the fake toolchain switch support in cmd/go/internal/toolchain.Switch
     2# to exercise all the version selection logic without needing actual toolchains.
     3# See gotoolchain_net.txt and gotoolchain_path.txt for tests of network and PATH toolchains.
     4
     5env TESTGO_VERSION=go1.500
     6env TESTGO_VERSION_SWITCH=switch
     7
     8# GOTOOLCHAIN=auto runs default toolchain without a go.mod or go.work
     9env GOTOOLCHAIN=auto
    10go version
    11stdout go1.500
    12
    13# GOTOOLCHAIN=path runs default toolchain without a go.mod or go.work
    14env GOTOOLCHAIN=path
    15go version
    16stdout go1.500
    17
    18# GOTOOLCHAIN=asdf is a syntax error
    19env GOTOOLCHAIN=asdf
    20! go version
    21stderr '^go: invalid GOTOOLCHAIN "asdf"$'
    22
    23# GOTOOLCHAIN=version is used directly.
    24env GOTOOLCHAIN=go1.600
    25go version
    26stdout go1.600
    27
    28env GOTOOLCHAIN=go1.400
    29go version
    30stdout go1.400
    31
    32# GOTOOLCHAIN=version+auto sets a minimum.
    33env GOTOOLCHAIN=go1.600+auto
    34go version
    35stdout go1.600
    36
    37env GOTOOLCHAIN=go1.400.0+auto
    38go version
    39stdout go1.400.0
    40
    41# GOTOOLCHAIN=version+path sets a minimum too.
    42env GOTOOLCHAIN=go1.600+path
    43go version
    44stdout go1.600
    45
    46env GOTOOLCHAIN=go1.400+path
    47go version
    48stdout go1.400
    49
    50# Create a go.mod file and test interactions with auto and path.
    51
    52# GOTOOLCHAIN=auto uses go line if newer than local toolchain.
    53env GOTOOLCHAIN=auto
    54go mod init m
    55go mod edit -go=1.700 -toolchain=none
    56go version
    57stdout 1.700
    58
    59go mod edit -go=1.300 -toolchain=none
    60go version
    61stdout 1.500 # local toolchain is newer
    62
    63go mod edit -go=1.700 -toolchain=go1.300
    64go version
    65stdout go1.700 # toolchain too old, ignored
    66
    67go mod edit -go=1.300 -toolchain=default
    68go version
    69stdout go1.500
    70
    71go mod edit -go=1.700 -toolchain=default
    72go version
    73stdout go1.500 # toolchain local is like GOTOOLCHAIN=local and wins
    74! go build
    75stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; go.mod sets toolchain default\)'
    76
    77# GOTOOLCHAIN=path does the same.
    78env GOTOOLCHAIN=path
    79go mod edit -go=1.700 -toolchain=none
    80go version
    81stdout 1.700
    82
    83go mod edit -go=1.300 -toolchain=none
    84go version
    85stdout 1.500 # local toolchain is newer
    86
    87go mod edit -go=1.700 -toolchain=go1.300
    88go version
    89stdout go1.700 # toolchain too old, ignored
    90
    91go mod edit -go=1.300 -toolchain=default
    92go version
    93stdout go1.500
    94
    95go mod edit -go=1.700 -toolchain=default
    96go version
    97stdout go1.500 # toolchain default applies even if older than go line
    98! go build
    99stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; GOTOOLCHAIN=path; go.mod sets toolchain default\)'
   100
   101# GOTOOLCHAIN=min+auto with toolchain default uses min, not local
   102
   103env GOTOOLCHAIN=go1.400+auto
   104go mod edit -go=1.300 -toolchain=default
   105go version
   106stdout 1.400 # not 1.500 local toolchain
   107
   108env GOTOOLCHAIN=go1.600+auto
   109go mod edit -go=1.300 -toolchain=default
   110go version
   111stdout 1.600 # not 1.500 local toolchain
   112
   113# GOTOOLCHAIN names can have -suffix
   114env GOTOOLCHAIN=go1.800-bigcorp
   115go version
   116stdout go1.800-bigcorp
   117
   118env GOTOOLCHAIN=auto
   119go mod edit -go=1.999 -toolchain=go1.800-bigcorp
   120go version
   121stdout go1.999
   122
   123go mod edit -go=1.777 -toolchain=go1.800-bigcorp
   124go version
   125stdout go1.800-bigcorp
   126
   127# go.work takes priority over go.mod
   128go mod edit -go=1.700 -toolchain=go1.999-wrong
   129go work init
   130go work edit -go=1.400 -toolchain=go1.600-right
   131go version
   132stdout go1.600-right
   133
   134go work edit -go=1.400 -toolchain=default
   135go version
   136stdout go1.500
   137
   138# go.work misconfiguration does not break go work edit
   139# ('go 1.600 / toolchain local' forces use of 1.500 which can't normally load that go.work; allow work edit to fix it.)
   140go work edit -go=1.600 -toolchain=default
   141go version
   142stdout go1.500
   143
   144go work edit -toolchain=none
   145go version
   146stdout go1.600
   147
   148rm go.work
   149
   150# go.mod misconfiguration does not break go mod edit
   151go mod edit -go=1.600 -toolchain=default
   152go version
   153stdout go1.500
   154
   155go mod edit -toolchain=none
   156go version
   157stdout go1.600
   158
   159# toolchain built with a custom version should know how it compares to others
   160
   161env TESTGO_VERSION=go1.500-bigcorp
   162go mod edit -go=1.499 -toolchain=none
   163go version
   164stdout go1.500-bigcorp
   165
   166go mod edit -go=1.499 -toolchain=go1.499
   167go version
   168stdout go1.500-bigcorp
   169
   170go mod edit -go=1.500 -toolchain=none
   171go version
   172stdout go1.500-bigcorp
   173
   174go mod edit -go=1.500 -toolchain=go1.500
   175go version
   176stdout go1.500-bigcorp
   177
   178go mod edit -go=1.501 -toolchain=none
   179go version
   180stdout go1.501
   181
   182	# If toolchain > go, we must upgrade to the indicated toolchain (not just the go version).
   183go mod edit -go=1.499 -toolchain=go1.501
   184go version
   185stdout go1.501
   186
   187env TESTGO_VERSION='go1.500 (bigcorp)'
   188go mod edit -go=1.499 -toolchain=none
   189go version
   190stdout 'go1.500 \(bigcorp\)'
   191
   192go mod edit -go=1.500 -toolchain=none
   193go version
   194stdout 'go1.500 \(bigcorp\)'
   195
   196go mod edit -go=1.501 -toolchain=none
   197go version
   198stdout go1.501
   199
   200# avoid two-step switch, first from install target requirement, then from GOTOOLCHAIN min
   201# instead, just jump directly to GOTOOLCHAIN min
   202env TESTGO_VERSION=go1.2.3
   203env GODEBUG=toolchaintrace=1
   204env GOTOOLCHAIN=go1.23.0+auto
   205! go install rsc.io/fortune/nonexist@v0.0.1
   206! stderr 'switching to go1.22.9'
   207stderr 'using go1.23.0'
   208env GODEBUG=
   209env GOTOOLCHAIN=auto
   210
   211# go install m@v and go run m@v should ignore go.mod and use m@v
   212env TESTGO_VERSION=go1.2.3
   213go mod edit -go=1.999 -toolchain=go1.998
   214
   215! go install rsc.io/fortune/nonexist@v0.0.1
   216stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   217stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   218
   219! go run rsc.io/fortune/nonexist@v0.0.1
   220stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   221stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
   222
   223# go install should handle unknown flags to find m@v
   224! go install -unknownflag rsc.io/fortune/nonexist@v0.0.1
   225stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   226stderr '^flag provided but not defined: -unknownflag'
   227
   228! go install -unknownflag arg rsc.io/fortune/nonexist@v0.0.1
   229stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   230stderr '^flag provided but not defined: -unknownflag'
   231
   232# go run cannot handle unknown boolean flags
   233! go run -unknownflag rsc.io/fortune/nonexist@v0.0.1
   234! stderr switching
   235stderr '^flag provided but not defined: -unknownflag'
   236
   237! go run -unknownflag oops rsc.io/fortune/nonexist@v0.0.1
   238! stderr switching
   239stderr '^flag provided but not defined: -unknownflag'
   240
   241# go run can handle unknown flag with argument.
   242! go run -unknown=flag rsc.io/fortune/nonexist@v0.0.1
   243stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   244stderr '^flag provided but not defined: -unknown'
   245
   246# go install m@v should handle queries
   247! go install rsc.io/fortune/nonexist@v0.0
   248stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   249stderr '^go: rsc.io/fortune/nonexist@v0.0: module rsc.io/fortune@v0.0 found \(v0.0.1\), but does not contain package rsc.io/fortune/nonexist'
   250
   251# go run m@v should handle queries
   252! go install rsc.io/fortune/nonexist@v0
   253stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
   254stderr '^go: rsc.io/fortune/nonexist@v0: module rsc.io/fortune@v0 found \(v0.0.1\), but does not contain package rsc.io/fortune/nonexist'
   255
   256# go install m@v should use local toolchain if not upgrading
   257! go install rsc.io/fortune/nonexist@v1
   258! stderr go1.22.9
   259! stderr switching
   260stderr '^go: downloading rsc.io/fortune v1.0.0$'
   261stderr '^go: rsc.io/fortune/nonexist@v1: module rsc.io/fortune@v1 found \(v1.0.0\), but does not contain package rsc.io/fortune/nonexist'
   262
   263# go run m@v should use local toolchain if not upgrading
   264! go run rsc.io/fortune/nonexist@v1
   265! stderr go1.22.9
   266! stderr switching
   267stderr '^go: rsc.io/fortune/nonexist@v1: module rsc.io/fortune@v1 found \(v1.0.0\), but does not contain package rsc.io/fortune/nonexist'

View as plain text