64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
|
package config
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestIsZero(t *testing.T) {
|
||
|
for _, tt := range []struct {
|
||
|
c interface{}
|
||
|
empty bool
|
||
|
}{
|
||
|
{struct{}{}, true},
|
||
|
{struct{ a, b string }{}, true},
|
||
|
{struct{ A, b string }{}, true},
|
||
|
{struct{ A, B string }{}, true},
|
||
|
{struct{ A string }{A: "hello"}, false},
|
||
|
{struct{ A int }{}, true},
|
||
|
{struct{ A int }{A: 1}, false},
|
||
|
} {
|
||
|
if empty := IsZero(tt.c); tt.empty != empty {
|
||
|
t.Errorf("bad result (%q): want %q, got %q", tt.c, tt.empty, empty)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAssertValid(t *testing.T) {
|
||
|
for _, tt := range []struct {
|
||
|
c interface{}
|
||
|
err error
|
||
|
}{
|
||
|
{struct{}{}, nil},
|
||
|
{struct {
|
||
|
A, b string `valid:"1,2"`
|
||
|
}{}, nil},
|
||
|
{struct {
|
||
|
A, b string `valid:"1,2"`
|
||
|
}{A: "1", b: "2"}, nil},
|
||
|
{struct {
|
||
|
A, b string `valid:"1,2"`
|
||
|
}{A: "1", b: "hello"}, nil},
|
||
|
{struct {
|
||
|
A, b string `valid:"1,2"`
|
||
|
}{A: "hello", b: "2"}, errors.New("invalid value \"hello\" for option \"A\" (valid options: \"1,2\")")},
|
||
|
{struct {
|
||
|
A, b int `valid:"1,2"`
|
||
|
}{}, nil},
|
||
|
{struct {
|
||
|
A, b int `valid:"1,2"`
|
||
|
}{A: 1, b: 2}, nil},
|
||
|
{struct {
|
||
|
A, b int `valid:"1,2"`
|
||
|
}{A: 1, b: 9}, nil},
|
||
|
{struct {
|
||
|
A, b int `valid:"1,2"`
|
||
|
}{A: 9, b: 2}, errors.New("invalid value \"9\" for option \"A\" (valid options: \"1,2\")")},
|
||
|
} {
|
||
|
if err := AssertValid(tt.c); !reflect.DeepEqual(tt.err, err) {
|
||
|
t.Errorf("bad result (%q): want %q, got %q", tt.c, tt.err, err)
|
||
|
}
|
||
|
}
|
||
|
}
|