Skip to content

Commit 4e56e1e

Browse files
hslatmandolmen
authored andcommitted
Add NotImplements and variants
1 parent 4ae48e9 commit 4e56e1e

File tree

6 files changed

+111
-0
lines changed

6 files changed

+111
-0
lines changed

assert/assertion_format.go

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assert/assertion_forward.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

assert/assertions.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,25 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg
392392
return true
393393
}
394394

395+
// NotImplements asserts that an object does not implement the specified interface.
396+
//
397+
// assert.NotImplements(t, (*MyInterface)(nil), new(MyObject))
398+
func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool {
399+
if h, ok := t.(tHelper); ok {
400+
h.Helper()
401+
}
402+
interfaceType := reflect.TypeOf(interfaceObject).Elem()
403+
404+
if object == nil {
405+
return Fail(t, fmt.Sprintf("Cannot check if nil does not implement %v", interfaceType), msgAndArgs...)
406+
}
407+
if reflect.TypeOf(object).Implements(interfaceType) {
408+
return Fail(t, fmt.Sprintf("%T implements %v", object, interfaceType), msgAndArgs...)
409+
}
410+
411+
return true
412+
}
413+
395414
// IsType asserts that the specified objects are of the same type.
396415
func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool {
397416
if h, ok := t.(tHelper); ok {

assert/assertions_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,22 @@ func TestImplements(t *testing.T) {
449449

450450
}
451451

452+
func TestNotImplements(t *testing.T) {
453+
454+
mockT := new(testing.T)
455+
456+
if !NotImplements(mockT, (*AssertionTesterInterface)(nil), new(AssertionTesterNonConformingObject)) {
457+
t.Error("NotImplements method should return true: AssertionTesterNonConformingObject does not implement AssertionTesterInterface")
458+
}
459+
if NotImplements(mockT, (*AssertionTesterInterface)(nil), new(AssertionTesterConformingObject)) {
460+
t.Error("NotImplements method should return false: AssertionTesterConformingObject implements AssertionTesterInterface")
461+
}
462+
if NotImplements(mockT, (*AssertionTesterInterface)(nil), nil) {
463+
t.Error("NotImplements method should return false: nil can't be checked to be implementing AssertionTesterInterface or not")
464+
}
465+
466+
}
467+
452468
func TestIsType(t *testing.T) {
453469

454470
mockT := new(testing.T)

require/require.go

Lines changed: 26 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

require/require_forward.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)