[tests] simplifies and speedups "recent tests" tests

This commit is contained in:
Roman Shevchenko
2017-12-13 16:13:44 +01:00
parent d0e4822f85
commit 857ef619dc
3 changed files with 133 additions and 229 deletions
@@ -1,161 +1,86 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
*/
package com.intellij.testIntergration
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo.Magnitude.FAILED_INDEX
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.SingleTestEntry
import com.intellij.testIntegration.SuiteEntry
import org.assertj.core.api.Assertions.assertThat
import org.junit.Test
import java.util.*
class RecentTestsOrderTest: LightIdeaTestCase() {
class RecentTestsOrderTest : RecentTestsTestCase() {
@Test fun `test run configuration with one suite shows only suite`() {
addPassedTest("MySingleTest.test1", now)
addSuite("MySingleTest", now)
lateinit var data: RecentTestsData
lateinit var allTests: RunnerAndConfigurationSettings
lateinit var now: Date
override fun setUp() {
super.setUp()
data = RecentTestsData()
allTests = mockConfiguration("all tests", "JUnit.all tests")
now = Date()
}
fun addPassedSuite(suiteUrl: String, date: Date = Date(), runConfiguration: RunnerAndConfigurationSettings = allTests) {
val suite = SuiteEntry(suiteUrl, date, runConfiguration)
data.addSuite(suite)
}
fun addFailedSuite(suiteUrl: String, date: Date = Date(), runConfiguration: RunnerAndConfigurationSettings = allTests) {
val suite = SuiteEntry(suiteUrl, date, runConfiguration)
data.addSuite(suite)
}
fun addPassedTest(testUrl: String, date: Date = Date(), runConfiguration: RunnerAndConfigurationSettings = allTests) {
val test = SingleTestEntry(testUrl, date, runConfiguration, PASSED_INDEX)
data.addTest(test)
}
fun addFailedTest(testUrl: String, date: Date = Date(), runConfiguration: RunnerAndConfigurationSettings = allTests) {
val test = SingleTestEntry(testUrl, date, runConfiguration, FAILED_INDEX)
data.addTest(test)
}
fun `test run configuration with one suite shows only suite`() {
val suite = "MySingleTest".suite()
val test1 = "MySingleTest.test1".test()
data.addTest(SingleTestEntry(test1, now, allTests, PASSED_INDEX))
data.addSuite(SuiteEntry(suite, now, allTests))
val testsToShow = data.getTestsToShow()
val testsToShow = getTestsToShow()
assertThat(testsToShow).hasSize(1)
assertThat(testsToShow[0].presentation).isEqualTo("all tests")
}
fun `test run configuration with multiple suites shows run configuration name`() {
val suite1 = "MyFirstTest".suite()
val test1 = "MyFirstTest.test1".test()
val suite2 = "MySecondTest".suite()
val test2 = "MySecondTest.test1".test()
addPassedSuite(suite1, now)
addPassedTest(test1, now)
addPassedSuite(suite2)
addPassedTest(test2)
val tests = data.getTestsToShow()
@Test fun `test run configuration with multiple suites shows run configuration name`() {
addSuite("MyFirstTest", now)
addPassedTest("MyFirstTest.test1", now)
addSuite("MySecondTest", Date())
addPassedTest("MySecondTest.test1", Date())
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("all tests")
}
fun `test show failed suite in test`() {
val suite = "SingleTest".suite()
val test = "SingleTest.test".test()
addPassedSuite(suite)
addFailedTest(test)
val tests = data.getTestsToShow()
@Test fun `test show failed suite in test`() {
addSuite("SingleTest", Date())
addFailedTest("SingleTest.test", Date())
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("SingleTest.test")
assertThat(tests[0].failed).isEqualTo(true)
}
fun `test show failed suite and test in run configuration`() {
val suite = "SingleTest".suite()
val test = "SingleTest.test".test()
val test2 = "SingleTest.test2".test()
addPassedSuite(suite)
addFailedTest(test)
addPassedTest(test2)
addPassedSuite("PassedSuite".suite())
val tests = data.getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("SingleTest.test")
assertThat(tests[0].failed).isEqualTo(true)
}
fun `test single test run doesn't override suite status`() {
@Test fun `test show failed suite and test in run configuration`() {
addSuite("SingleTest", Date())
addFailedTest("SingleTest.test", Date())
addPassedTest("SingleTest.test2", Date())
addSuite("PassedSuite", Date())
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("SingleTest.test")
assertThat(tests[0].failed).isEqualTo(true)
}
@Test fun `test single test run doesn't override suite status`() {
val singleTestConfig = mockConfiguration("single test", "Junit.single test")
val newNow = Date(now.time + 100000)
//previous all suite run
addFailedTest("Test.testFailed".test(), now, allTests)
addFailedTest("Test.testFailed", now)
//current single test run
addPassedSuite("Test".suite(), newNow, singleTestConfig)
addPassedTest("Test.testOK".test(), newNow, singleTestConfig)
val tests = data.getTestsToShow()
assertThat(tests).hasSize(2)
addSuite("Test", newNow, singleTestConfig)
addPassedTest("Test.testOK", newNow, singleTestConfig)
val tests = getTestsToShow()
assertThat(tests).hasSize(2)
assertThat(tests[0].presentation).isEqualTo("single test")
assertThat(tests[1].presentation).isEqualTo("Test.testFailed")
}
fun `test single test run doesn't override suite status, independent from registering order`() {
@Test fun `test single test run doesn't override suite status, independent from registering order`() {
val singleTestConfig = mockConfiguration("single test", "Junit.single test")
val newNow = Date(now.time + 100000)
//previous all suite run
addPassedTest("Test.testOK".test(), now, allTests)
addPassedTest("Test.testOK", now)
//current single test run
addFailedSuite("Test".suite(), newNow, singleTestConfig)
addFailedTest("Test.testFailed".test(), newNow, singleTestConfig)
addSuite("Test", newNow, singleTestConfig)
addFailedTest("Test.testFailed", newNow, singleTestConfig)
val tests = data.getTestsToShow()
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("Test.testFailed")
}
}
@@ -1,144 +1,87 @@
/*
* Copyright 2000-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
*/
package com.intellij.testIntergration
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo.Magnitude.FAILED_INDEX
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo.Magnitude.PASSED_INDEX
import com.intellij.testFramework.LightIdeaTestCase
import com.intellij.testIntegration.*
import com.intellij.testIntegration.RecentTestsPopupEntry
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
import java.util.*
import org.junit.Test
fun String.suite() = "java:suite://$this"
fun String.test() = "java:test://$this"
class RecentTestsStepTest : RecentTestsTestCase() {
@Test fun `test all tests passed`() {
addPassedTest("Test.textXXX", now)
addSuite("Test", now)
addSuite("JFSDTest", now)
addPassedTest("Test.textYYY", now)
addPassedTest("JFSDTest.testItMakesMeSadToFixIt", now)
addPassedTest("Test.textZZZ", now)
addPassedTest("Test.textQQQ", now)
addPassedTest("JFSDTest.testUnconditionalAlignmentErroneous", now)
fun mockConfiguration(name: String, uniqueID: String): RunnerAndConfigurationSettings {
val settings = mock(RunnerAndConfigurationSettings::class.java)
`when`(settings.uniqueID).thenAnswer { uniqueID }
`when`(settings.name).thenAnswer { name }
return settings
}
class RecentTestsStepTest: LightIdeaTestCase() {
lateinit var data: RecentTestsData
lateinit var allTests: RunnerAndConfigurationSettings
lateinit var now: Date
override fun setUp() {
super.setUp()
data = RecentTestsData()
allTests = mockConfiguration("all tests", "JUnit.all tests")
now = Date()
}
fun `test all tests passed`() {
data.addTest(SingleTestEntry("Test.textXXX".test(), now, allTests, PASSED_INDEX))
data.addSuite(SuiteEntry("Test".suite(), now, allTests))
data.addSuite(SuiteEntry("JFSDTest".suite(), now, allTests))
data.addTest(SingleTestEntry("Test.textYYY".test(), now, allTests, PASSED_INDEX))
data.addTest(SingleTestEntry("JFSDTest.testItMakesMeSadToFixIt".test(), now, allTests, PASSED_INDEX))
data.addTest(SingleTestEntry("Test.textZZZ".test(), now, allTests, PASSED_INDEX))
data.addTest(SingleTestEntry("Test.textQQQ".test(), now, allTests, PASSED_INDEX))
data.addTest(SingleTestEntry("JFSDTest.testUnconditionalAlignmentErrorneous".test(), now, allTests, PASSED_INDEX))
val tests = data.getTestsToShow()
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("all tests")
}
@Test fun `test if one failed in run configuration show failed suite`() {
addSuite("JFSDTest", now)
addSuite("Test", now)
addFailedTest("JFSDTest.testItMakesMeSadToFixIt", now)
addPassedTest("JFSDTest.testUnconditionalAlignmentErroneous", now)
addPassedTest("Test.textXXX", now)
fun `test if one failed in run configuration show failed suite`() {
data.addSuite(SuiteEntry("JFSDTest".suite(), now, allTests))
data.addSuite(SuiteEntry("Test".suite(), now, allTests))
data.addTest(SingleTestEntry("JFSDTest.testItMakesMeSadToFixIt".test(), now, allTests, FAILED_INDEX))
data.addTest(SingleTestEntry("JFSDTest.testUnconditionalAlignmentErrorneous".test(), now, allTests, PASSED_INDEX))
data.addTest(SingleTestEntry("Test.textXXX".test(), now, allTests, PASSED_INDEX))
val tests = data.getTestsToShow()
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("JFSDTest.testItMakesMeSadToFixIt")
assertThat(tests[0].failed).isEqualTo(true)
}
fun `test if configuration with single test show failed test`() {
data.addSuite(SuiteEntry("JFSDTest".suite(), now, allTests))
data.addTest(SingleTestEntry("JFSDTest.testItMakesMeSadToFixIt".test(), now, allTests, FAILED_INDEX))
data.addTest(SingleTestEntry("JFSDTest.testUnconditionalAlignmentErrorneous".test(), now, allTests, PASSED_INDEX))
val tests = data.getTestsToShow()
@Test fun `test if configuration with single test show failed test`() {
addSuite("JFSDTest", now)
addFailedTest("JFSDTest.testItMakesMeSadToFixIt", now)
addPassedTest("JFSDTest.testUnconditionalAlignmentErroneous", now)
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
assertThat(tests[0].presentation).isEqualTo("JFSDTest.testItMakesMeSadToFixIt")
}
fun `test show test without suite`() {
data.addTest(SingleTestEntry("Test.sssss".test(), now, allTests, FAILED_INDEX))
val testsToShow = data.getTestsToShow()
@Test fun `test show test without suite`() {
addFailedTest("Test.someTest", now)
val testsToShow = getTestsToShow()
assertThat(testsToShow).hasSize(1)
}
@Test fun `test additional entries`() {
addSuite("Test2", now)
addSuite("Test", now)
addFailedTest("Test.sss", now)
fun `test additional entries`() {
data.addSuite(SuiteEntry("Test2".suite(), now, allTests))
data.addSuite(SuiteEntry("Test".suite(), now, allTests))
data.addTest(SingleTestEntry("Test.sss".test(), now, allTests, FAILED_INDEX))
val tests = data.getTestsToShow()
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
val failedTest = tests[0]
val collector = TestConfigurationCollector()
failedTest.accept(collector)
val configs = collector.getEnclosingConfigurations()
val configs = getConfigs(tests[0])
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(SuiteEntry("Test".suite(), now, allTests))
data.addTest(SingleTestEntry("Test.sss".test(), now, allTests, FAILED_INDEX))
val tests = data.getTestsToShow()
@Test fun `test if configuration consists of single test show only configuration`() {
addSuite("Test", now)
addFailedTest("Test.sss", now)
val tests = getTestsToShow()
assertThat(tests).hasSize(1)
val collector = TestConfigurationCollector()
tests[0].accept(collector)
val configs = collector.getEnclosingConfigurations()
val configs = getConfigs(tests[0])
assertThat(configs).hasSize(1)
assertThat(configs[0]).isInstanceOf(RunConfigurationEntry::class.java)
}
private fun getConfigs(test: RecentTestsPopupEntry): List<RecentTestsPopupEntry> {
val collector = TestConfigurationCollector()
test.accept(collector)
return collector.getEnclosingConfigurations()
}
}
@@ -0,0 +1,36 @@
/*
* Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
*/
package com.intellij.testIntergration
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo
import com.intellij.testIntegration.RecentTestsData
import com.intellij.testIntegration.SingleTestEntry
import com.intellij.testIntegration.SuiteEntry
import org.mockito.Mockito
import java.util.*
abstract class RecentTestsTestCase {
private val data = RecentTestsData()
private val allTests: RunnerAndConfigurationSettings = mockConfiguration("all tests", "JUnit.all tests")
protected val now = Date()
protected fun mockConfiguration(name: String, uniqueID: String): RunnerAndConfigurationSettings {
val settings = Mockito.mock(RunnerAndConfigurationSettings::class.java)
Mockito.`when`(settings.uniqueID).thenAnswer { uniqueID }
Mockito.`when`(settings.name).thenAnswer { name }
return settings
}
protected fun addSuite(suiteName: String, date: Date, runConfiguration: RunnerAndConfigurationSettings = allTests) =
data.addSuite(SuiteEntry("java:suite://$suiteName", date, runConfiguration))
protected fun addPassedTest(testName: String, date: Date, runConfiguration: RunnerAndConfigurationSettings = allTests) =
data.addTest(SingleTestEntry("java:test://$testName", date, runConfiguration, TestStateInfo.Magnitude.PASSED_INDEX))
protected fun addFailedTest(testName: String, date: Date, runConfiguration: RunnerAndConfigurationSettings = allTests) =
data.addTest(SingleTestEntry("java:test://$testName", date, runConfiguration, TestStateInfo.Magnitude.FAILED_INDEX))
protected fun getTestsToShow() = data.getTestsToShow()
}