github.com/maresnic/mr-kong@v1.0.0/util_test.go (about)

     1  package kong
     2  
     3  import (
     4  	"os"
     5  	"path/filepath"
     6  	"runtime"
     7  	"strings"
     8  	"testing"
     9  
    10  	"github.com/alecthomas/assert/v2"
    11  )
    12  
    13  func TestConfigFlag(t *testing.T) {
    14  	var cli struct {
    15  		Config ConfigFlag
    16  		Flag   string
    17  	}
    18  
    19  	w, err := os.CreateTemp("", "")
    20  	assert.NoError(t, err)
    21  	defer os.Remove(w.Name())
    22  	w.WriteString(`{"flag": "hello world"}`) //nolint: errcheck
    23  	w.Close()
    24  
    25  	p := Must(&cli, Configuration(JSON))
    26  	_, err = p.Parse([]string{"--config", w.Name()})
    27  	assert.NoError(t, err)
    28  	assert.Equal(t, "hello world", cli.Flag)
    29  }
    30  
    31  func TestVersionFlag(t *testing.T) {
    32  	var cli struct {
    33  		Version VersionFlag
    34  	}
    35  	w := &strings.Builder{}
    36  	p := Must(&cli, Vars{"version": "0.1.1"})
    37  	p.Stdout = w
    38  	called := 1
    39  	p.Exit = func(s int) { called = s }
    40  
    41  	_, err := p.Parse([]string{"--version"})
    42  	assert.NoError(t, err)
    43  	assert.Equal(t, "0.1.1", strings.TrimSpace(w.String()))
    44  	assert.Equal(t, 0, called)
    45  }
    46  
    47  func TestChangeDirFlag(t *testing.T) {
    48  	cwd, err := os.Getwd()
    49  	assert.NoError(t, err)
    50  	defer os.Chdir(cwd) //nolint: errcheck
    51  
    52  	dir := t.TempDir()
    53  	file := filepath.Join(dir, "out.txt")
    54  	err = os.WriteFile(file, []byte("foobar"), 0o600)
    55  	assert.NoError(t, err)
    56  
    57  	var cli struct {
    58  		ChangeDir ChangeDirFlag `short:"C"`
    59  		Path      string        `arg:"" type:"existingfile"`
    60  	}
    61  
    62  	p := Must(&cli)
    63  	_, err = p.Parse([]string{"-C", dir, "out.txt"})
    64  	assert.NoError(t, err)
    65  	if runtime.GOOS != "windows" {
    66  		file, err = filepath.EvalSymlinks(file) // Needed because OSX uses a symlinked tmp dir.
    67  		assert.NoError(t, err)
    68  	}
    69  	assert.Equal(t, file, cli.Path)
    70  }