github.com/markusbkk/elvish@v0.0.0-20231204143114-91dc52438621/pkg/eval/options_test.go (about)

     1  package eval
     2  
     3  import (
     4  	"reflect"
     5  	"testing"
     6  
     7  	. "github.com/markusbkk/elvish/pkg/tt"
     8  )
     9  
    10  type opts struct {
    11  	Foo string
    12  	bar int
    13  }
    14  
    15  func TestScanOptions(t *testing.T) {
    16  	// A wrapper of ScanOptions, to make it easier to test
    17  	wrapper := func(src RawOptions, dstInit interface{}) (interface{}, error) {
    18  		ptr := reflect.New(reflect.TypeOf(dstInit))
    19  		ptr.Elem().Set(reflect.ValueOf(dstInit))
    20  		err := scanOptions(src, ptr.Interface())
    21  		return ptr.Elem().Interface(), err
    22  	}
    23  
    24  	Test(t, Fn("scanOptions", wrapper), Table{
    25  		Args(RawOptions{"foo": "lorem ipsum"}, opts{}).
    26  			Rets(opts{Foo: "lorem ipsum"}, nil),
    27  		Args(RawOptions{"bar": 20}, opts{bar: 10}).
    28  			Rets(opts{bar: 10}, UnknownOption{"bar"}),
    29  	})
    30  }