File: options_test.go

package info (click to toggle)
elvish 0.21.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,372 kB
  • sloc: javascript: 236; sh: 130; python: 104; makefile: 88; xml: 9
file content (35 lines) | stat: -rw-r--r-- 821 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package eval

import (
	"reflect"
	"testing"

	"src.elv.sh/pkg/tt"
)

var Args = tt.Args

type opts struct {
	Foo string
	bar int
}

// Equal is required by cmp.Diff, since opts contains unexported fields.
func (o opts) Equal(p opts) bool { return o == p }

func TestScanOptions(t *testing.T) {
	// A wrapper of ScanOptions, to make it easier to test
	wrapper := func(src RawOptions, dstInit any) (any, error) {
		ptr := reflect.New(reflect.TypeOf(dstInit))
		ptr.Elem().Set(reflect.ValueOf(dstInit))
		err := scanOptions(src, ptr.Interface())
		return ptr.Elem().Interface(), err
	}

	tt.Test(t, tt.Fn(wrapper).Named("scanOptions"),
		Args(RawOptions{"foo": "lorem ipsum"}, opts{}).
			Rets(opts{Foo: "lorem ipsum"}, nil),
		Args(RawOptions{"bar": 20}, opts{bar: 10}).
			Rets(opts{bar: 10}, UnknownOption{"bar"}),
	)
}