diff --git a/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/function/FunctionGeneratorMetaTest.java b/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/function/FunctionGeneratorMetaTest.java index 745cb9fc0..9a202d7a9 100644 --- a/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/function/FunctionGeneratorMetaTest.java +++ b/rosetta-integration-tests/src/test/java/com/regnosys/rosetta/generator/java/function/FunctionGeneratorMetaTest.java @@ -29,6 +29,85 @@ public class FunctionGeneratorMetaTest { FunctionGeneratorHelper functionGeneratorHelper; @Inject CodeGeneratorTestHelper generatorTestHelper; + + + @Test + void canSetEnumOnReferenceWithMeta() { + var model = """ + metaType reference string + + enum MyEnum: + A + B + C + + type Foo: + myEnumField MyEnum (1..1) + [metadata reference] + + func MyFunc: + output: + foo Foo (1..1) + + set foo -> myEnumField: MyEnum -> B + """; + + + var code = generatorTestHelper.generateCode(model); + + var classes = generatorTestHelper.compileToClasses(code); + + var myFunc = functionGeneratorHelper.createFunc(classes, "MyFunc"); + + var result = functionGeneratorHelper.invokeFunc(myFunc, RosettaModelObject.class); + + var expected = generatorTestHelper.createInstanceUsingBuilder(classes, new RosettaJavaPackages.RootPackage("com.rosetta.test.model"), "Foo", Map.of( + "myEnumField", generatorTestHelper.createInstanceUsingBuilder(classes, new RosettaJavaPackages.RootPackage("com.rosetta.test.model.metafields"), "ReferenceWithMetaMyEnum", Map.of( + "value", generatorTestHelper.createEnumInstance(classes, "MyEnum", "B") + )) + + )); + + assertEquals(expected, result); + } + + @Test + void canSetEnumOnFieldWithMeta() { + var model = """ + enum MyEnum: + A + B + C + + type Foo: + myEnumField MyEnum (1..1) + [metadata scheme] + + func MyFunc: + output: + foo Foo (1..1) + + set foo -> myEnumField: MyEnum -> B + """; + + + var code = generatorTestHelper.generateCode(model); + + var classes = generatorTestHelper.compileToClasses(code); + + var myFunc = functionGeneratorHelper.createFunc(classes, "MyFunc"); + + var result = functionGeneratorHelper.invokeFunc(myFunc, RosettaModelObject.class); + + var expected = generatorTestHelper.createInstanceUsingBuilder(classes, new RosettaJavaPackages.RootPackage("com.rosetta.test.model"), "Foo", Map.of( + "myEnumField", generatorTestHelper.createInstanceUsingBuilder(classes, new RosettaJavaPackages.RootPackage("com.rosetta.test.model.metafields"), "FieldWithMetaMyEnum", Map.of( + "value", generatorTestHelper.createEnumInstance(classes, "MyEnum", "B") + )) + + )); + + assertEquals(expected, result); + } @Test void canSetSingleCardinalityMetaToListOfMetaUsingConstructor() { diff --git a/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend b/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend index 153295332..ca842d894 100644 --- a/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend +++ b/rosetta-lang/src/main/java/com/regnosys/rosetta/generator/java/expression/ExpressionGenerator.xtend @@ -284,7 +284,15 @@ class ExpressionGenerator extends RosettaExpressionSwitch