[Recent Tests] prevent from showing suite twice in select configuration step

This commit is contained in:
Yaroslav Lepenkin
2016-08-09 18:18:53 +03:00
parent 01a4286bc5
commit 5775c66e61
3 changed files with 57 additions and 26 deletions
@@ -130,32 +130,9 @@ class SelectTestStep(title: String?,
}
private fun getConfigurations(entry: RecentTestsPopupEntry): List<RecentTestsPopupEntry> {
val items = mutableListOf<RecentTestsPopupEntry>()
entry.accept(object : TestEntryVisitor() {
override fun visitTest(test: SingleTestEntry) {
val configuration = test.suite?.runConfigurationEntry ?: RunConfigurationEntry(test.runConfiguration)
items.add(test.suite ?: return)
if (isSingleTestConfiguration(configuration)) {
items.add(test.suite ?: return)
return
}
items.add(configuration)
if (configuration.suites.size > 1) {
items.add(0, test.suite ?: return)
}
}
private fun isSingleTestConfiguration(configuration: RunConfigurationEntry): Boolean {
val suites = configuration.suites
return suites.size == 1 && suites[0].tests.size == 1
}
})
return items
val collector = TestConfigurationCollector()
entry.accept(collector)
return collector.getEnclosingConfigurations()
}
}
@@ -56,4 +56,20 @@ class ConfigurationsCollector : TestEntryVisitor() {
override fun visitSuite(suite: SuiteEntry) {
entries.add(suite)
}
}
class TestConfigurationCollector : TestEntryVisitor() {
private val items = mutableListOf<RecentTestsPopupEntry>()
fun getEnclosingConfigurations(): List<RecentTestsPopupEntry> = items
override fun visitTest(test: SingleTestEntry) {
val configurationEntry = test.suite?.runConfigurationEntry ?: RunConfigurationEntry(test.runConfiguration)
items.add(configurationEntry)
if (test.suite != null && configurationEntry.suites.size > 1) {
items.add(0, test.suite!!)
}
}
}
@@ -20,6 +20,9 @@ import com.intellij.execution.testframework.sm.runner.states.TestStateInfo.Magni
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo.Magnitude.PASSED_INDEX
import com.intellij.testFramework.LightIdeaTestCase
import com.intellij.testIntegration.RecentTestsData
import com.intellij.testIntegration.RunConfigurationEntry
import com.intellij.testIntegration.SuiteEntry
import com.intellij.testIntegration.TestConfigurationCollector
import org.assertj.core.api.Assertions.assertThat
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
@@ -99,6 +102,41 @@ class RecentTestsStepTest: LightIdeaTestCase() {
assertThat(testsToShow).hasSize(1)
}
fun `test additional entries`() {
data.addSuite("Test2".suite(), now, allTests)
data.addSuite("Test".suite(), now, allTests)
data.addTest("Test.sss".test(), FAILED_INDEX, now, allTests)
val tests = data.getTestsToShow()
assertThat(tests).hasSize(1)
val failedTest = tests[0]
val collector = TestConfigurationCollector()
failedTest.accept(collector)
val configs = collector.getEnclosingConfigurations()
assertThat(configs).hasSize(2)
assertThat(configs[0]).isInstanceOf(SuiteEntry::class.java)
assertThat(configs[1]).isInstanceOf(RunConfigurationEntry::class.java)
}
fun `test if configuration consists of single test show only configuration`() {
data.addSuite("Test".suite(), now, allTests)
data.addTest("Test.sss".test(), FAILED_INDEX, now, allTests)
val tests = data.getTestsToShow()
assertThat(tests).hasSize(1)
val collector = TestConfigurationCollector()
tests[0].accept(collector)
val configs = collector.getEnclosingConfigurations()
assertThat(configs).hasSize(1)
assertThat(configs[0]).isInstanceOf(RunConfigurationEntry::class.java)
}
}