1package getopt 2 3import ( 4 "bytes" 5 "fmt" 6 "strings" 7 "testing" 8 "time" 9) 10 11type flagValue bool 12 13func (f *flagValue) Set(value string, opt Option) error { 14 switch strings.ToLower(value) { 15 case "true", "t", "on", "1": 16 *f = true 17 case "false", "f", "off", "0": 18 *f = false 19 default: 20 return fmt.Errorf("invalid flagValue %q", value) 21 } 22 return nil 23} 24func (f *flagValue) String() string { 25 return fmt.Sprint(bool(*f)) 26} 27 28func TestHelpDefaults(t *testing.T) { 29 HelpColumn = 40 30 set := New() 31 bf := false 32 bt := true 33 set.FlagLong(&bf, "bool_false", 'f', "false bool value") 34 set.FlagLong(&bt, "bool_true", 't', "true bool value") 35 i := int(0) 36 i8 := int8(0) 37 i16 := int16(0) 38 i32 := int32(0) 39 i64 := int64(0) 40 si := int(1) 41 si8 := int8(8) 42 si16 := int16(16) 43 si32 := int32(32) 44 si64 := int64(64) 45 ui := uint(0) 46 ui8 := uint8(0) 47 ui16 := uint16(0) 48 ui32 := uint32(0) 49 ui64 := uint64(0) 50 sui := uint(1) 51 sui8 := uint8(8) 52 sui16 := uint16(16) 53 sui32 := uint32(32) 54 sui64 := uint64(64) 55 56 set.FlagLong(&i, "int", 0, "int value") 57 set.FlagLong(&si, "int_set", 0, "set int value") 58 set.FlagLong(&i8, "int8", 0, "int8 value") 59 set.FlagLong(&si8, "int8_set", 0, "set int8 value") 60 set.FlagLong(&i16, "int16", 0, "int16 value") 61 set.FlagLong(&si16, "int16_set", 0, "set int16 value") 62 set.FlagLong(&i32, "int32", 0, "int32 value") 63 set.FlagLong(&si32, "int32_set", 0, "set int32 value") 64 set.FlagLong(&i64, "int64", 0, "int64 value") 65 set.FlagLong(&si64, "int64_set", 0, "set int64 value") 66 67 set.FlagLong(&ui, "uint", 0, "uint value") 68 set.FlagLong(&sui, "uint_set", 0, "set uint value") 69 set.FlagLong(&ui8, "uint8", 0, "uint8 value") 70 set.FlagLong(&sui8, "uint8_set", 0, "set uint8 value") 71 set.FlagLong(&ui16, "uint16", 0, "uint16 value") 72 set.FlagLong(&sui16, "uint16_set", 0, "set uint16 value") 73 set.FlagLong(&ui32, "uint32", 0, "uint32 value") 74 set.FlagLong(&sui32, "uint32_set", 0, "set uint32 value") 75 set.FlagLong(&ui64, "uint64", 0, "uint64 value") 76 set.FlagLong(&sui64, "uint64_set", 0, "set uint64 value") 77 78 f32 := float32(0) 79 f64 := float64(0) 80 sf32 := float32(3.2) 81 sf64 := float64(6.4) 82 83 set.FlagLong(&f32, "float32", 0, "float32 value") 84 set.FlagLong(&sf32, "float32_set", 0, "set float32 value") 85 set.FlagLong(&f64, "float64", 0, "float64 value") 86 set.FlagLong(&sf64, "float64_set", 0, "set float64 value") 87 88 d := time.Duration(0) 89 sd := time.Duration(time.Second) 90 91 set.FlagLong(&d, "duration", 0, "duration value") 92 set.FlagLong(&sd, "duration_set", 0, "set duration value") 93 94 str := "" 95 sstr := "string" 96 set.FlagLong(&str, "string", 0, "string value") 97 set.FlagLong(&sstr, "string_set", 0, "set string value") 98 99 var fv flagValue 100 set.FlagLong(&fv, "vbool", 0, "value bool").SetFlag() 101 102 var fvo flagValue = true 103 set.FlagLong(&fvo, "vbool_on", 0, "value bool").SetFlag() 104 105 required := 17 106 set.FlagLong(&required, "required", 0, "a required option").Mandatory() 107 108 var a, b bool 109 set.Flag(&a, 'a', "use method A").SetGroup("method") 110 set.Flag(&b, 'b', "use method B").SetGroup("method") 111 112 want := ` 113 -a use method A {method} 114 -b use method B {method} 115 --duration=value duration value 116 --duration_set=value set duration value [1s] 117 -f, --bool_false false bool value 118 --float32=value float32 value 119 --float32_set=value set float32 value [3.2] 120 --float64=value float64 value 121 --float64_set=value set float64 value [6.4] 122 --int=value int value 123 --int16=value int16 value 124 --int16_set=value set int16 value [16] 125 --int32=value int32 value 126 --int32_set=value set int32 value [32] 127 --int64=value int64 value 128 --int64_set=value set int64 value [64] 129 --int8=value int8 value 130 --int8_set=value set int8 value [8] 131 --int_set=value set int value [1] 132 --required=value a required option [17] (required) 133 --string=value string value 134 --string_set=value set string value [string] 135 -t, --bool_true true bool value [true] 136 --uint=value uint value 137 --uint16=value uint16 value 138 --uint16_set=value set uint16 value [16] 139 --uint32=value uint32 value 140 --uint32_set=value set uint32 value [32] 141 --uint64=value uint64 value 142 --uint64_set=value set uint64 value [64] 143 --uint8=value uint8 value 144 --uint8_set=value set uint8 value [8] 145 --uint_set=value set uint value [1] 146 --vbool value bool 147 --vbool_on value bool [true] 148`[1:] 149 150 var buf bytes.Buffer 151 set.PrintOptions(&buf) 152 if got := buf.String(); got != want { 153 t.Errorf("got:\n%s\nwant:\n%s", got, want) 154 } 155} 156