# GOCACHEPROG unset
env GOCACHEPROG=

go env
stdout 'GOCACHEPROG=''?''?'

go env -changed
! stdout 'GOCACHEPROG'

go env -changed -json
! stdout 'GOCACHEPROG'

# GOCACHEPROG set
[short] skip 'compiles and runs a go program'

go build -o cacheprog$GOEXE cacheprog.go

env GOCACHEPROG=$GOPATH/src/cacheprog$GOEXE

go env
stdout 'GOCACHEPROG=''?'$GOCACHEPROG'''?'

go env -changed
stdout 'GOCACHEPROG=''?'$GOCACHEPROG'''?'

go env -changed -json
stdout '"GOCACHEPROG": ".*cacheprog'$GOEXE'"'

-- cacheprog.go --
// This is a minimal GOCACHEPROG program that can't actually do anything but exit.
package main

import (
    "encoding/json"
    "os"
)

func main() {
    json.NewEncoder(os.Stdout).Encode(map[string][]string{"KnownCommands": {"close"}})
    var res struct{}
    json.NewDecoder(os.Stdin).Decode(&res)
}