diff --git a/language-support/java/codegen/src/it/daml/Tests/ListTest.daml b/language-support/java/codegen/src/it/daml/Tests/ListTest.daml index d1908a3d9f..66c45ccfea 100644 --- a/language-support/java/codegen/src/it/daml/Tests/ListTest.daml +++ b/language-support/java/codegen/src/it/daml/Tests/ListTest.daml @@ -21,3 +21,7 @@ data Color = Red | Green | Blue | Indigo | Violet data ColorListRecord = ColorListRecord with colors: [Color] + +data ParameterizedListRecord a = ParameterizedListRecord + with + list: [a] diff --git a/language-support/java/codegen/src/it/java/com/digitalasset/ListTest.java b/language-support/java/codegen/src/it/java/com/digitalasset/ListTest.java index 3cb9ba0d5e..41c4a268e5 100644 --- a/language-support/java/codegen/src/it/java/com/digitalasset/ListTest.java +++ b/language-support/java/codegen/src/it/java/com/digitalasset/ListTest.java @@ -13,9 +13,12 @@ import tests.listtest.*; import tests.listtest.color.Green; import tests.listtest.color.Red; import tests.listtest.listitem.Node; +import tests.varianttest.variantitem.ParameterizedRecordVariant; import java.util.Arrays; import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -146,4 +149,78 @@ public class ListTest { } + @Test + void parameterizedListTestRoundTrip() { + + ValueOuterClass.Record protoRecord = ValueOuterClass.Record.newBuilder() + .addFields( + ValueOuterClass.RecordField.newBuilder() + .setLabel("list") + .setValue( + ValueOuterClass.Value.newBuilder() + .setList(ValueOuterClass.List.newBuilder().addAllElements(Arrays.asList( + ValueOuterClass.Value.newBuilder().setText("Element1").build(), + ValueOuterClass.Value.newBuilder().setText("Element2").build()) + )) + .build() + ) + .build() + ) + .build(); + + Record dataRecord = Record.fromProto(protoRecord); + ParameterizedListRecord fromValue = ParameterizedListRecord.fromValue(dataRecord, f -> f.asText().get().getValue()); + ParameterizedListRecord fromConstructor = new ParameterizedListRecord<>(Arrays.asList("Element1", "Element2")); + ParameterizedListRecord fromRoundTrip = ParameterizedListRecord.fromValue(fromConstructor.toValue(Text::new), f -> f.asText().get().getValue()); + + assertEquals(fromValue, fromConstructor); + assertEquals(fromConstructor.toValue(Text::new), dataRecord); + assertEquals(fromConstructor.toValue(Text::new).toProtoRecord(), protoRecord); + assertEquals(fromRoundTrip, fromConstructor); + + } + + @Test + void parameterizedListOfListTestRoundTrip() { + + ValueOuterClass.Record protoRecord = ValueOuterClass.Record.newBuilder() + .addFields( + ValueOuterClass.RecordField.newBuilder() + .setLabel("list") + .setValue( + ValueOuterClass.Value.newBuilder() + .setList(ValueOuterClass.List.newBuilder().addAllElements(Arrays.asList( + ValueOuterClass.Value.newBuilder().setList( + ValueOuterClass.List.newBuilder().addAllElements(Arrays.asList( + ValueOuterClass.Value.newBuilder().setText("Element1").build(), + ValueOuterClass.Value.newBuilder().setText("Element2").build()) + ).build() + ).build(), + ValueOuterClass.Value.newBuilder().setList( + ValueOuterClass.List.newBuilder().addAllElements(Arrays.asList( + ValueOuterClass.Value.newBuilder().setText("Element3").build(), + ValueOuterClass.Value.newBuilder().setText("Element4").build()) + ).build() + ).build() + )) + .build() + )) + .build() + ) + .build(); + + Record dataRecord = Record.fromProto(protoRecord); + ParameterizedListRecord> fromValue = ParameterizedListRecord.>fromValue(dataRecord, + f -> f.asList().orElseThrow(() -> new IllegalArgumentException("Expected list to be of type com.daml.ledger.javaapi.data.DamlList")).getValues().stream() + .map(f1 -> f1.asText().orElseThrow(() -> new IllegalArgumentException("Expected list to be of type com.daml.ledger.javaapi.data.Text")).getValue()).collect(Collectors.toList())); + ParameterizedListRecord> fromConstructor = new ParameterizedListRecord>(Arrays.asList( + Arrays.asList("Element1", "Element2"), + Arrays.asList("Element3", "Element4") + )); + + assertEquals(fromValue, fromConstructor); + assertEquals(fromConstructor.toValue(f -> new DamlList(f.stream().map(Text::new).collect(Collectors.toList()))), dataRecord); + + } + } \ No newline at end of file