diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt index 77fe678518..fad4158d4d 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt @@ -246,6 +246,9 @@ class AssembleModelGenerator(private val methodUnderTest: UtMethod<*>) { if (fieldId.isStatic) { throw AssembleException("Static field $fieldId can't be set in an object of the class $classId") } + if (fieldId.isFinal) { + throw AssembleException("Final field $fieldId can't be set in an object of the class $classId") + } //fill field value if it hasn't been filled by constructor, and it is not default if (fieldId in constructorInfo.affectedFields || (fieldId !in constructorInfo.setFields && !fieldModel.hasDefaultValue()) diff --git a/utbot-framework/src/test/java/org/utbot/examples/assemble/DirectAccessFinal.java b/utbot-framework/src/test/java/org/utbot/examples/assemble/DirectAccessFinal.java new file mode 100644 index 0000000000..64d86e77f0 --- /dev/null +++ b/utbot-framework/src/test/java/org/utbot/examples/assemble/DirectAccessFinal.java @@ -0,0 +1,8 @@ +package org.utbot.examples.assemble; + +/** + * A class with a FINAL field allowing direct access. + */ +public class DirectAccessFinal { + public final int[] array = {1, 2}; +} \ No newline at end of file diff --git a/utbot-framework/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt b/utbot-framework/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt index 09b3b85e72..ffa6b63c69 100644 --- a/utbot-framework/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt +++ b/utbot-framework/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt @@ -1,14 +1,5 @@ package org.utbot.framework.assemble -import org.utbot.examples.assemble.AssembleTestUtils -import org.utbot.examples.assemble.ComplexField -import org.utbot.examples.assemble.DirectAccess -import org.utbot.examples.assemble.DirectAccessAndSetter -import org.utbot.examples.assemble.InheritedField -import org.utbot.examples.assemble.ListItem -import org.utbot.examples.assemble.NoModifier -import org.utbot.examples.assemble.PackagePrivateFields -import org.utbot.examples.assemble.PrimitiveFields import org.utbot.examples.assemble.arrays.ArrayOfComplexArrays import org.utbot.examples.assemble.arrays.ArrayOfPrimitiveArrays import org.utbot.examples.assemble.arrays.AssignedArray @@ -54,6 +45,7 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test +import org.utbot.examples.assemble.* /** * Test classes must be located in the same folder as [AssembleTestUtils] class. @@ -337,6 +329,26 @@ class AssembleModelGeneratorTests { createModelAndAssert(compositeModel, expectedRepresentation) } + @Test + fun testOnObjectWithFinalFields() { + val testClassId = DirectAccessFinal::class.id + + val arrayObjectFields = fields( + testClassId, + "array" to UtArrayModel( + modelIdCounter.incrementAndGet(), + intArrayClassId, + length = 2, + UtPrimitiveModel(0), + mutableMapOf(0 to UtPrimitiveModel(1), 1 to UtPrimitiveModel(2)), + ), + ) + val compositeModel = + UtCompositeModel(modelIdCounter.incrementAndGet(), testClassId, isMock = false, arrayObjectFields) + + createModelAndAssert(compositeModel, null) + } + //region inheritance_tests @Test