generate equals/hashCode: tests for apache/guava templates

This commit is contained in:
Anna Kozlova
2015-01-12 17:25:52 +01:00
parent b6f4a751cc
commit 1aea6bd2b3
6 changed files with 233 additions and 9 deletions
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Couple;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.java.generate.exception.TemplateResourceException;
import org.jetbrains.java.generate.template.TemplateResource;
@@ -51,6 +52,11 @@ public class EqualsHashCodeTemplatesManager extends TemplatesManager {
private static final String EQUALS_SUFFIX = "equals";
private static final String HASH_CODE_SUFFIX = "hashCode";
@NonNls public static final String INTELLI_J_DEFAULT = "IntelliJ Default";
@NonNls public static final String EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG = "Equals/HashCodeBuilder (Apache commons-lang)";
@NonNls public static final String EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG_3 = "Equals/HashCodeBuilder (Apache commons-lang 3)";
@NonNls public static final String OBJECTS_EQUAL_AND_HASH_CODE_GUAVA = "Objects.equal and hashCode (Guava)";
public static EqualsHashCodeTemplatesManager getInstance() {
return ServiceManager.getService(EqualsHashCodeTemplatesManager.class);
@@ -60,17 +66,17 @@ public class EqualsHashCodeTemplatesManager extends TemplatesManager {
public TemplateResource[] getDefaultTemplates() {
try {
return new TemplateResource[] {
new TemplateResource("IntelliJ Default equals", readFile(DEFAULT_EQUALS), true),
new TemplateResource("IntelliJ Default hashCode", readFile(DEFAULT_HASH_CODE), true),
new TemplateResource(toEqualsName(INTELLI_J_DEFAULT), readFile(DEFAULT_EQUALS), true),
new TemplateResource(toHashCodeName(INTELLI_J_DEFAULT), readFile(DEFAULT_HASH_CODE), true),
new TemplateResource("Equals/HashCodeBuilder (Apache commons-lang) equals", readFile(APACHE_EQUALS), true),
new TemplateResource("Equals/HashCodeBuilder (Apache commons-lang) hashCode", readFile(APACHE_HASH_CODE), true),
new TemplateResource(toEqualsName(EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG), readFile(APACHE_EQUALS), true),
new TemplateResource(toHashCodeName(EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG), readFile(APACHE_HASH_CODE), true),
new TemplateResource("Equals/HashCodeBuilder (Apache commons-lang 3) equals", readFile(APACHE3_EQUALS), true),
new TemplateResource("Equals/HashCodeBuilder (Apache commons-lang 3) hashCode", readFile(APACHE3_HASH_CODE), true),
new TemplateResource(toEqualsName(EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG_3), readFile(APACHE3_EQUALS), true),
new TemplateResource(toHashCodeName(EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG_3), readFile(APACHE3_HASH_CODE), true),
new TemplateResource("Objects.equal and hashCode (Guava) equals", readFile(GUAVA_EQUALS), true),
new TemplateResource("Objects.equal and hashCode (Guava) hashCode", readFile(GUAVA_HASH_CODE), true),
new TemplateResource(toEqualsName(OBJECTS_EQUAL_AND_HASH_CODE_GUAVA), readFile(GUAVA_EQUALS), true),
new TemplateResource(toHashCodeName(OBJECTS_EQUAL_AND_HASH_CODE_GUAVA), readFile(GUAVA_HASH_CODE), true),
};
}
catch (IOException e) {
@@ -127,7 +133,7 @@ public class EqualsHashCodeTemplatesManager extends TemplatesManager {
}
public void setDefaultTemplate(String name) {
Set<String> fullNames = ContainerUtil.newHashSet(name + " " + EQUALS_SUFFIX, name + " " + HASH_CODE_SUFFIX);
Set<String> fullNames = ContainerUtil.newHashSet(toEqualsName(name), toHashCodeName(name));
for (TemplateResource resource : getAllTemplates()) {
if (fullNames.contains(resource.getFileName())) {
setDefaultTemplate(resource);
@@ -0,0 +1,78 @@
class B {
@Override
public boolean equals(Object obj) {
return obj != null;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
class A extends B {
Object[] a1;
Object[][] a2;
String[] a3;
String[][] a4;
int[] a5;
int[][] a6;
byte a7;
short a8;
int a9;
long a10;
float a11;
double a12;
Object a13;
String a14;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
final A a = (A) o;
return new org.apache.commons.lang3.builder.EqualsBuilder()
.appendSuper(super.equals(o))
.append(a10, a.a10)
.append(a11, a.a11)
.append(a12, a.a12)
.append(a7, a.a7)
.append(a8, a.a8)
.append(a9, a.a9)
.append(a1, a.a1)
.append(a13, a.a13)
.append(a14, a.a14)
.append(a2, a.a2)
.append(a3, a.a3)
.append(a4, a.a4)
.append(a5, a.a5)
.append(a6, a.a6)
.isEquals();
}
@Override
public int hashCode() {
return new org.apache.commons.lang3.builder.HashCodeBuilder(17, 37)
.appendSuper(super.hashCode())
.append(a1)
.append(a2)
.append(a3)
.append(a4)
.append(a5)
.append(a6)
.append(a7)
.append(a8)
.append(a9)
.append(a10)
.append(a11)
.append(a12)
.append(a13)
.append(a14)
.toHashCode();
}
}
@@ -0,0 +1,59 @@
import java.util.Arrays;
class B {
@Override
public boolean equals(Object obj) {
return obj != null;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
class A extends B {
Object[] a1;
Object[][] a2;
String[] a3;
String[][] a4;
int[] a5;
int[][] a6;
byte a7;
short a8;
int a9;
long a10;
float a11;
double a12;
Object a13;
String a14;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
final A a = (A) o;
return com.google.common.base.Objects.equal(a10, a.a10) &&
com.google.common.base.Objects.equal(a11, a.a11) &&
com.google.common.base.Objects.equal(a12, a.a12) &&
com.google.common.base.Objects.equal(a7, a.a7) &&
com.google.common.base.Objects.equal(a8, a.a8) &&
com.google.common.base.Objects.equal(a9, a.a9) &&
Arrays.equals(a1, a.a1) &&
com.google.common.base.Objects.equal(a13, a.a13) &&
com.google.common.base.Objects.equal(a14, a.a14) &&
Arrays.deepEquals(a2, a.a2) &&
Arrays.equals(a3, a.a3) &&
Arrays.deepEquals(a4, a.a4) &&
Arrays.equals(a5, a.a5) &&
Arrays.deepEquals(a6, a.a6);
}
@Override
public int hashCode() {
return com.google.common.base.Objects.hashCode(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
}
}
@@ -0,0 +1,31 @@
class B {
@Override
public boolean equals(Object obj) {
return obj != null;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
class A extends B {
Object[] a1;
Object[][] a2;
String[] a3;
String[][] a4;
int[] a5;
int[][] a6;
byte a7;
short a8;
int a9;
long a10;
float a11;
double a12;
Object a13;
String a14;
<caret>
}
@@ -0,0 +1,31 @@
class B {
@Override
public boolean equals(Object obj) {
return obj != null;
}
@Override
public int hashCode() {
return super.hashCode();
}
}
class A extends B {
Object[] a1;
Object[][] a2;
String[] a3;
String[][] a4;
int[] a5;
int[][] a6;
byte a7;
short a8;
int a9;
long a10;
float a11;
double a12;
Object a13;
String a14;
<caret>
}
@@ -1,5 +1,6 @@
package com.intellij.codeInsight;
import com.intellij.codeInsight.generation.EqualsHashCodeTemplatesManager;
import com.intellij.psi.PsiField;
import com.intellij.util.Function;
@@ -37,4 +38,22 @@ public class GenerateEquals15Test extends GenerateEqualsTestCase {
doTest(Function.ID, Function.ID, Function.ID, true);
}
public void testDifferentTypesSuperEqualsAndHashCodeApache3() throws Exception {
doTestWithTemplate(EqualsHashCodeTemplatesManager.EQUALS_HASH_CODE_BUILDER_APACHE_COMMONS_LANG_3);
}
public void testDifferentTypesSuperEqualsAndHashCodeGuava() throws Exception {
doTestWithTemplate(EqualsHashCodeTemplatesManager.OBJECTS_EQUAL_AND_HASH_CODE_GUAVA);
}
private void doTestWithTemplate(String templateName) throws Exception {
try {
EqualsHashCodeTemplatesManager.getInstance().setDefaultTemplate(templateName);
doTest(Function.ID, Function.ID, Function.ID, true);
}
finally {
EqualsHashCodeTemplatesManager.getInstance().setDefaultTemplate(EqualsHashCodeTemplatesManager.INTELLI_J_DEFAULT);
}
}
}