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 5package pflag 6 7import ( 8 "bytes" 9 "fmt" 10 "strconv" 11 "testing" 12) 13 14func setUpS2I64FlagSet(s2ip *map[string]int64) *FlagSet { 15 f := NewFlagSet("test", ContinueOnError) 16 f.StringToInt64Var(s2ip, "s2i", map[string]int64{}, "Command separated ls2it!") 17 return f 18} 19 20func setUpS2I64FlagSetWithDefault(s2ip *map[string]int64) *FlagSet { 21 f := NewFlagSet("test", ContinueOnError) 22 f.StringToInt64Var(s2ip, "s2i", map[string]int64{"a": 1, "b": 2}, "Command separated ls2it!") 23 return f 24} 25 26func createS2I64Flag(vals map[string]int64) 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.FormatInt(v, 10)) 36 i++ 37 } 38 return buf.String() 39} 40 41func TestEmptyS2I64(t *testing.T) { 42 var s2i map[string]int64 43 f := setUpS2I64FlagSet(&s2i) 44 err := f.Parse([]string{}) 45 if err != nil { 46 t.Fatal("expected no error; got", err) 47 } 48 49 getS2I, err := f.GetStringToInt64("s2i") 50 if err != nil { 51 t.Fatal("got an error from GetStringToInt64():", 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 58func TestS2I64(t *testing.T) { 59 var s2i map[string]int64 60 f := setUpS2I64FlagSet(&s2i) 61 62 vals := map[string]int64{"a": 1, "b": 2, "d": 4, "c": 3} 63 arg := fmt.Sprintf("--s2i=%s", createS2I64Flag(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.GetStringToInt64("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 GetStringToInt64", k, vals[k], v) 80 } 81 } 82} 83 84func TestS2I64Default(t *testing.T) { 85 var s2i map[string]int64 86 f := setUpS2I64FlagSetWithDefault(&s2i) 87 88 vals := map[string]int64{"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.GetStringToInt64("s2i") 101 if err != nil { 102 t.Fatal("got an error from GetStringToInt64():", err) 103 } 104 for k, v := range getS2I { 105 if vals[k] != v { 106 t.Fatalf("expected s2i[%s] to be %d from GetStringToInt64 but got: %d", k, vals[k], v) 107 } 108 } 109} 110 111func TestS2I64WithDefault(t *testing.T) { 112 var s2i map[string]int64 113 f := setUpS2I64FlagSetWithDefault(&s2i) 114 115 vals := map[string]int64{"a": 1, "b": 2} 116 arg := fmt.Sprintf("--s2i=%s", createS2I64Flag(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.GetStringToInt64("s2i") 128 if err != nil { 129 t.Fatal("got an error from GetStringToInt64():", err) 130 } 131 for k, v := range getS2I { 132 if vals[k] != v { 133 t.Fatalf("expected s2i[%s] to be %d from GetStringToInt64 but got: %d", k, vals[k], v) 134 } 135 } 136} 137 138func TestS2I64CalledTwice(t *testing.T) { 139 var s2i map[string]int64 140 f := setUpS2I64FlagSet(&s2i) 141 142 in := []string{"a=1,b=2", "b=3"} 143 expected := map[string]int64{"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