Add test cases to check types of chain operations

This commit is contained in:
Vitaliy.Bibaev
2017-11-17 15:55:40 +03:00
committed by Yan Zhulanow
parent e61fbb16c5
commit 502cb1e456
3 changed files with 65 additions and 0 deletions
@@ -0,0 +1,41 @@
package com.intellij.debugger.streams.kotlin.psi
import com.intellij.debugger.streams.kotlin.KotlinPsiChainBuilderTestCase
import com.intellij.debugger.streams.trace.impl.handler.type.GenericType
/**
* @author Vitaliy.Bibaev
*/
abstract class TypedChainTestCase(relativePath: String) : KotlinPsiChainBuilderTestCase(relativePath) {
protected fun doTest(producerAfterType: GenericType,
vararg intermediateAfterTypes: GenericType) {
val elementAtCaret = configureAndGetElementAtCaret()
assertNotNull(elementAtCaret)
val chains = chainBuilder.build(elementAtCaret)
assertFalse(chains.isEmpty())
val chain = chains[0]
val intermediateCalls = chain.intermediateCalls
assertEquals(intermediateAfterTypes.size, intermediateCalls.size)
assertEquals(producerAfterType, chain.qualifierExpression.typeAfter)
if (intermediateAfterTypes.isNotEmpty()) {
assertEquals(producerAfterType, intermediateCalls[0].typeBefore)
for (i in 0 until intermediateAfterTypes.size - 1) {
assertEquals(intermediateAfterTypes[i], intermediateCalls[i].typeAfter)
assertEquals(intermediateAfterTypes[i], intermediateCalls[i + 1].typeBefore)
}
val lastAfterType = intermediateAfterTypes[intermediateAfterTypes.size - 1]
assertEquals(lastAfterType, chain.terminationCall.typeBefore)
val lastCall = intermediateCalls[intermediateCalls.size - 1]
assertEquals(lastAfterType, lastCall.typeAfter)
} else {
assertEquals(producerAfterType, chain.terminationCall.typeBefore)
}
}
override fun doTest() {
fail("Use doTest(producerAfterType, vararg intermediateAfterTypes)")
}
}
@@ -0,0 +1,12 @@
package com.intellij.debugger.streams.kotlin.psi.collection
import com.intellij.debugger.streams.kotlin.lib.KotlinCollectionSupportProvider
import com.intellij.debugger.streams.kotlin.psi.TypedChainTestCase
import com.intellij.debugger.streams.wrapper.StreamChainBuilder
/**
* @author Vitaliy.Bibaev
*/
class TypedCollectionChainTest : TypedChainTestCase("collection/positive/types") {
override val kotlinChainBuilder: StreamChainBuilder = KotlinCollectionSupportProvider().chainBuilder
}
@@ -0,0 +1,12 @@
package com.intellij.debugger.streams.kotlin.psi.java
import com.intellij.debugger.streams.kotlin.psi.TypedChainTestCase
import com.intellij.debugger.streams.lib.impl.StandardLibrarySupportProvider
import com.intellij.debugger.streams.wrapper.StreamChainBuilder
/**
* @author Vitaliy.Bibaev
*/
class TypedJavaChainTest : TypedChainTestCase("streams/positive/types") {
override val kotlinChainBuilder: StreamChainBuilder = StandardLibrarySupportProvider().chainBuilder
}