options_test.go 815 B

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