From 2490dddd0b06e81b2aa547582c302745f4fa4b92 Mon Sep 17 00:00:00 2001 From: Andrey Tarbeev Date: Mon, 12 Sep 2022 16:21:32 +0300 Subject: [PATCH] Add assertNotNull for actual in parameterized test generation --- .../org/utbot/framework/codegen/Domain.kt | 2 ++ .../constructor/tree/CgMethodConstructor.kt | 17 ++++++++++++----- .../constructor/tree/TestFrameworkManager.kt | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt index c9087c7462..804110c846 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt @@ -219,6 +219,8 @@ sealed class TestFramework( val assertNull by lazy { assertionId("assertNull", objectClassId) } + val assertNotNull by lazy { assertionId("assertNotNull", objectClassId) } + val assertFalse by lazy { assertionId("assertFalse", booleanClassId) } val assertTrue by lazy { assertionId("assertTrue", booleanClassId) } 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 3be50621e5..367c68a8f5 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 @@ -1212,7 +1212,10 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c else -> ifStatement( CgEqualTo(expected, nullLiteral()), trueBranch = { +testFrameworkManager.assertions[testFramework.assertNull](actual).toStatement() }, - falseBranch = { generateDeepEqualsAssertion(expected, actual) } + falseBranch = { + +testFrameworkManager.assertions[testFrameworkManager.assertNotNull](actual).toStatement() + generateDeepEqualsAssertion(expected, actual) + } ) } } @@ -1344,10 +1347,7 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c fun createParameterizedTestMethod(testSet: CgMethodTestSet, dataProviderMethodName: String): CgTestMethod { //TODO: orientation on generic execution may be misleading, but what is the alternative? //may be a heuristic to select a model with minimal number of internal nulls should be used - val genericExecution = testSet.executions - .firstOrNull { it.result is UtExecutionSuccess && (it.result as UtExecutionSuccess).model !is UtNullModel } - ?: testSet.executions - .firstOrNull { it.result is UtExecutionSuccess } ?: testSet.executions.first() + val genericExecution = chooseGenericExecution(testSet.executions) val statics = genericExecution.stateBefore.statics @@ -1415,6 +1415,13 @@ internal class CgMethodConstructor(val context: CgContext) : CgContextOwner by c } } + private fun chooseGenericExecution(executions: List): UtExecution { + return executions + .firstOrNull { it.result is UtExecutionSuccess && (it.result as UtExecutionSuccess).model !is UtNullModel } + ?: executions + .firstOrNull { it.result is UtExecutionSuccess } ?: executions.first() + } + private fun createParameterDeclarations( testSet: CgMethodTestSet, genericExecution: UtExecution, diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt index 459734f0a9..576440dfc3 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt @@ -60,6 +60,7 @@ internal abstract class TestFrameworkManager(val context: CgContext) val assertDoubleEquals = context.testFramework.assertDoubleEquals val assertNull = context.testFramework.assertNull + val assertNotNull = context.testFramework.assertNotNull val assertTrue = context.testFramework.assertTrue val assertFalse = context.testFramework.assertFalse