blob: 44cbb9c3f7339cd456140389293e47f673670158 [file] [log] [blame]
// Copyright 2022 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"cmd/go/internal/base"
"os"
"strings"
"testing"
)
func TestChdir(t *testing.T) {
// We want -C to apply to every go subcommand.
// Test that every command either has a -C flag registered
// or has CustomFlags set. In the latter case, the command
// must be explicitly tested in TestScript/chdir.
script, err := os.ReadFile("testdata/script/chdir.txt")
if err != nil {
t.Fatal(err)
}
var walk func(string, *base.Command)
walk = func(name string, cmd *base.Command) {
if len(cmd.Commands) > 0 {
for _, sub := range cmd.Commands {
walk(name+" "+sub.Name(), sub)
}
return
}
if !cmd.Runnable() {
return
}
if cmd.CustomFlags {
if !strings.Contains(string(script), "# "+name+"\n") {
t.Errorf("%s has custom flags, not tested in testdata/script/chdir.txt", name)
}
return
}
f := cmd.Flag.Lookup("C")
if f == nil {
t.Errorf("%s has no -C flag", name)
} else if f.Usage != "AddChdirFlag" {
t.Errorf("%s has -C flag but not from AddChdirFlag", name)
}
}
walk("go", base.Go)
}