Skip to content

Commit

Permalink
fix result.set with nil value
Browse files Browse the repository at this point in the history
  • Loading branch information
timwu20 committed Jun 22, 2021
1 parent deb8a1e commit a44dbe9
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 8 deletions.
12 changes: 9 additions & 3 deletions pkg/scale/result.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,21 @@ func NewResult(okIn, errIn interface{}) (res Result) {
func (r *Result) Set(mode ResultMode, in interface{}) (err error) {
switch mode {
case OK:
if reflect.TypeOf(r.ok) != reflect.TypeOf(in) {
if reflect.TypeOf(r.ok) == reflect.TypeOf(empty{}) && in == nil {
r.mode = mode
return
} else if reflect.TypeOf(r.ok) != reflect.TypeOf(in) {
err = fmt.Errorf("type mistmatch for result.ok: %T, and inputted: %T", r.ok, in)
return
}
r.ok = in
r.mode = mode
case Err:
if reflect.TypeOf(r.err) != reflect.TypeOf(in) {
err = fmt.Errorf("type mistmatch for result.ok: %T, and inputted: %T", r.ok, in)
if reflect.TypeOf(r.err) == reflect.TypeOf(empty{}) && in == nil {
r.mode = mode
return
} else if reflect.TypeOf(r.err) != reflect.TypeOf(in) {
err = fmt.Errorf("type mistmatch for result.err: %T, and inputted: %T", r.ok, in)
return
}
r.err = in
Expand Down
47 changes: 42 additions & 5 deletions pkg/scale/result_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,43 +216,69 @@ func TestResult_Set(t *testing.T) {
in interface{}
}
tests := []struct {
name string
res Result
args args
wantErr bool
name string
res Result
args args
wantErr bool
wantResult Result
}{
// TODO: Add test cases.
{
args: args{
mode: Unset,
},
res: NewResult(nil, nil),
wantErr: true,
wantResult: Result{
ok: empty{}, err: empty{},
},
},
{
args: args{
mode: OK,
in: nil,
},
res: NewResult(nil, nil),
wantResult: Result{
ok: empty{},
err: empty{},
mode: OK,
},
},
{
args: args{
mode: Err,
in: nil,
},
res: NewResult(nil, nil),
wantResult: Result{
ok: empty{},
err: empty{},
mode: Err,
},
},
{
args: args{
mode: OK,
in: true,
},
res: NewResult(true, nil),
wantResult: Result{
ok: true,
err: empty{},
mode: OK,
},
},
{
args: args{
mode: Err,
in: true,
},
res: NewResult(nil, true),
wantResult: Result{
ok: empty{},
err: true,
mode: Err,
},
},
{
args: args{
Expand All @@ -261,6 +287,10 @@ func TestResult_Set(t *testing.T) {
},
res: NewResult("ok", "err"),
wantErr: true,
wantResult: Result{
ok: "ok",
err: "err",
},
},
{
args: args{
Expand All @@ -269,6 +299,10 @@ func TestResult_Set(t *testing.T) {
},
res: NewResult(nil, true),
wantErr: true,
wantResult: Result{
ok: empty{},
err: true,
},
},
}
for _, tt := range tests {
Expand All @@ -277,6 +311,9 @@ func TestResult_Set(t *testing.T) {
if err := r.Set(tt.args.mode, tt.args.in); (err != nil) != tt.wantErr {
t.Errorf("Result.Set() error = %v, wantErr %v", err, tt.wantErr)
}
if !reflect.DeepEqual(tt.wantResult, r) {
t.Errorf("Result.Unwrap() = %v, want %v", tt.wantResult, r)
}
})
}
}

0 comments on commit a44dbe9

Please sign in to comment.