1package kingpin 2 3import ( 4 "io/ioutil" 5 "os" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9) 10 11func TestParserExpandFromFile(t *testing.T) { 12 f, err := ioutil.TempFile("", "") 13 assert.NoError(t, err) 14 defer os.Remove(f.Name()) 15 f.WriteString("hello\nworld\n") 16 f.Close() 17 18 app := New("test", "") 19 arg0 := app.Arg("arg0", "").String() 20 arg1 := app.Arg("arg1", "").String() 21 22 _, err = app.Parse([]string{"@" + f.Name()}) 23 assert.NoError(t, err) 24 assert.Equal(t, "hello", *arg0) 25 assert.Equal(t, "world", *arg1) 26} 27 28func TestParserExpandFromFileLeadingArg(t *testing.T) { 29 f, err := ioutil.TempFile("", "") 30 assert.NoError(t, err) 31 defer os.Remove(f.Name()) 32 f.WriteString("hello\nworld\n") 33 f.Close() 34 35 app := New("test", "") 36 arg0 := app.Arg("arg0", "").String() 37 arg1 := app.Arg("arg1", "").String() 38 arg2 := app.Arg("arg2", "").String() 39 40 _, err = app.Parse([]string{"prefix", "@" + f.Name()}) 41 assert.NoError(t, err) 42 assert.Equal(t, "prefix", *arg0) 43 assert.Equal(t, "hello", *arg1) 44 assert.Equal(t, "world", *arg2) 45} 46 47func TestParserExpandFromFileTrailingArg(t *testing.T) { 48 f, err := ioutil.TempFile("", "") 49 assert.NoError(t, err) 50 defer os.Remove(f.Name()) 51 f.WriteString("hello\nworld\n") 52 f.Close() 53 54 app := New("test", "") 55 arg0 := app.Arg("arg0", "").String() 56 arg1 := app.Arg("arg1", "").String() 57 arg2 := app.Arg("arg2", "").String() 58 59 _, err = app.Parse([]string{"@" + f.Name(), "suffix"}) 60 assert.NoError(t, err) 61 assert.Equal(t, "hello", *arg0) 62 assert.Equal(t, "world", *arg1) 63 assert.Equal(t, "suffix", *arg2) 64} 65 66func TestParserExpandFromFileMultipleSurroundingArgs(t *testing.T) { 67 f, err := ioutil.TempFile("", "") 68 assert.NoError(t, err) 69 defer os.Remove(f.Name()) 70 f.WriteString("hello\nworld\n") 71 f.Close() 72 73 app := New("test", "") 74 arg0 := app.Arg("arg0", "").String() 75 arg1 := app.Arg("arg1", "").String() 76 arg2 := app.Arg("arg2", "").String() 77 arg3 := app.Arg("arg3", "").String() 78 79 _, err = app.Parse([]string{"prefix", "@" + f.Name(), "suffix"}) 80 assert.NoError(t, err) 81 assert.Equal(t, "prefix", *arg0) 82 assert.Equal(t, "hello", *arg1) 83 assert.Equal(t, "world", *arg2) 84 assert.Equal(t, "suffix", *arg3) 85} 86 87func TestParserExpandFromFileMultipleFlags(t *testing.T) { 88 f, err := ioutil.TempFile("", "") 89 assert.NoError(t, err) 90 defer os.Remove(f.Name()) 91 f.WriteString("--flag1=f1\n--flag2=f2\n") 92 f.Close() 93 94 app := New("test", "") 95 flag0 := app.Flag("flag0", "").String() 96 flag1 := app.Flag("flag1", "").String() 97 flag2 := app.Flag("flag2", "").String() 98 flag3 := app.Flag("flag3", "").String() 99 100 _, err = app.Parse([]string{"--flag0=f0", "@" + f.Name(), "--flag3=f3"}) 101 assert.NoError(t, err) 102 assert.Equal(t, "f0", *flag0) 103 assert.Equal(t, "f1", *flag1) 104 assert.Equal(t, "f2", *flag2) 105 assert.Equal(t, "f3", *flag3) 106} 107 108func TestParseContextPush(t *testing.T) { 109 app := New("test", "") 110 app.Command("foo", "").Command("bar", "") 111 c := tokenize([]string{"foo", "bar"}, false) 112 a := c.Next() 113 assert.Equal(t, TokenArg, a.Type) 114 b := c.Next() 115 assert.Equal(t, TokenArg, b.Type) 116 c.Push(b) 117 c.Push(a) 118 a = c.Next() 119 assert.Equal(t, "foo", a.Value) 120 b = c.Next() 121 assert.Equal(t, "bar", b.Value) 122} 123