Skip to content

Commit d2ee68d

Browse files
zolvekuefler
authored andcommitted
Generate hashCode and equals for Messages (#68)
* hashCode proxying fix Fixing a problem with hashCode method causing this exception: Caused by: java.lang.IllegalArgumentException: hashCode must return either String or SafeHtml at com.google.gwtmockito.fakes.ExtendedFakeMessagesProvider$1.invoke(ExtendedFakeMessagesProvider.java:61) at com.sun.proxy.$Proxy8.hashCode(Unknown Source) ... * hashCode and equals fix when fake types are used e.g. by collections. * Revert "hashCode and equals fix when fake types are used e.g. by collections." This reverts commit 1ab81fa. * hashCode and equals fix when fake types are used e.g. by collections.
1 parent 842d1e8 commit d2ee68d

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

gwtmockito/src/main/java/com/google/gwtmockito/fakes/FakeMessagesProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ public T getFake(Class<?> type) {
5151
public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
5252
if (method.getName().equals("ensureInjected")) {
5353
return true;
54+
} else if (method.getName().equals("hashCode")) {
55+
return proxy.hashCode();
56+
} else if (method.getName().equals("equals")) {
57+
return proxy.getClass().equals(args[0].getClass());
5458
} else if (method.getReturnType() == String.class) {
5559
return buildMessage(method, args);
5660
} else if (method.getReturnType() == SafeHtml.class) {

gwtmockito/src/test/java/com/google/gwtmockito/GwtMockitoTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.gwt.cell.client.AbstractCell;
2929
import com.google.gwt.core.client.JavaScriptObject;
3030
import com.google.gwt.core.shared.GWT;
31+
import com.google.gwt.dev.util.collect.HashSet;
3132
import com.google.gwt.dom.client.DivElement;
3233
import com.google.gwt.dom.client.Document;
3334
import com.google.gwt.dom.client.Element;
@@ -77,6 +78,7 @@
7778
import com.google.gwt.user.client.ui.Widget;
7879
import com.google.gwt.user.datepicker.client.DatePicker;
7980
import com.google.gwtmockito.fakes.FakeProvider;
81+
import com.mls.web.client.core.ui.components.video.VideoCss;
8082

8183
import org.hamcrest.BaseMatcher;
8284
import org.hamcrest.CoreMatchers;
@@ -89,6 +91,7 @@
8991
import org.mockito.Mock;
9092

9193
import java.util.Date;
94+
import java.util.Set;
9295

9396
/**
9497
* Tests for {@link GwtMockito} when running with {@link GwtMockitoTestRunner}.
@@ -161,6 +164,21 @@ public void shouldCreateFakeMessages() {
161164
UriUtils.fromSafeConstant("http://uriY")).asString());
162165
}
163166

167+
@Test
168+
public void shouldGenerateHashCodeForMessages() {
169+
SampleMessages messages = GWT.create(SampleMessages.class);
170+
SampleMessages2 messages2 = GWT.create(SampleMessages2.class);
171+
172+
final Set<Messages> set = new HashSet<>();
173+
174+
set.add(messages);
175+
set.add(messages2);
176+
assertEquals(2, set.size());
177+
178+
set.add(messages);
179+
assertEquals(2, set.size());
180+
}
181+
164182
@Test
165183
public void shouldCreateFakeCssResources() {
166184
SampleCss css = GWT.create(SampleCss.class);
@@ -712,6 +730,10 @@ interface SampleMessages extends Messages {
712730
SafeHtml safeHtmlWithUri(SafeHtml arg1, SafeUri arg2);
713731
}
714732

733+
interface SampleMessages2 extends SampleMessages {
734+
735+
}
736+
715737
interface SampleCss extends CssResource {
716738
String style1();
717739
String style2();

0 commit comments

Comments
 (0)