github.com/bhameyie/otto@v0.2.1-0.20160406174117-16052efa52ec/helper/flag/flag_test.go (about)

     1  package flag
     2  
     3  import (
     4  	"flag"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  func TestFilterArgs(t *testing.T) {
    10  	cases := []struct {
    11  		Flags []string
    12  		Args  []string
    13  		Inc   []string
    14  		Exc   []string
    15  		Pos   []string
    16  	}{
    17  		{
    18  			[]string{"foo"},
    19  			[]string{"-foo=bar"},
    20  			[]string{"-foo=bar"},
    21  			[]string{},
    22  			[]string{},
    23  		},
    24  
    25  		{
    26  			[]string{"foo"},
    27  			[]string{"-foo=bar", "-bar=baz"},
    28  			[]string{"-foo=bar"},
    29  			[]string{"-bar=baz"},
    30  			[]string{},
    31  		},
    32  
    33  		{
    34  			[]string{"foo"},
    35  			[]string{"-foo", "bar", "-bar=baz"},
    36  			[]string{"-foo", "bar"},
    37  			[]string{"-bar=baz"},
    38  			[]string{},
    39  		},
    40  
    41  		{
    42  			[]string{"foo"},
    43  			[]string{"hello"},
    44  			[]string{},
    45  			[]string{},
    46  			[]string{"hello"},
    47  		},
    48  
    49  		{
    50  			[]string{"foo"},
    51  			[]string{"-h"},
    52  			[]string{"-h"},
    53  			[]string{},
    54  			[]string{},
    55  		},
    56  	}
    57  
    58  	for _, tc := range cases {
    59  		fs := flag.NewFlagSet("", flag.ContinueOnError)
    60  		for _, a := range tc.Flags {
    61  			fs.String(a, "", "")
    62  		}
    63  
    64  		inc, exc, pos := FilterArgs(fs, tc.Args)
    65  		if !reflect.DeepEqual(inc, tc.Inc) {
    66  			t.Fatalf(
    67  				"Flags: %#v\n\nArgs: %#v\n\nInc: %#v\n\nActual: %#v",
    68  				tc.Flags, tc.Args, tc.Inc, inc)
    69  		}
    70  		if !reflect.DeepEqual(exc, tc.Exc) {
    71  			t.Fatalf(
    72  				"Flags: %#v\n\nArgs: %#v\n\nExc: %#v\n\nActual: %#v",
    73  				tc.Flags, tc.Args, tc.Exc, exc)
    74  		}
    75  		if !reflect.DeepEqual(pos, tc.Pos) {
    76  			t.Fatalf(
    77  				"Flags: %#v\n\nArgs: %#v\n\nPos: %#v\n\nActual: %#v",
    78  				tc.Flags, tc.Args, tc.Pos, pos)
    79  		}
    80  	}
    81  }