kevinschoon-pomo/vendor/github.com/jawher/mow.cli/options_test.go

142 lines
3.9 KiB
Go

package cli
import (
"os"
"strconv"
"testing"
"github.com/stretchr/testify/require"
)
func TestStringOpt(t *testing.T) {
cmd := &Cmd{optionsIdx: map[string]*opt{}}
a := cmd.String(StringOpt{Name: "a", Value: "test", Desc: ""})
require.Equal(t, "test", *a)
os.Setenv("B", "")
b := cmd.String(StringOpt{Name: "b", Value: "test", EnvVar: "B", Desc: ""})
require.Equal(t, "test", *b)
os.Setenv("B", "mow")
b = cmd.String(StringOpt{Name: "b", Value: "test", EnvVar: "B", Desc: ""})
require.Equal(t, "mow", *b)
os.Setenv("B", "")
os.Setenv("C", "cli")
os.Setenv("D", "mow")
b = cmd.String(StringOpt{Name: "b", Value: "test", EnvVar: "B C D", Desc: ""})
require.Equal(t, "cli", *b)
}
func TestBoolOpt(t *testing.T) {
cmd := &Cmd{optionsIdx: map[string]*opt{}}
a := cmd.Bool(BoolOpt{Name: "a", Value: true, Desc: ""})
require.True(t, *a)
os.Setenv("B", "")
b := cmd.Bool(BoolOpt{Name: "b", Value: false, EnvVar: "B", Desc: ""})
require.False(t, *b)
trueValues := []string{"1", "true", "TRUE"}
for _, tv := range trueValues {
os.Setenv("B", tv)
b = cmd.Bool(BoolOpt{Name: "b", Value: false, EnvVar: "B", Desc: ""})
require.True(t, *b, "env=%s", tv)
}
falseValues := []string{"0", "false", "FALSE", "xyz"}
for _, tv := range falseValues {
os.Setenv("B", tv)
b = cmd.Bool(BoolOpt{Name: "b", Value: false, EnvVar: "B", Desc: ""})
require.False(t, *b, "env=%s", tv)
}
os.Setenv("B", "")
os.Setenv("C", "false")
os.Setenv("D", "true")
b = cmd.Bool(BoolOpt{Name: "b", Value: true, EnvVar: "B C D", Desc: ""})
require.False(t, *b)
}
func TestIntOpt(t *testing.T) {
cmd := &Cmd{optionsIdx: map[string]*opt{}}
a := cmd.Int(IntOpt{Name: "a", Value: -1, Desc: ""})
require.Equal(t, -1, *a)
os.Setenv("B", "")
b := cmd.Int(IntOpt{Name: "b", Value: -1, EnvVar: "B", Desc: ""})
require.Equal(t, -1, *b)
goodValues := []int{1, 0, 33}
for _, tv := range goodValues {
os.Setenv("B", strconv.Itoa(tv))
b := cmd.Int(IntOpt{Name: "b", Value: -1, EnvVar: "B", Desc: ""})
require.Equal(t, tv, *b, "env=%s", tv)
}
badValues := []string{"", "b", "q1", "_"}
for _, tv := range badValues {
os.Setenv("B", tv)
b := cmd.Int(IntOpt{Name: "b", Value: -1, EnvVar: "B", Desc: ""})
require.Equal(t, -1, *b, "env=%s", tv)
}
os.Setenv("B", "")
os.Setenv("C", "42")
os.Setenv("D", "666")
b = cmd.Int(IntOpt{Name: "b", Value: -1, EnvVar: "B C D", Desc: ""})
require.Equal(t, 42, *b)
}
func TestStringsOpt(t *testing.T) {
cmd := &Cmd{optionsIdx: map[string]*opt{}}
v := []string{"test"}
a := cmd.Strings(StringsOpt{Name: "a", Value: v, Desc: ""})
require.Equal(t, v, *a)
os.Setenv("B", "")
b := cmd.Strings(StringsOpt{Name: "b", Value: v, EnvVar: "B", Desc: ""})
require.Equal(t, v, *b)
os.Setenv("B", "mow")
b = cmd.Strings(StringsOpt{Name: "b", Value: nil, EnvVar: "B", Desc: ""})
require.Equal(t, []string{"mow"}, *b)
os.Setenv("B", "mow, cli")
b = cmd.Strings(StringsOpt{Name: "b", Value: nil, EnvVar: "B", Desc: ""})
require.Equal(t, []string{"mow", "cli"}, *b)
os.Setenv("B", "")
os.Setenv("C", "test")
os.Setenv("D", "xxx")
b = cmd.Strings(StringsOpt{Name: "b", Value: nil, EnvVar: "B C D", Desc: ""})
require.Equal(t, v, *b)
}
func TestIntsOpt(t *testing.T) {
cmd := &Cmd{optionsIdx: map[string]*opt{}}
vi := []int{42}
a := cmd.Ints(IntsOpt{Name: "a", Value: vi, Desc: ""})
require.Equal(t, vi, *a)
os.Setenv("B", "")
b := cmd.Ints(IntsOpt{Name: "b", Value: vi, EnvVar: "B", Desc: ""})
require.Equal(t, vi, *b)
os.Setenv("B", "666")
b = cmd.Ints(IntsOpt{Name: "b", Value: nil, EnvVar: "B", Desc: ""})
require.Equal(t, []int{666}, *b)
os.Setenv("B", "1, 2 , 3")
b = cmd.Ints(IntsOpt{Name: "b", Value: nil, EnvVar: "B", Desc: ""})
require.Equal(t, []int{1, 2, 3}, *b)
os.Setenv("B", "")
os.Setenv("C", "abc")
os.Setenv("D", "1, abc")
os.Setenv("E", "42")
os.Setenv("F", "666")
b = cmd.Ints(IntsOpt{Name: "b", Value: nil, EnvVar: "B C D E F", Desc: ""})
require.Equal(t, vi, *b)
}