Skip to content

Commit af1b2b3

Browse files
authored
Skip test generation for abstract methods #550 (#556)
1 parent 85921ca commit af1b2b3

File tree

5 files changed

+24
-6
lines changed

5 files changed

+24
-6
lines changed

utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsCommand.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class GenerateTestsCommand :
9696
val classUnderTest: KClass<*> = loadClassBySpecifiedFqn(targetClassFqn)
9797
val targetMethods = classUnderTest.targetMethods()
9898
.filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) { !isKnownSyntheticMethod(it) }
99+
.filterNot { it.callable.isAbstract }
99100
val testCaseGenerator = initializeGenerator(workingDirectory)
100101

101102
if (targetMethods.isEmpty()) {

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import com.intellij.openapi.ui.Messages
1919
import com.intellij.openapi.util.Computable
2020
import com.intellij.openapi.util.text.StringUtil
2121
import com.intellij.psi.PsiClass
22+
import com.intellij.psi.PsiModifier
2223
import com.intellij.psi.SyntheticElement
2324
import com.intellij.refactoring.util.classMembers.MemberInfo
2425
import com.intellij.testIntegration.TestIntegrationUtils
@@ -54,6 +55,7 @@ import org.utbot.common.filterWhen
5455
import org.utbot.engine.util.mockListeners.ForceStaticMockListener
5556
import org.utbot.framework.plugin.api.testFlow
5657
import org.utbot.intellij.plugin.settings.Settings
58+
import org.utbot.intellij.plugin.util.isAbstract
5759
import kotlin.reflect.KClass
5860
import kotlin.reflect.full.functions
5961

@@ -152,6 +154,7 @@ object UtTestsDialogProcessor {
152154
.filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) {
153155
it.member !is SyntheticElement
154156
}
157+
.filterNot { it.isAbstract }
155158
DumbService.getInstance(project).runReadActionInSmartMode(Computable {
156159
findMethodsInClassMatchingSelected(clazz, srcMethods)
157160
})
@@ -189,9 +192,10 @@ object UtTestsDialogProcessor {
189192
ForceStaticMockListener.create(testCaseGenerator, model.conflictTriggers)
190193
}
191194

192-
val notEmptyCases = withUtContext(context) {
193-
testCaseGenerator
194-
.generate(
195+
val notEmptyCases = runCatching {
196+
withUtContext(context) {
197+
testCaseGenerator
198+
.generate(
195199
methods,
196200
model.mockStrategy,
197201
model.chosenClassesToMockAlways,
@@ -203,9 +207,10 @@ object UtTestsDialogProcessor {
203207
fuzzingValue = project.service<Settings>().fuzzingValue
204208
}
205209
)
206-
.map { it.summarize(searchDirectory) }
207-
.filterNot { it.executions.isEmpty() && it.errors.isEmpty() }
208-
}
210+
.map { it.summarize(searchDirectory) }
211+
.filterNot { it.executions.isEmpty() && it.errors.isEmpty() }
212+
}
213+
}.getOrDefault(listOf())
209214

210215
if (notEmptyCases.isEmpty()) {
211216
showErrorDialogLater(

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ import com.intellij.psi.PsiClass
4040
import com.intellij.psi.PsiManager
4141
import com.intellij.psi.PsiMethod
4242
import com.intellij.psi.SyntheticElement
43+
import com.intellij.psi.PsiModifier
4344
import com.intellij.refactoring.PackageWrapper
4445
import com.intellij.refactoring.ui.MemberSelectionTable
4546
import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo
@@ -129,6 +130,7 @@ import javax.swing.JComponent
129130
import javax.swing.JList
130131
import javax.swing.JPanel
131132
import kotlin.streams.toList
133+
import org.utbot.intellij.plugin.util.isAbstract
132134

133135
private const val RECENTS_KEY = "org.utbot.recents"
134136

@@ -372,6 +374,7 @@ class GenerateTestsDialogWindow(val model: GenerateTestsModel) : DialogWrapper(m
372374
if (srcClasses.size == 1) {
373375
items = TestIntegrationUtils.extractClassMethods(srcClasses.single(), false)
374376
.filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) { it.member !is SyntheticElement }
377+
.filterNot { it.isAbstract }
375378
updateMethodsTable(items)
376379
} else {
377380
items = srcClasses.map { MemberInfo(it) }
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.utbot.intellij.plugin.util
2+
3+
import com.intellij.psi.PsiModifier
4+
import com.intellij.psi.PsiModifierListOwner
5+
import com.intellij.refactoring.classMembers.MemberInfoBase
6+
7+
val MemberInfoBase<out PsiModifierListOwner>.isAbstract: Boolean
8+
get() = this.member.modifierList?.hasModifierProperty(PsiModifier.ABSTRACT)?: false

utbot-junit-contest/src/main/kotlin/org/utbot/contest/Contest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ private fun prepareClass(kotlinClass: KClass<*>, methodNameFilter: String?): Lis
442442
.filter { methodNameFilter?.equals(it.callable.name) ?: true }
443443
.filterNot { it.isConstructor && (it.clazz.isAbstract || it.clazz.java.isEnum) }
444444
.filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) { !isKnownSyntheticMethod(it) }
445+
.filterNot { it.callable.isAbstract }
445446
.toList()
446447

447448
return if (kotlinClass.nestedClasses.isEmpty()) {

0 commit comments

Comments
 (0)