From 0b8e97c36071fcaea12363576c3d357f662ae98e Mon Sep 17 00:00:00 2001 From: Big Andy <8012398+big-andy-coates@users.noreply.github.com> Date: Wed, 30 Nov 2022 15:22:22 +0000 Subject: [PATCH] Enhance `Equals` fixes: #1222 --- .../org/mockito/internal/matchers/Equals.java | 5 ++ .../mockito/internal/matchers/EqualsTest.java | 49 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/main/java/org/mockito/internal/matchers/Equals.java b/src/main/java/org/mockito/internal/matchers/Equals.java index 8b07b2da75..bbfad627c4 100644 --- a/src/main/java/org/mockito/internal/matchers/Equals.java +++ b/src/main/java/org/mockito/internal/matchers/Equals.java @@ -22,6 +22,11 @@ public boolean matches(Object actual) { return Equality.areEqual(this.wanted, actual); } + @Override + public Class type() { + return wanted != null ? wanted.getClass() : ArgumentMatcher.super.type(); + } + @Override public String toString() { return describe(wanted); diff --git a/src/test/java/org/mockito/internal/matchers/EqualsTest.java b/src/test/java/org/mockito/internal/matchers/EqualsTest.java index ba5c578b57..f3b7690734 100644 --- a/src/test/java/org/mockito/internal/matchers/EqualsTest.java +++ b/src/test/java/org/mockito/internal/matchers/EqualsTest.java @@ -4,13 +4,22 @@ */ package org.mockito.internal.matchers; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.*; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; import org.junit.Test; +import org.mockito.Mock; +import org.mockitousage.IMethods; import org.mockitoutil.TestBase; public class EqualsTest extends TestBase { + @Mock private IMethods mock; + @Test public void shouldBeEqual() { assertEquals(new Equals(null), new Equals(null)); @@ -102,4 +111,44 @@ public void shouldMatchTypesSafelyWhenGivenIsNull() throws Exception { // then assertFalse(equals.typeMatches(null)); } + + @Test + public void shouldMockVarargInvocation() { + given(mock.varargs(eq("one param"))).willReturn(1); + + assertThat(mock.varargs("one param")).isEqualTo(1); + assertThat(mock.varargs()).isEqualTo(0); + assertThat(mock.varargs("different")).isEqualTo(0); + assertThat(mock.varargs("one param", "another")).isEqualTo(0); + } + + @Test + public void shouldVerifyInvocation() { + mock.varargs("one param"); + + verify(mock).varargs(eq("one param")); + verify(mock, never()).varargs(); + verify(mock, never()).varargs(eq("different")); + verify(mock, never()).varargs(eq("one param"), eq("another")); + } + + @Test + public void shouldMockVarargInvocation_raw() { + given(mock.varargs(eq(new String[] {"one param"}))).willReturn(1); + + assertThat(mock.varargs("one param")).isEqualTo(1); + assertThat(mock.varargs()).isEqualTo(0); + assertThat(mock.varargs("different")).isEqualTo(0); + assertThat(mock.varargs("one param", "another")).isEqualTo(0); + } + + @Test + public void shouldVerifyInvocation_raw() { + mock.varargs("one param"); + + verify(mock).varargs(eq(new String[] {"one param"})); + verify(mock, never()).varargs(eq(new String[] {})); + verify(mock, never()).varargs(eq(new String[] {"different"})); + verify(mock, never()).varargs(eq(new String[] {"one param", "another"})); + } }