[short] skip 'runs go build'

# First run: executable for bar is not cached.
# Make sure it's not called a.out
go tool bar
stdout 'my name is: bar'$GOEXE
! stdout 'a.out'

# Second run: executable is cached. Make sure it
# has the right name.
go tool bar
stdout 'my name is: bar'$GOEXE
! stdout 'a.out'

# Third run: with arguments
# https://go.dev/issue/70509
go tool bar --baz
stdout 'my name is: bar'$GOEXE
! stdout 'a.out'

# Test tool package paths that end in v2
# to ensure we use the second to last component.

# Don't use v2 as the short name of the tool.
! go tool v2
stderr 'go: no such tool "v2"'

# Use the second to last component as the short
# name of the tool.
go tool foo
stdout 'my name is: foo'$GOEXE

# go run should use the same name for the tool
# We need to use a fresh cache, or we'd end up with an executable cache hit
# from when we ran built the tool to run go tool above, and we'd just
# reuse the name from the test case above.
env GOCACHE=$WORK/cache2
go run example.com/foo/v2
stdout 'my name is: foo'$GOEXE

# list aliases for tools
go tool
stdout '^bar \(example.com/foo/bar\)$'
! stdout '^example.com/foo/bar$'
stdout '^foo \(example.com/foo/v2\)$'
! stdout '^example.com/foo/v2$'
stdout '^example.com/foo/noalias$'
! stdout '^noalias \(example.com/foo/noalias\)$'
stdout '^example.com/foo/noalias/noalias$'
! stdout '^noalias \(example.com/foo/noalias\)$'
-- go.mod --
module example.com/foo

go 1.24

tool example.com/foo/bar
tool example.com/foo/v2
tool example.com/foo/noalias
tool example.com/foo/noalias/noalias

require example.com/foo/v2 v2.0.0

replace example.com/foo/v2 => ./v2
-- bar/bar.go --
package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	fmt.Println("my name is:", filepath.Base(os.Args[0]))
}
-- v2/go.mod --
module example.com/foo/v2

go 1.24
-- v2/main.go --
package main

import (
	"fmt"
	"os"
	"path/filepath"
)

func main() {
	fmt.Println("my name is:", filepath.Base(os.Args[0]))
}

-- noalias/noalias.go --
package main

func main() {}
-- noalias/noalias/noalias.go --
pagckage main
func main() {}