github.com/bilus/oya@v0.0.3-0.20190301162104-da4acbd394c6/pkg/flags/flags_test.go (about) 1 package flags_test 2 3 import ( 4 "testing" 5 6 "github.com/bilus/oya/pkg/flags" 7 tu "github.com/bilus/oya/testutil" 8 ) 9 10 func TestEmpty(t *testing.T) { 11 positionalArgs, flags, err := flags.Parse(nil) 12 tu.AssertNoErr(t, err, "flag.Parse failed") 13 if len(positionalArgs) > 0 { 14 t.Errorf("Expected no positional arguments, actual: %v", len(positionalArgs)) 15 } 16 if len(flags) > 0 { 17 t.Errorf("Expected no positional arguments, actual: %v", len(flags)) 18 } 19 } 20 21 func TestPositionalArgs(t *testing.T) { 22 positionalArgs, flags, err := flags.Parse([]string{"arg1", "arg2"}) 23 tu.AssertNoErr(t, err, "flag.Parse failed") 24 if len(positionalArgs) != 2 { 25 t.Errorf("Expected 2 positional arguments, actual: %v", len(positionalArgs)) 26 } 27 tu.AssertObjectsEqual(t, []string{"arg1", "arg2"}, positionalArgs) 28 29 if len(flags) > 0 { 30 t.Errorf("Expected no positional arguments, actual: %v", len(flags)) 31 } 32 } 33 34 func TestSwitchFlags(t *testing.T) { 35 positionalArgs, flags, err := flags.Parse([]string{"--switch1", "--switch2"}) 36 tu.AssertNoErr(t, err, "flag.Parse failed") 37 if len(positionalArgs) > 0 { 38 t.Errorf("Expected no positional arguments, actual: %v", len(positionalArgs)) 39 } 40 if len(flags) != 2 { 41 t.Errorf("Expected 2 flags, actual: %v", len(flags)) 42 } 43 assertFlagSet(t, flags, "switch1") 44 assertFlagSet(t, flags, "switch2") 45 } 46 47 // Repeating the same flag is not supported yet. This may change. 48 func TestRepeatedFlag(t *testing.T) { 49 _, _, err := flags.Parse([]string{"--switch", "--switch"}) 50 if err == nil { 51 t.Errorf("Expected an error for a repeated flag") 52 } 53 } 54 55 func TestValuesFlags(t *testing.T) { 56 positionalArgs, flags, err := flags.Parse([]string{"--value1=123", "--value2=42"}) 57 tu.AssertNoErr(t, err, "flag.Parse failed") 58 if len(positionalArgs) > 0 { 59 t.Errorf("Expected no positional arguments, actual: %v", len(positionalArgs)) 60 } 61 if len(flags) != 2 { 62 t.Errorf("Expected 2 flags, actual: %v", len(flags)) 63 } 64 assertFlagEqual(t, flags, "value1", "123") 65 assertFlagEqual(t, flags, "value2", "42") 66 } 67 68 func TestFullMix(t *testing.T) { 69 positionalArgs, flags, err := flags.Parse([]string{"some-arg", "--some-value=123", "--some-switch"}) 70 tu.AssertNoErr(t, err, "flag.Parse failed") 71 if len(positionalArgs) != 1 { 72 t.Errorf("Expected 1 positional argument, actual: %v", len(positionalArgs)) 73 } 74 if len(flags) != 2 { 75 t.Errorf("Expected 2 flags, actual: %v", len(flags)) 76 } 77 assertFlagSet(t, flags, "some-value") 78 assertFlagSet(t, flags, "some-switch") 79 assertFlagEqual(t, flags, "some-value", "123") 80 } 81 82 func assertFlagSet(t *testing.T, flags map[string]string, flag string) { 83 _, ok := flags[flag] 84 if !ok { 85 t.Errorf("Expected flag %q to be set", flag) 86 } 87 } 88 89 func assertFlagEqual(t *testing.T, flags map[string]string, flag, expectedValue string) { 90 actualValue, ok := flags[flag] 91 if !ok { 92 t.Errorf("Expected flag %q to be set", flag) 93 } 94 if actualValue != expectedValue { 95 t.Errorf("Expected flag %q to be set to %q, actual: %q", flag, expectedValue, actualValue) 96 } 97 }