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 }