Skip to content

Made more consistent tests produced from Fuzzed and Symbolic executions based on UtSummarySettings. #1316

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Nov 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions utbot-summary/src/main/kotlin/org/utbot/summary/Summarization.kt
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,14 @@ class Summarization(val sourceFile: File?, val invokeDescriptions: List<InvokeDe
return listOf(UtExecutionCluster(UtClusterInfo(), testSet.executions))
}

val clustersToReturn = mutableListOf<UtExecutionCluster>()
val executionClusters = mutableListOf<UtExecutionCluster>()

clustersToReturn += generateSummariesForTestsWithNonEmptyPathsProducedBySymbolicExecutor(testSet)
clustersToReturn += generateSummariesForTestsProducedByFuzzer(testSet)
clustersToReturn += generateSummariesForTestsWithEmptyPathsProducedBySymbolicExecutor(testSet)
executionClusters += generateSummariesForTestsWithNonEmptyPathsProducedBySymbolicExecutor(testSet)
executionClusters += generateSummariesForTestsProducedByFuzzer(testSet)
executionClusters += generateSummariesForTestsWithEmptyPathsProducedBySymbolicExecutor(testSet)

return if (clustersToReturn.size > 0)
clustersToReturn
return if (GENERATE_CLUSTER_COMMENTS && executionClusters.size > 0)
executionClusters
else
listOf(UtExecutionCluster(UtClusterInfo(), testSet.executions))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ object SummarySentenceConstants {
const val CARRIAGE_RETURN = "\r"

const val FROM_TO_NAMES_TRANSITION = "->"
const val FROM_TO_NAMES_COLON = ":"
const val AT_CODE = "@code"
const val OPEN_BRACKET = "{"
const val CLOSE_BRACKET = "}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import org.utbot.framework.plugin.api.*
import org.utbot.framework.plugin.api.util.voidClassId
import org.utbot.fuzzer.FuzzedMethodDescription
import org.utbot.fuzzer.FuzzedValue
import org.utbot.summary.SummarySentenceConstants.FROM_TO_NAMES_COLON
import org.utbot.summary.SummarySentenceConstants.FROM_TO_NAMES_TRANSITION
import org.utbot.summary.UtSummarySettings
import org.utbot.summary.comment.classic.fuzzer.SimpleCommentForTestProducedByFuzzerBuilder
import org.utbot.summary.comment.customtags.fuzzer.CommentWithCustomTagForTestProducedByFuzzerBuilder
Expand Down Expand Up @@ -33,8 +35,8 @@ class ModelBasedNameSuggester(

return sequenceOf(
TestSuggestedInfo(
testName = createTestName(description, values, result),
displayName = createDisplayName(description, values, result),
testName = if (UtSummarySettings.GENERATE_NAMES) createTestName(description, values, result) else null,
displayName = if (UtSummarySettings.GENERATE_DISPLAY_NAMES) createDisplayName(description, values, result) else null,
javaDoc = if (UtSummarySettings.GENERATE_COMMENTS) createJavaDoc(description, values, result) else null
)
)
Expand Down Expand Up @@ -104,12 +106,17 @@ class ModelBasedNameSuggester(
* Result example:
* 1. **Full name**: `firstArg = 12, secondArg < 100.0, thirdArg = empty string -> throw IllegalArgumentException`
* 2. **Name without appropriate information**: `arg_0 = 0 and others -> return 0`
*
* NOTE: The ```:``` symbol is used as a separator instead
* of ```->``` if the [UtSummarySettings.GENERATE_DISPLAYNAME_FROM_TO_STYLE] is false.
*/
private fun createDisplayName(
description: FuzzedMethodDescription,
values: List<FuzzedValue>,
result: UtExecutionResult?
): String {
val displayNameSeparator = if (UtSummarySettings.GENERATE_DISPLAYNAME_FROM_TO_STYLE) FROM_TO_NAMES_TRANSITION else FROM_TO_NAMES_COLON

val summaries = values.asSequence()
.mapIndexed { index, value ->
value.summary?.replace("%var%", description.parameterNameMap(index) ?: "arg_$index")
Expand All @@ -127,13 +134,13 @@ class ModelBasedNameSuggester(
val returnValue = when (result) {
is UtExecutionSuccess -> result.model.let { m ->
when {
m is UtPrimitiveModel && m.classId != voidClassId -> "-> return " + m.value
m is UtNullModel -> "-> return null"
m is UtPrimitiveModel && m.classId != voidClassId -> "$displayNameSeparator return " + m.value
m is UtNullModel -> "$displayNameSeparator return null"
else -> null
}
}

is UtExplicitlyThrownException, is UtImplicitlyThrownException -> "-> throw ${(result as UtExecutionFailure).exception::class.java.simpleName}"
is UtExplicitlyThrownException, is UtImplicitlyThrownException -> "$displayNameSeparator throw ${(result as UtExecutionFailure).exception::class.java.simpleName}"
else -> null
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import org.utbot.framework.plugin.api.DocStatement
* Information that can be used to generate test meta-information, including name, display name and JavaDoc.
*/
class TestSuggestedInfo(
val testName: String,
val testName: String? = null,
val displayName: String? = null,
val javaDoc: List<DocStatement>? = null
)