import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
+ " * @return Hash code value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static int bindingHashCode(final test.test obj) {\n"
+ + "static int bindingHashCode(final test.@NonNull test obj) {\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
+ " result = prime * result + Objects.hashCode(obj.getTest());\n"
+ "}\n", genHashCode(genType).toString());
}
+ @Test
+ public void builderTemplateGenerateHashCodeWithoutAnyPropertyTest() throws Exception {
+ assertEquals("", genHashCode(mockGenType(TEST)).toString());
+ }
+
@Test
public void builderTemplateGenerateHashCodeWithMorePropertiesTest() throws Exception {
assertEquals("/**\n"
+ " * @return Hash code value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static int bindingHashCode(final test.test obj) {\n"
+ + "static int bindingHashCode(final test.@NonNull test obj) {\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
+ " result = prime * result + Objects.hashCode(obj.getTest1());\n"
+ " hashing\n"
+ " * results across all implementations.\n"
+ " *\n"
- + " * @param <T$$> implementation type, which has to also implement AugmentationHolder interface\n"
- + " * contract.\n"
+ " * @param obj Object for which to generate hashCode() result.\n"
+ " * @return Hash code value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static <T$$ extends test.test & AugmentationHolder<?>> int bindingHashCode(final @NonNull T$$ obj) {"
- + "\n"
+ + "static int bindingHashCode(final test.@NonNull test obj) {\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
- + " result = prime * result + CodeHelpers.hashAugmentations(obj);\n"
+ + " result = prime * result + obj.augmentations().hashCode();\n"
+ " return result;\n"
+ "}\n", genHashCode(mockAugment(mockGenType(TEST))).toString());
}
+ " hashing\n"
+ " * results across all implementations.\n"
+ " *\n"
- + " * @param <T$$> implementation type, which has to also implement AugmentationHolder interface\n"
- + " * contract.\n"
+ " * @param obj Object for which to generate hashCode() result.\n"
+ " * @return Hash code value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static <T$$ extends test.test & AugmentationHolder<?>> int bindingHashCode(final @NonNull T$$ obj) {"
- + "\n"
+ + "static int bindingHashCode(final test.@NonNull test obj) {\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
+ " result = prime * result + Objects.hashCode(obj.getTest());\n"
- + " result = prime * result + CodeHelpers.hashAugmentations(obj);\n"
+ + " result = prime * result + obj.augmentations().hashCode();\n"
+ " return result;\n"
+ "}\n", genHashCode(mockAugment(mockGenType("get" + TEST))).toString());
}
+ " hashing\n"
+ " * results across all implementations.\n"
+ " *\n"
- + " * @param <T$$> implementation type, which has to also implement AugmentationHolder interface\n"
- + " * contract.\n"
+ " * @param obj Object for which to generate hashCode() result.\n"
+ " * @return Hash code value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static <T$$ extends test.test & AugmentationHolder<?>> int bindingHashCode(final @NonNull T$$ obj) {"
- + "\n"
+ + "static int bindingHashCode(final test.@NonNull test obj) {\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
+ " result = prime * result + Objects.hashCode(obj.getTest1());\n"
+ " result = prime * result + Objects.hashCode(obj.getTest2());\n"
- + " result = prime * result + CodeHelpers.hashAugmentations(obj);\n"
+ + " result = prime * result + obj.augmentations().hashCode();\n"
+ " return result;\n"
+ "}\n", genHashCode(mockAugment(mockGenTypeMoreMeth("get" + TEST))).toString());
}
+ " * @return {@link String} value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static String bindingToString(final test.test obj) {\n"
+ + "static String bindingToString(final test.@NonNull test obj) {\n"
+ " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test\", obj.gettest());\n"
+ " return helper.toString();\n"
+ " * @return {@link String} value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static String bindingToString(final test.test obj) {\n"
+ + "static String bindingToString(final test.@NonNull test obj) {\n"
+ " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ " return helper.toString();\n"
+ "}\n", genToString(mockGenType(TEST)).toString());
+ " * @return {@link String} value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static String bindingToString(final test.test obj) {\n"
+ + "static String bindingToString(final test.@NonNull test obj) {\n"
+ " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test1\", obj.gettest1());\n"
+ " CodeHelpers.appendValue(helper, \"test2\", obj.gettest2());\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " *\n"
- + " * @param <T$$> implementation type, which has to also implement AugmentationHolder interface\n"
- + " * contract.\n"
+ " * @param obj Object for which to generate toString() result.\n"
+ " * @return {@link String} value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static <T$$ extends test.test & AugmentationHolder<test.test>> String bindingToString(final @NonNull"
- + " T$$ obj) {\n"
+ + "static String bindingToString(final test.@NonNull test obj) {\n"
+ " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"augmentation\", obj.augmentations().values());\n"
+ " return helper.toString();\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " *\n"
- + " * @param <T$$> implementation type, which has to also implement AugmentationHolder interface\n"
- + " * contract.\n"
+ " * @param obj Object for which to generate toString() result.\n"
+ " * @return {@link String} value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static <T$$ extends test.test & AugmentationHolder<test.test>> String bindingToString(final @NonNull"
- + " T$$ obj) {\n"
+ + "static String bindingToString(final test.@NonNull test obj) {\n"
+ " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test\", obj.gettest());\n"
+ " CodeHelpers.appendValue(helper, \"augmentation\", obj.augmentations().values());\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " *\n"
- + " * @param <T$$> implementation type, which has to also implement AugmentationHolder interface\n"
- + " * contract.\n"
+ " * @param obj Object for which to generate toString() result.\n"
+ " * @return {@link String} value of data modeled by this interface.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
- + "static <T$$ extends test.test & AugmentationHolder<test.test>> String bindingToString(final @NonNull"
- + " T$$ obj) {\n"
+ + "static String bindingToString(final test.@NonNull test obj) {\n"
+ " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test1\", obj.gettest1());\n"
+ " CodeHelpers.appendValue(helper, \"test2\", obj.gettest2());\n"
final MethodSignature methSign = mock(MethodSignature.class);
doReturn(methodeName).when(methSign).getName();
final Type methType = mock(Type.class);
+ when(methType.getFullyQualifiedName()).thenCallRealMethod();
doReturn(TYPE_NAME).when(methType).getIdentifier();
doReturn(TEST).when(methType).getName();
doReturn(methType).when(methSign).getReturnType();