...

Source file src/github.com/spf13/pflag/string_to_int_test.go

Documentation: github.com/spf13/pflag

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of ths2i source code s2i governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package pflag
     6  
     7  import (
     8  	"bytes"
     9  	"fmt"
    10  	"strconv"
    11  	"testing"
    12  )
    13  
    14  func setUpS2IFlagSet(s2ip *map[string]int) *FlagSet {
    15  	f := NewFlagSet("test", ContinueOnError)
    16  	f.StringToIntVar(s2ip, "s2i", map[string]int{}, "Command separated ls2it!")
    17  	return f
    18  }
    19  
    20  func setUpS2IFlagSetWithDefault(s2ip *map[string]int) *FlagSet {
    21  	f := NewFlagSet("test", ContinueOnError)
    22  	f.StringToIntVar(s2ip, "s2i", map[string]int{"a": 1, "b": 2}, "Command separated ls2it!")
    23  	return f
    24  }
    25  
    26  func createS2IFlag(vals map[string]int) string {
    27  	var buf bytes.Buffer
    28  	i := 0
    29  	for k, v := range vals {
    30  		if i > 0 {
    31  			buf.WriteRune(',')
    32  		}
    33  		buf.WriteString(k)
    34  		buf.WriteRune('=')
    35  		buf.WriteString(strconv.Itoa(v))
    36  		i++
    37  	}
    38  	return buf.String()
    39  }
    40  
    41  func TestEmptyS2I(t *testing.T) {
    42  	var s2i map[string]int
    43  	f := setUpS2IFlagSet(&s2i)
    44  	err := f.Parse([]string{})
    45  	if err != nil {
    46  		t.Fatal("expected no error; got", err)
    47  	}
    48  
    49  	getS2I, err := f.GetStringToInt("s2i")
    50  	if err != nil {
    51  		t.Fatal("got an error from GetStringToInt():", err)
    52  	}
    53  	if len(getS2I) != 0 {
    54  		t.Fatalf("got s2i %v with len=%d but expected length=0", getS2I, len(getS2I))
    55  	}
    56  }
    57  
    58  func TestS2I(t *testing.T) {
    59  	var s2i map[string]int
    60  	f := setUpS2IFlagSet(&s2i)
    61  
    62  	vals := map[string]int{"a": 1, "b": 2, "d": 4, "c": 3}
    63  	arg := fmt.Sprintf("--s2i=%s", createS2IFlag(vals))
    64  	err := f.Parse([]string{arg})
    65  	if err != nil {
    66  		t.Fatal("expected no error; got", err)
    67  	}
    68  	for k, v := range s2i {
    69  		if vals[k] != v {
    70  			t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v)
    71  		}
    72  	}
    73  	getS2I, err := f.GetStringToInt("s2i")
    74  	if err != nil {
    75  		t.Fatalf("got error: %v", err)
    76  	}
    77  	for k, v := range getS2I {
    78  		if vals[k] != v {
    79  			t.Fatalf("expected s2i[%s] to be %d but got: %d from GetStringToInt", k, vals[k], v)
    80  		}
    81  	}
    82  }
    83  
    84  func TestS2IDefault(t *testing.T) {
    85  	var s2i map[string]int
    86  	f := setUpS2IFlagSetWithDefault(&s2i)
    87  
    88  	vals := map[string]int{"a": 1, "b": 2}
    89  
    90  	err := f.Parse([]string{})
    91  	if err != nil {
    92  		t.Fatal("expected no error; got", err)
    93  	}
    94  	for k, v := range s2i {
    95  		if vals[k] != v {
    96  			t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v)
    97  		}
    98  	}
    99  
   100  	getS2I, err := f.GetStringToInt("s2i")
   101  	if err != nil {
   102  		t.Fatal("got an error from GetStringToInt():", err)
   103  	}
   104  	for k, v := range getS2I {
   105  		if vals[k] != v {
   106  			t.Fatalf("expected s2i[%s] to be %d from GetStringToInt but got: %d", k, vals[k], v)
   107  		}
   108  	}
   109  }
   110  
   111  func TestS2IWithDefault(t *testing.T) {
   112  	var s2i map[string]int
   113  	f := setUpS2IFlagSetWithDefault(&s2i)
   114  
   115  	vals := map[string]int{"a": 1, "b": 2}
   116  	arg := fmt.Sprintf("--s2i=%s", createS2IFlag(vals))
   117  	err := f.Parse([]string{arg})
   118  	if err != nil {
   119  		t.Fatal("expected no error; got", err)
   120  	}
   121  	for k, v := range s2i {
   122  		if vals[k] != v {
   123  			t.Fatalf("expected s2i[%s] to be %d but got: %d", k, vals[k], v)
   124  		}
   125  	}
   126  
   127  	getS2I, err := f.GetStringToInt("s2i")
   128  	if err != nil {
   129  		t.Fatal("got an error from GetStringToInt():", err)
   130  	}
   131  	for k, v := range getS2I {
   132  		if vals[k] != v {
   133  			t.Fatalf("expected s2i[%s] to be %d from GetStringToInt but got: %d", k, vals[k], v)
   134  		}
   135  	}
   136  }
   137  
   138  func TestS2ICalledTwice(t *testing.T) {
   139  	var s2i map[string]int
   140  	f := setUpS2IFlagSet(&s2i)
   141  
   142  	in := []string{"a=1,b=2", "b=3"}
   143  	expected := map[string]int{"a": 1, "b": 3}
   144  	argfmt := "--s2i=%s"
   145  	arg1 := fmt.Sprintf(argfmt, in[0])
   146  	arg2 := fmt.Sprintf(argfmt, in[1])
   147  	err := f.Parse([]string{arg1, arg2})
   148  	if err != nil {
   149  		t.Fatal("expected no error; got", err)
   150  	}
   151  	for i, v := range s2i {
   152  		if expected[i] != v {
   153  			t.Fatalf("expected s2i[%s] to be %d but got: %d", i, expected[i], v)
   154  		}
   155  	}
   156  }
   157  

View as plain text