// 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) }