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  }