mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-10 13:17:09 +07:00
Recent tests collapses tests executed from the same run configuration.
- provided simple versioning of TestStateStorage.Record - run configuration name hash is saved into TestStateStorage.Record - lots of refactorings
This commit is contained in:
@@ -15,290 +15,73 @@
|
||||
*/
|
||||
package com.intellij.testIntergration
|
||||
|
||||
import com.intellij.execution.Location
|
||||
import com.intellij.execution.TestStateStorage
|
||||
import com.intellij.execution.RunnerAndConfigurationSettings
|
||||
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo
|
||||
import com.intellij.openapi.vfs.VirtualFileManager
|
||||
import com.intellij.testFramework.LightIdeaTestCase
|
||||
import com.intellij.testIntegration.*
|
||||
import com.intellij.testIntegration.RecentTestsData
|
||||
import org.assertj.core.api.Assertions.assertThat
|
||||
import org.mockito.Matchers
|
||||
import org.mockito.Mockito.`when`
|
||||
import org.mockito.Mockito.mock
|
||||
import java.util.*
|
||||
|
||||
fun passed(date: Date) = TestStateStorage.Record(TestStateInfo.Magnitude.PASSED_INDEX.value, date)
|
||||
fun failed(date: Date) = TestStateStorage.Record(TestStateInfo.Magnitude.FAILED_INDEX.value, date)
|
||||
|
||||
class RecentTestsStepTest: LightIdeaTestCase() {
|
||||
val runner = mock(RecentTestRunner::class.java)
|
||||
|
||||
val passed = passed(Date(0))
|
||||
val failed = failed(Date(0))
|
||||
|
||||
class TestStorage {
|
||||
private val map: MutableMap<String, TestStateStorage.Record> = hashMapOf()
|
||||
|
||||
fun addSuite(name: String, pass: Boolean, date: Date = Date(0), language: String = "java") {
|
||||
val magnitude = if (pass) TestStateInfo.Magnitude.PASSED_INDEX else TestStateInfo.Magnitude.FAILED_INDEX
|
||||
addSuite(name, magnitude, date, language)
|
||||
}
|
||||
|
||||
fun addSuite(name: String, magnitude: TestStateInfo.Magnitude, date: Date = Date(0), language: String = "java") {
|
||||
val record = TestStateStorage.Record(magnitude.value, date)
|
||||
map.put("$language:suite://$name", record)
|
||||
}
|
||||
|
||||
fun addTest(name: String, magnitude: TestStateInfo.Magnitude, date: Date = Date(0)) {
|
||||
val record = TestStateStorage.Record(magnitude.value, date)
|
||||
map.put("java:test://$name", record)
|
||||
}
|
||||
lateinit var data: RecentTestsData
|
||||
lateinit var allTests: RunnerAndConfigurationSettings
|
||||
lateinit var now: Date
|
||||
|
||||
fun addTest(name: String, pass: Boolean, date: Date = Date(0)) {
|
||||
val magnitude = if (pass) TestStateInfo.Magnitude.PASSED_INDEX else TestStateInfo.Magnitude.FAILED_INDEX
|
||||
addTest(name, magnitude, date)
|
||||
}
|
||||
|
||||
fun getMap() = map
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
data = RecentTestsData()
|
||||
allTests = mock(RunnerAndConfigurationSettings::class.java)
|
||||
`when`(allTests.uniqueID).thenAnswer { "JUnit.all tests" }
|
||||
`when`(allTests.name).thenAnswer { "all tests" }
|
||||
now = Date()
|
||||
}
|
||||
|
||||
fun getSuite(name: String, language: String = "java") = map["$language:suite://$name"]
|
||||
fun `test all tests passed`() {
|
||||
data.addTest("java:test://Test.textXXX", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addSuite("java:suite://Test", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addSuite("java:suite://JavaFormatterSuperDuperTest", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addTest("java:test://Test.textYYY", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addTest("java:test://JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addTest("java:test://Test.textZZZ", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addTest("java:test://Test.textQQQ", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
data.addTest("java:test://JavaFormatterSuperDuperTest.testUnconditionalAlignmentErrorneous", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
|
||||
val tests = data.getTestsToShow()
|
||||
assertThat(tests).hasSize(1)
|
||||
assertThat(tests[0].presentation).isEqualTo("all tests")
|
||||
}
|
||||
|
||||
|
||||
fun `test if one failed in run configuration show failed suite`() {
|
||||
data.addSuite("java:suite://JavaFormatterSuperDuperTest", TestStateInfo.Magnitude.FAILED_INDEX, now, allTests)
|
||||
data.addSuite("java:suite://Test", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
|
||||
data.addTest("java:test://JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt", TestStateInfo.Magnitude.FAILED_INDEX, now, allTests)
|
||||
data.addTest("java:test://JavaFormatterSuperDuperTest.testUnconditionalAlignmentErrorneous", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
|
||||
fun removeUrl(url: String) {
|
||||
map.remove(url)
|
||||
}
|
||||
data.addTest("java:test://Test.textXXX", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
|
||||
val tests = data.getTestsToShow()
|
||||
|
||||
assertThat(tests).hasSize(2)
|
||||
assertThat(tests[0].presentation).isEqualTo("JavaFormatterSuperDuperTest")
|
||||
assertThat(tests[1].presentation).isEqualTo("all tests")
|
||||
}
|
||||
|
||||
fun `test show sorted by date`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
fun `test if configuration with single test show failed test`() {
|
||||
data.addSuite("java:suite://JavaFormatterSuperDuperTest", TestStateInfo.Magnitude.FAILED_INDEX, now, allTests)
|
||||
data.addTest("java:test://JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt", TestStateInfo.Magnitude.FAILED_INDEX, now, allTests)
|
||||
data.addTest("java:test://JavaFormatterSuperDuperTest.testUnconditionalAlignmentErrorneous", TestStateInfo.Magnitude.PASSED_INDEX, now, allTests)
|
||||
|
||||
storage.addSuite("ASTest", true, Date(1000))
|
||||
storage.addSuite("JSTest", true, Date(1200))
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf("JSTest", "ASTest"))
|
||||
val tests = data.getTestsToShow()
|
||||
assertThat(tests).hasSize(2)
|
||||
assertThat(tests[0].presentation).isEqualTo("JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt")
|
||||
assertThat(tests[1].presentation).isEqualTo("JavaFormatterSuperDuperTest")
|
||||
}
|
||||
|
||||
fun `test show tests sorted by date`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
storage.addSuite("ASTest", false, Date(0))
|
||||
storage.addTest("ASTest.xxxx", true, Date(99999))
|
||||
|
||||
storage.addTest("ASTest.aaaa", false, Date(10000))
|
||||
storage.addTest("ASTest.cccc", false, Date(20000))
|
||||
storage.addTest("ASTest.bbbb", false, Date(30000))
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf("ASTest", "ASTest.bbbb", "ASTest.cccc", "ASTest.aaaa"))
|
||||
}
|
||||
|
||||
fun `test show ignored`() {
|
||||
val storage = TestStorage()
|
||||
storage.addSuite("ASTest", TestStateInfo.Magnitude.IGNORED_INDEX)
|
||||
storage.addTest("ASTest.ignored", TestStateInfo.Magnitude.IGNORED_INDEX)
|
||||
storage.addTest("ASTest.passed", pass = true)
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf("ASTest"))
|
||||
}
|
||||
|
||||
fun `test when suite passed - show only suite`() {
|
||||
val map: MutableMap<String, TestStateStorage.Record> = hashMapOf()
|
||||
|
||||
map.put("java:suite://JavaFormatterSuperDuperTest", passed)
|
||||
map.put("java:test://Test.textXXX", passed)
|
||||
map.put("java:suite://Test", passed)
|
||||
map.put("java:test://Test.textYYY", passed)
|
||||
map.put("java:test://Test.textZZZ", passed)
|
||||
map.put("java:test://JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt", passed)
|
||||
map.put("java:test://Test.textQQQ", passed)
|
||||
map.put("java:test://JavaFormatterSuperDuperTest.testUnconditionalAlignmentErrorneous", passed)
|
||||
|
||||
val expected = listOf(
|
||||
"java:suite://JavaFormatterSuperDuperTest",
|
||||
"java:suite://Test"
|
||||
)
|
||||
|
||||
val list = getSortedList(map)
|
||||
assertThat(list).isEqualTo(expected)
|
||||
}
|
||||
|
||||
private fun getSortedList(map: MutableMap<String, TestStateStorage.Record>): List<String> {
|
||||
val provider = RecentTestsListProvider(map)
|
||||
return provider.urlsToShowFromHistory
|
||||
}
|
||||
|
||||
|
||||
fun `test show only java tests`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
storage.addSuite("JavaTest1", true)
|
||||
storage.addSuite("JavaTest2", true)
|
||||
|
||||
storage.addSuite("JsSuite1", true, Date(0), "js")
|
||||
storage.addSuite("JsSuite2", true, Date(0), "js")
|
||||
storage.addSuite("JsSuite3", true, Date(0), "js")
|
||||
|
||||
val values = getSortedList(storage.getMap())
|
||||
assertThat(values.map { VirtualFileManager.extractPath(it) }).isEqualTo(listOf("JavaTest1", "JavaTest2"))
|
||||
}
|
||||
|
||||
fun `test show failed first`() {
|
||||
val map: MutableMap<String, TestStateStorage.Record> = hashMapOf()
|
||||
|
||||
map.put("java:suite://JavaFormatterSuperDuperTest", failed)
|
||||
map.put("java:test://Test.textXXX", passed)
|
||||
map.put("java:suite://Test", passed)
|
||||
map.put("java:suite://JavaFormatterFailed", failed)
|
||||
map.put("java:test://JavaFormatterFailed.fail", failed)
|
||||
map.put("java:test://JavaFormatterFailed.notFail", passed)
|
||||
map.put("java:test://Test.textYYY", passed)
|
||||
map.put("java:test://Test.textZZZ", passed)
|
||||
map.put("java:test://JavaFormatterSuperDuperTest.testFail", failed)
|
||||
map.put("java:test://Test.textQQQ", passed)
|
||||
map.put("java:test://JavaFormatterSuperDuperTest.testUnconditionalAlignmentErrorneous", passed)
|
||||
|
||||
val values = getSortedList(map)
|
||||
|
||||
val expected = listOf(
|
||||
"java:test://JavaFormatterFailed.fail",
|
||||
"java:suite://JavaFormatterFailed",
|
||||
"java:test://JavaFormatterSuperDuperTest.testFail",
|
||||
"java:suite://JavaFormatterSuperDuperTest",
|
||||
"java:suite://Test"
|
||||
)
|
||||
|
||||
assertThat(values).isEqualTo(expected)
|
||||
}
|
||||
|
||||
fun `test if failed more than 2 tests show suite first`() {
|
||||
val storage = TestStorage()
|
||||
storage.addSuite("ASTest", false)
|
||||
storage.addTest("ASTest.failed1", false, Date(3000))
|
||||
storage.addTest("ASTest.failed2", false, Date(2000))
|
||||
storage.addTest("ASTest.failed3", false, Date(1000))
|
||||
storage.addTest("ASTest.passed1", true)
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf(
|
||||
"ASTest",
|
||||
"ASTest.failed1",
|
||||
"ASTest.failed2",
|
||||
"ASTest.failed3"
|
||||
))
|
||||
}
|
||||
|
||||
fun `test if failed less than 3 tests, show tests first`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
storage.addSuite("ASTest", false)
|
||||
storage.addTest("ASTest.failed1", false, Date(3000))
|
||||
storage.addTest("ASTest.failed2", false, Date(2000))
|
||||
storage.addTest("ASTest.passed1", true)
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf(
|
||||
"ASTest.failed1",
|
||||
"ASTest.failed2",
|
||||
"ASTest"
|
||||
))
|
||||
}
|
||||
|
||||
fun `test if all failed show only suite`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
storage.addSuite("ASTest", false)
|
||||
storage.addTest("ASTest.failed1", false)
|
||||
storage.addTest("ASTest.failed2", false)
|
||||
storage.addTest("ASTest.failed3", false)
|
||||
storage.addTest("ASTest.failed4", false)
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf("ASTest"))
|
||||
}
|
||||
|
||||
private fun locatorReturningNullIfContains(substring: String): TestLocator {
|
||||
val locator = mock(TestLocator::class.java)
|
||||
`when`(locator.getLocation(Matchers.anyString())).thenAnswer {
|
||||
val url = it.arguments[0] as String
|
||||
if (url.contains(substring)) null else mock(Location::class.java)
|
||||
}
|
||||
return locator
|
||||
}
|
||||
|
||||
fun `test shown value without protocol`() {
|
||||
val step = SelectTestStep(emptyList(), emptyMap(), runner, mock(TestLocator::class.java))
|
||||
var shownValue = step.getTextFor("java:suite://JavaFormatterSuperDuperTest")
|
||||
assertThat(shownValue).isEqualTo("JavaFormatterSuperDuperTest")
|
||||
|
||||
shownValue = step.getTextFor("java:test://JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt")
|
||||
assertThat(shownValue).isEqualTo("JavaFormatterSuperDuperTest.testItMakesMeSadToFixIt")
|
||||
}
|
||||
|
||||
fun `test do not show urls which we can locate without location`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
storage.addSuite("ASTest", true)
|
||||
storage.addSuite("BSTest", false)
|
||||
storage.addTest("BSTest.fff", false)
|
||||
storage.addTest("BSTest.ppp", true)
|
||||
|
||||
storage.addTest("<default package>", false)
|
||||
storage.addSuite("<default package>", false)
|
||||
|
||||
val testStorageMock = createMockStorage(storage)
|
||||
|
||||
val map = storage.getMap()
|
||||
|
||||
val cleaner = DeadTestsCleaner(testStorageMock, map.keys.toList(), locatorReturningNullIfContains("<"))
|
||||
cleaner.run()
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
val values = sortedUrlList.map { VirtualFileManager.extractPath(it) }
|
||||
|
||||
assertThat(values).isEqualTo(listOf("BSTest.fff", "BSTest", "ASTest"))
|
||||
assertThat(storage.getSuite("<default package>")).isEqualTo(null)
|
||||
}
|
||||
|
||||
fun `test do not remove tests if we are unable to locate them`() {
|
||||
val storage = TestStorage()
|
||||
|
||||
storage.addSuite("ASTest", true)
|
||||
|
||||
storage.addSuite("JsSuite1", true, Date(), "js")
|
||||
storage.addSuite("JsSuite2", true, Date(), "js")
|
||||
|
||||
val testStorageMock = createMockStorage(storage)
|
||||
|
||||
val sortedUrlList = getSortedList(storage.getMap())
|
||||
|
||||
val cleaner = DeadTestsCleaner(testStorageMock, sortedUrlList, locatorReturningNullIfContains("JsSuite"))
|
||||
cleaner.run()
|
||||
|
||||
assertThat(storage.getSuite("JsSuite1", "js")).isNotEqualTo(null)
|
||||
assertThat(storage.getSuite("JsSuite2", "js")).isNotEqualTo(null)
|
||||
}
|
||||
|
||||
private fun createMockStorage(storage: TestStorage): TestStateStorage? {
|
||||
val testStorageMock = mock(TestStateStorage::class.java)
|
||||
`when`(testStorageMock.removeState(Matchers.anyString())).then {
|
||||
val url = it.arguments[0]as String
|
||||
storage.removeUrl(url)
|
||||
}
|
||||
return testStorageMock
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user