src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/options_test.go (about) 1 package eval 2 3 import ( 4 "reflect" 5 "testing" 6 7 "src.elv.sh/pkg/tt" 8 ) 9 10 var Args = tt.Args 11 12 type opts struct { 13 Foo string 14 bar int 15 } 16 17 // Equal is required by cmp.Diff, since opts contains unexported fields. 18 func (o opts) Equal(p opts) bool { return o == p } 19 20 func TestScanOptions(t *testing.T) { 21 // A wrapper of ScanOptions, to make it easier to test 22 wrapper := func(src RawOptions, dstInit any) (any, error) { 23 ptr := reflect.New(reflect.TypeOf(dstInit)) 24 ptr.Elem().Set(reflect.ValueOf(dstInit)) 25 err := scanOptions(src, ptr.Interface()) 26 return ptr.Elem().Interface(), err 27 } 28 29 tt.Test(t, tt.Fn(wrapper).Named("scanOptions"), 30 Args(RawOptions{"foo": "lorem ipsum"}, opts{}). 31 Rets(opts{Foo: "lorem ipsum"}, nil), 32 Args(RawOptions{"bar": 20}, opts{bar: 10}). 33 Rets(opts{bar: 10}, UnknownOption{"bar"}), 34 ) 35 }