import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
+import org.eclipse.xtend2.lib.StringConcatenation;
import org.junit.Test;
import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingGenerator;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
public void builderTemplateGenerateHashcodeWithPropertyTest() {
final GeneratedType genType = mockGenType("get" + TEST);
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#hashCode()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent"
+ " hashing\n"
@Test
public void builderTemplateGenerateHashCodeWithMorePropertiesTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#hashCode()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent"
+ " hashing\n"
@Test
public void builderTemplateGenerateHashCodeWithoutPropertyWithAugmentTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#hashCode()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent"
+ " hashing\n"
+ "static int bindingHashCode(final test.@NonNull test obj) {\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
- + " result = prime * result + obj.augmentations().hashCode();\n"
+ + " for (var augmentation : obj.augmentations().values()) {\n"
+ + " result += augmentation.hashCode();\n"
+ + " }\n"
+ " return result;\n"
+ "}\n", genHashCode(mockAugment(mockGenType(TEST))).toString());
}
@Test
public void builderTemplateGenerateHashCodeWithPropertyWithAugmentTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#hashCode()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent"
+ " hashing\n"
+ " final int prime = 31;\n"
+ " int result = 1;\n"
+ " result = prime * result + Objects.hashCode(obj.getTest());\n"
- + " result = prime * result + obj.augmentations().hashCode();\n"
+ + " for (var augmentation : obj.augmentations().values()) {\n"
+ + " result += augmentation.hashCode();\n"
+ + " }\n"
+ " return result;\n"
+ "}\n", genHashCode(mockAugment(mockGenType("get" + TEST))).toString());
}
@Test
public void builderTemplateGenerateHashCodeWithMorePropertiesWithAugmentTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#hashCode()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent"
+ " hashing\n"
+ " int result = 1;\n"
+ " result = prime * result + Objects.hashCode(obj.getTest1());\n"
+ " result = prime * result + Objects.hashCode(obj.getTest2());\n"
- + " result = prime * result + obj.augmentations().hashCode();\n"
+ + " for (var augmentation : obj.augmentations().values()) {\n"
+ + " result += augmentation.hashCode();\n"
+ + " }\n"
+ " return result;\n"
+ "}\n", genHashCode(mockAugment(mockGenTypeMoreMeth("get" + TEST))).toString());
}
public void builderTemplateGenerateToStringWithPropertyTest() {
final GeneratedType genType = mockGenType("get" + TEST);
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#toString()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
+ "static String bindingToString(final test.@NonNull test obj) {\n"
- + " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ + " final var helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test\", obj.gettest());\n"
+ " return helper.toString();\n"
+ "}\n", genToString(genType).toString());
@Test
public void builderTemplateGenerateToStringWithoutAnyPropertyTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#toString()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
+ "static String bindingToString(final test.@NonNull test obj) {\n"
- + " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ + " final var helper = MoreObjects.toStringHelper(\"test\");\n"
+ " return helper.toString();\n"
+ "}\n", genToString(mockGenType(TEST)).toString());
}
@Test
public void builderTemplateGenerateToStringWithMorePropertiesTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#toString()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
+ "static String bindingToString(final test.@NonNull test obj) {\n"
- + " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ + " final var helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test1\", obj.gettest1());\n"
+ " CodeHelpers.appendValue(helper, \"test2\", obj.gettest2());\n"
+ " return helper.toString();\n"
@Test
public void builderTemplateGenerateToStringWithoutPropertyWithAugmentTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#toString()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\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"
+ + " final var helper = MoreObjects.toStringHelper(\"test\");\n"
+ + " CodeHelpers.appendAugmentations(helper, \"augmentation\", obj);\n"
+ " return helper.toString();\n"
+ "}\n", genToString(mockAugment(mockGenType(TEST))).toString());
}
@Test
public void builderTemplateGenerateToStringWithPropertyWithAugmentTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#toString()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
+ "static String bindingToString(final test.@NonNull test obj) {\n"
- + " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ + " final var helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test\", obj.gettest());\n"
- + " CodeHelpers.appendValue(helper, \"augmentation\", obj.augmentations().values());\n"
+ + " CodeHelpers.appendAugmentations(helper, \"augmentation\", obj);\n"
+ " return helper.toString();\n"
+ "}\n", genToString(mockAugment(mockGenType("get" + TEST))).toString());
}
@Test
public void builderTemplateGenerateToStringWithMorePropertiesWithAugmentTest() throws Exception {
- assertEquals("/**\n"
+ assertXtendEquals("/**\n"
+ " * Default implementation of {@link Object#toString()} contract for this interface.\n"
+ " * Implementations of this interface are encouraged to defer to this method to get consistent string"
+ "\n * representations across all implementations.\n"
+ " * @throws NullPointerException if {@code obj} is null\n"
+ " */\n"
+ "static String bindingToString(final test.@NonNull test obj) {\n"
- + " final MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(\"test\");\n"
+ + " final var helper = MoreObjects.toStringHelper(\"test\");\n"
+ " CodeHelpers.appendValue(helper, \"test1\", obj.gettest1());\n"
+ " CodeHelpers.appendValue(helper, \"test2\", obj.gettest2());\n"
- + " CodeHelpers.appendValue(helper, \"augmentation\", obj.augmentations().values());\n"
+ + " CodeHelpers.appendAugmentations(helper, \"augmentation\", obj);\n"
+ " return helper.toString();\n"
+ "}\n", genToString(mockAugment(mockGenTypeMoreMeth("get" + TEST))).toString());
}
public void builderTemplateGenerateToEqualsComparingOrderTest() {
final EffectiveModelContext context = YangParserTestUtils.parseYangResource(
"/test-types.yang");
- final List<Type> types = new DefaultBindingGenerator().generateTypes(context);
- final BuilderTemplate bt = BuilderGenerator.templateForType((GeneratedType) types.get(19));
+ final List<GeneratedType> types = new DefaultBindingGenerator().generateTypes(context);
+ assertEquals(29, types.size());
+
+ final BuilderTemplate bt = BuilderGenerator.templateForType(
+ types.stream().filter(t -> t.getName().equals("Nodes")).findFirst().orElseThrow());
final List<String> sortedProperties = bt.properties.stream()
.sorted(ByTypeMemberComparator.getInstance())
doReturn(ValueMechanics.NORMAL).when(methSign).getMechanics();
return methSign;
}
+
+ // Xtend's StringConcatenation is using runtime-configured line separator, which can change between runs, notably
+ // it has a different value on Windows. Make sure we account for that.
+ private static void assertXtendEquals(final String expected, final String actual) {
+ assertEquals(expected.replace("\n", StringConcatenation.DEFAULT_LINE_DELIMITER), actual);
+ }
}