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  }