oss.indeed.com/go/go-opine@v1.3.0/internal/cmd/util_test.go (about) 1 package cmd 2 3 import ( 4 "errors" 5 "flag" 6 "os" 7 "path/filepath" 8 "testing" 9 10 "github.com/google/subcommands" 11 12 "github.com/stretchr/testify/require" 13 ) 14 15 func Test_executeNoArgs(t *testing.T) { 16 f := flag.NewFlagSet("foo", flag.ContinueOnError) 17 err := f.Parse(nil) 18 require.NoError(t, err) 19 called := false 20 exitStatus := executeNoArgs(f, func() error { called = true; return nil }) 21 require.True(t, called) 22 require.Equal(t, subcommands.ExitSuccess, exitStatus) 23 } 24 25 func Test_executeNoArgs_argsProvided(t *testing.T) { 26 f := flag.NewFlagSet("foo", flag.ContinueOnError) 27 err := f.Parse([]string{"somearg"}) 28 require.NoError(t, err) 29 called := false 30 exitStatus := executeNoArgs(f, func() error { called = true; return nil }) 31 require.False(t, called) 32 require.Equal(t, subcommands.ExitUsageError, exitStatus) 33 } 34 35 func Test_executeNoArgs_implReturnsError(t *testing.T) { 36 f := flag.NewFlagSet("foo", flag.ContinueOnError) 37 err := f.Parse(nil) 38 require.NoError(t, err) 39 called := false 40 exitStatus := executeNoArgs(f, func() error { called = true; return errors.New("i'm broken") }) 41 require.True(t, called) 42 require.Equal(t, subcommands.ExitFailure, exitStatus) 43 } 44 45 // pushd is a test utility that changes the current directory and returns a 46 // function (suitable for defer) that will change it back. 47 func pushd(t *testing.T, elem ...string) func() { 48 prevDir, err := os.Getwd() 49 require.NoError(t, err) 50 err = os.Chdir(filepath.Join(elem...)) 51 require.NoError(t, err) 52 return func() { 53 err := os.Chdir(prevDir) 54 require.NoError(t, err) 55 } 56 }