1package pgs 2 3import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8) 9 10func TestParameters_OutputPath(t *testing.T) { 11 t.Parallel() 12 13 p := Parameters{} 14 assert.Equal(t, ".", p.OutputPath()) 15 p.SetOutputPath("foo") 16 assert.Equal(t, "foo", p.OutputPath()) 17} 18 19func TestParseParameters(t *testing.T) { 20 t.Parallel() 21 22 tests := []struct { 23 in string 24 out Parameters 25 }{ 26 { 27 "foo=bar", 28 Parameters{"foo": "bar"}, 29 }, 30 { 31 "fizz", 32 Parameters{"fizz": ""}, 33 }, 34 { 35 "foo=bar,fizz=buzz", 36 Parameters{"foo": "bar", "fizz": "buzz"}, 37 }, 38 { 39 "foo=bar,foo", 40 Parameters{"foo": ""}, 41 }, 42 } 43 44 for _, test := range tests { 45 tc := test 46 t.Run(tc.in, func(t *testing.T) { 47 assert.Equal(t, tc.out, ParseParameters(tc.in)) 48 }) 49 } 50} 51 52func TestParameters_String(t *testing.T) { 53 t.Parallel() 54 55 tests := []struct { 56 in Parameters 57 out string 58 }{ 59 { 60 Parameters{"foo": "bar"}, 61 "foo=bar", 62 }, 63 { 64 Parameters{"fizz": ""}, 65 "fizz", 66 }, 67 { 68 Parameters{"foo": "bar", "fizz": ""}, 69 "fizz,foo=bar", 70 }, 71 } 72 73 for _, test := range tests { 74 tc := test 75 t.Run(tc.out, func(t *testing.T) { 76 assert.Equal(t, tc.out, tc.in.String()) 77 }) 78 } 79} 80 81func TestParameters_Str(t *testing.T) { 82 t.Parallel() 83 84 p := Parameters{"foo": "bar"} 85 86 assert.Equal(t, "bar", p.Str("foo")) 87 assert.Empty(t, p.Str("baz")) 88 assert.Equal(t, "fizz", p.StrDefault("baz", "fizz")) 89 90 p.SetStr("baz", "buzz") 91 assert.Equal(t, "buzz", p.Str("baz")) 92} 93 94func TestParameters_Int(t *testing.T) { 95 t.Parallel() 96 97 p := Parameters{"foo": "456", "fizz": "buzz"} 98 99 out, err := p.Int("foo") 100 assert.NoError(t, err) 101 assert.Equal(t, 456, out) 102 103 _, err = p.Int("fizz") 104 assert.Error(t, err) 105 106 out, err = p.Int("baz") 107 assert.NoError(t, err) 108 assert.Zero(t, out) 109 110 out, err = p.IntDefault("baz", 123) 111 assert.NoError(t, err) 112 assert.Equal(t, 123, out) 113 114 p.SetInt("baz", 789) 115 out, err = p.Int("baz") 116 assert.NoError(t, err) 117 assert.Equal(t, 789, out) 118} 119 120func TestParameters_Uint(t *testing.T) { 121 t.Parallel() 122 123 p := Parameters{"foo": "456", "fizz": "-789"} 124 125 out, err := p.Uint("foo") 126 assert.NoError(t, err) 127 assert.Equal(t, uint(456), out) 128 129 _, err = p.Uint("fizz") 130 assert.Error(t, err) 131 132 out, err = p.Uint("buzz") 133 assert.NoError(t, err) 134 assert.Zero(t, out) 135 136 out, err = p.UintDefault("baz", 123) 137 assert.NoError(t, err) 138 assert.Equal(t, uint(123), out) 139 140 p.SetUint("baz", 999) 141 out, err = p.Uint("baz") 142 assert.NoError(t, err) 143 assert.Equal(t, uint(999), out) 144} 145 146func TestParameters_Float(t *testing.T) { 147 t.Parallel() 148 149 p := Parameters{"foo": "1.23", "fizz": "buzz"} 150 151 out, err := p.Float("foo") 152 assert.NoError(t, err) 153 assert.Equal(t, 1.23, out) 154 155 _, err = p.Float("fizz") 156 assert.Error(t, err) 157 158 out, err = p.Float("baz") 159 assert.NoError(t, err) 160 assert.Zero(t, out) 161 162 out, err = p.FloatDefault("baz", 4.56) 163 assert.NoError(t, err) 164 assert.Equal(t, 4.56, out) 165 166 p.SetFloat("baz", -7.89) 167 out, err = p.Float("baz") 168 assert.NoError(t, err) 169 assert.Equal(t, -7.89, out) 170} 171 172func TestParameters_Bool(t *testing.T) { 173 t.Parallel() 174 175 p := Parameters{"foo": "true", "bar": "", "fizz": "buzz"} 176 177 out, err := p.Bool("foo") 178 assert.NoError(t, err) 179 assert.True(t, out) 180 181 out, err = p.Bool("bar") 182 assert.NoError(t, err) 183 assert.True(t, out) 184 185 _, err = p.Bool("fizz") 186 assert.Error(t, err) 187 188 out, err = p.Bool("baz") 189 assert.NoError(t, err) 190 assert.False(t, out) 191 192 out, err = p.BoolDefault("baz", true) 193 assert.NoError(t, err) 194 assert.True(t, out) 195 196 p.SetBool("baz", true) 197 out, err = p.Bool("baz") 198 assert.NoError(t, err) 199 assert.True(t, out) 200} 201 202func TestParameters_Duration(t *testing.T) { 203 t.Parallel() 204 205 p := Parameters{"foo": "123s", "fizz": "buzz"} 206 207 out, err := p.Duration("foo") 208 assert.NoError(t, err) 209 assert.Equal(t, 123*time.Second, out) 210 211 _, err = p.Duration("fizz") 212 assert.Error(t, err) 213 214 out, err = p.Duration("baz") 215 assert.NoError(t, err) 216 assert.Zero(t, out) 217 218 out, err = p.DurationDefault("baz", 456*time.Second) 219 assert.NoError(t, err) 220 assert.Equal(t, 456*time.Second, out) 221 222 p.SetDuration("baz", 789*time.Second) 223 out, err = p.Duration("baz") 224 assert.NoError(t, err) 225 assert.Equal(t, 789*time.Second, out) 226} 227 228func TestParameters_Clone(t *testing.T) { 229 t.Parallel() 230 231 orig := Parameters{"foo": "bar", "fizz": "buzz"} 232 233 clone := orig.Clone() 234 assert.Equal(t, orig, clone) 235 236 clone.SetStr("foo", "baz") 237 assert.NotEqual(t, orig, clone) 238} 239