diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt index 46fb93856d..26262b988f 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt @@ -839,6 +839,7 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c // if model is already processed, so we don't want to add new statements if (fieldModel in visitedModels) { + currentBlock += testFrameworkManager.getDeepEqualsAssertion(expected, actual).toStatement() return } diff --git a/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithCrossReferenceRelationshipTest.kt b/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithCrossReferenceRelationshipTest.kt new file mode 100644 index 0000000000..f94c95e268 --- /dev/null +++ b/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithCrossReferenceRelationshipTest.kt @@ -0,0 +1,29 @@ +package org.utbot.examples.codegen.deepequals + +import org.junit.jupiter.api.Disabled +import org.junit.jupiter.api.Test +import org.utbot.examples.DoNotCalculate +import org.utbot.examples.UtValueTestCaseChecker +import org.utbot.examples.eq +import org.utbot.framework.codegen.CodeGeneration +import org.utbot.framework.plugin.api.CodegenLanguage + +class ClassWithCrossReferenceRelationshipTest : UtValueTestCaseChecker( + testClass = ClassWithCrossReferenceRelationship::class, + testCodeGeneration = true, + languagePipelines = listOf( + CodeGenerationLanguageLastStage(CodegenLanguage.JAVA), + CodeGenerationLanguageLastStage(CodegenLanguage.KOTLIN, CodeGeneration) + ) +) { + // TODO: The test is disabled due to [https://github.com/UnitTestBot/UTBotJava/issues/812] + @Disabled + @Test + fun testClassWithCrossReferenceRelationship() { + check( + ClassWithCrossReferenceRelationship::returnFirstClass, + eq(2), + coverage = DoNotCalculate + ) + } +} \ No newline at end of file diff --git a/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithNullableFieldTest.kt b/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithNullableFieldTest.kt index ec33b743f1..edbff7e6b6 100644 --- a/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithNullableFieldTest.kt +++ b/utbot-framework/src/test/kotlin/org/utbot/examples/codegen/deepequals/ClassWithNullableFieldTest.kt @@ -16,7 +16,7 @@ class ClassWithNullableFieldTest : UtValueTestCaseChecker( ) ) { @Test - fun testClassWithNullableField() { + fun testClassWithNullableFieldInCompound() { check( ClassWithNullableField::returnCompoundWithNullableField, eq(2), @@ -25,7 +25,7 @@ class ClassWithNullableFieldTest : UtValueTestCaseChecker( } @Test - fun testClassWithNullableField1() { + fun testClassWithNullableFieldInGreatCompound() { check( ClassWithNullableField::returnGreatCompoundWithNullableField, eq(3), diff --git a/utbot-sample/src/main/java/org/utbot/examples/codegen/deepequals/ClassWithCrossReferenceRelationship.java b/utbot-sample/src/main/java/org/utbot/examples/codegen/deepequals/ClassWithCrossReferenceRelationship.java new file mode 100644 index 0000000000..2f2b1c5590 --- /dev/null +++ b/utbot-sample/src/main/java/org/utbot/examples/codegen/deepequals/ClassWithCrossReferenceRelationship.java @@ -0,0 +1,30 @@ +package org.utbot.examples.codegen.deepequals; + +class FirstClass { + SecondClass secondClass; + + FirstClass(SecondClass second) { + this.secondClass = second; + } +} + +class SecondClass { + FirstClass firstClass; + + SecondClass(FirstClass first) { + this.firstClass = first; + } +} + +public class ClassWithCrossReferenceRelationship { + public FirstClass returnFirstClass(int value) { + if (value == 0) { + return new FirstClass(new SecondClass(null)); + } else { + FirstClass first = new FirstClass(null); + first.secondClass = new SecondClass(first); + + return first; + } + } +}