[!windows] [short] stop 'this test only applies to Windows'

go build run_go.go
exec ./run_go$GOEXE $GOPATH $GOPATH/src/vend/hello
stdout 'hello, world'

-- run_go.go --
package main

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

func changeVolume(s string, f func(s string) string) string {
	vol := filepath.VolumeName(s)
	return f(vol) + s[len(vol):]
}

func main() {
	gopath := changeVolume(os.Args[1], strings.ToLower)
	dir := changeVolume(os.Args[2], strings.ToUpper)
	cmd := exec.Command("go", "run", "hello.go")
	cmd.Dir = dir
	cmd.Env = append(os.Environ(), "GOPATH="+gopath)
	cmd.Stdout = os.Stdout
	cmd.Stderr = os.Stderr
	if err := cmd.Run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

-- vend/hello/hello.go --
package main

import (
	"fmt"
	"strings" // really ../vendor/strings
)

func main() {
	fmt.Printf("%s\n", strings.Msg)
}
-- vend/vendor/strings/msg.go --
package strings

var Msg = "hello, world"
