From 42baa3e5a4a06b295a874277af094991bdffd6af Mon Sep 17 00:00:00 2001 From: Adam Medzinski Date: Tue, 20 Jun 2017 12:59:03 +0200 Subject: [PATCH] Nil check in Implements assertion --- assert/assertions.go | 5 +++-- assert/assertions_test.go | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/assert/assertions.go b/assert/assertions.go index 522017c..847b94b 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -280,15 +280,16 @@ func labeledOutput(content ...labeledContent) string { // // assert.Implements(t, (*MyInterface)(nil), new(MyObject)) func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { - interfaceType := reflect.TypeOf(interfaceObject).Elem() + if object == nil { + return Fail(t, fmt.Sprintf("Cannot check if nil implements %v", interfaceType), msgAndArgs...) + } if !reflect.TypeOf(object).Implements(interfaceType) { return Fail(t, fmt.Sprintf("%T must implement %v", object, interfaceType), msgAndArgs...) } return true - } // IsType asserts that the specified objects are of the same type. diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 8c64edf..9757792 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -155,6 +155,9 @@ func TestImplements(t *testing.T) { if Implements(mockT, (*AssertionTesterInterface)(nil), new(AssertionTesterNonConformingObject)) { t.Error("Implements method should return false: AssertionTesterNonConformingObject does not implements AssertionTesterInterface") } + if Implements(mockT, (*AssertionTesterInterface)(nil), nil) { + t.Error("Implements method should return false: nil does not implement AssertionTesterInterface") + } }