diff --git a/pkg/runtime/core/helpers.go b/pkg/runtime/core/helpers.go index 281040de..0b0573d8 100644 --- a/pkg/runtime/core/helpers.go +++ b/pkg/runtime/core/helpers.go @@ -11,12 +11,13 @@ func IsNil(input interface{}) bool { reflect.Array, reflect.Slice, reflect.Map, - reflect.Struct, reflect.Func, reflect.Interface, - reflect.Chan, - reflect.UnsafePointer: + reflect.Chan: return val.IsNil() + case reflect.Struct, + reflect.UnsafePointer: + return false case reflect.Invalid: return true default: diff --git a/pkg/runtime/core/helpers_test.go b/pkg/runtime/core/helpers_test.go new file mode 100644 index 00000000..912315d3 --- /dev/null +++ b/pkg/runtime/core/helpers_test.go @@ -0,0 +1,72 @@ +package core_test + +import ( + "testing" + "unsafe" + + "github.com/MontFerret/ferret/pkg/runtime/core" + . "github.com/smartystreets/goconvey/convey" +) + +type DummyInterface interface { + DummyFunc() string +} + +type DummyStruct struct{} + +func (d DummyStruct) DummyFunc() string { + return "testing" +} + +func TestIsNil(t *testing.T) { + Convey("Should match", t, func() { + // nil == invalid + t := core.IsNil(nil) + + So(t, ShouldBeTrue) + + a := []string{} + t = core.IsNil(a) + + So(t, ShouldBeFalse) + + b := make([]string, 1) + t = core.IsNil(b) + + So(t, ShouldBeFalse) + + c := make(map[string]string) + t = core.IsNil(c) + + So(t, ShouldBeFalse) + + var s struct { + Test string + } + t = core.IsNil(s) + + So(t, ShouldBeFalse) + + f := func() {} + t = core.IsNil(f) + + So(t, ShouldBeFalse) + + i := DummyStruct{} + t = core.IsNil(i) + + So(t, ShouldBeFalse) + + ch := make(chan string) + t = core.IsNil(ch) + + So(t, ShouldBeFalse) + + var y unsafe.Pointer + var vy int + y = unsafe.Pointer(&vy) + t = core.IsNil(y) + + So(t, ShouldBeFalse) + }) +}