Add test for not evaluated snippet

This commit is contained in:
Ilya Muradyan
2020-04-21 16:17:52 +03:00
committed by Ilya Chernikov
parent ea1a6fbee7
commit 6f40ad7de2
@@ -126,6 +126,32 @@ class ReplTest : TestCase() {
) )
} }
@Test
fun testNoEvaluationError() {
checkEvaluateInReplDiags(
sequenceOf(
"""
fun stack(vararg tup: Int): Int = tup.sum()
val X = 1
val x = stack(1, X)
""".trimIndent(),
"val y = 42"
),
sequenceOf(
ResultValue.NotEvaluated.asSuccess(
listOf(
ScriptDiagnostic(
ScriptDiagnostic.unspecifiedError,
"Unable to instantiate class Line_0_simplescript: java.lang.ClassFormatError: " +
"Duplicate method name \"getX\" with signature \"()I\" in class file Line_0_simplescript"
)
)
),
makeFailureResult("Snippet cannot be evaluated due to history mismatch")
)
)
}
@Test @Test
fun testLongEval() { fun testLongEval() {
checkEvaluateInRepl( checkEvaluateInRepl(
@@ -178,7 +204,8 @@ class ReplTest : TestCase() {
expected: Sequence<ResultWithDiagnostics<Any?>>, expected: Sequence<ResultWithDiagnostics<Any?>>,
compilationConfiguration: ScriptCompilationConfiguration = simpleScriptCompilationConfiguration, compilationConfiguration: ScriptCompilationConfiguration = simpleScriptCompilationConfiguration,
evaluationConfiguration: ScriptEvaluationConfiguration? = simpleScriptEvaluationConfiguration, evaluationConfiguration: ScriptEvaluationConfiguration? = simpleScriptEvaluationConfiguration,
limit: Int = 0 limit: Int = 0,
ignoreDiagnostics: Boolean = false
) { ) {
val expectedIter = (if (limit == 0) expected else expected.take(limit)).iterator() val expectedIter = (if (limit == 0) expected else expected.take(limit)).iterator()
evaluateInRepl(snippets, compilationConfiguration, evaluationConfiguration, limit).forEachIndexed { index, res -> evaluateInRepl(snippets, compilationConfiguration, evaluationConfiguration, limit).forEachIndexed { index, res ->
@@ -202,19 +229,32 @@ class ReplTest : TestCase() {
} }
res is ResultWithDiagnostics.Success && expectedRes is ResultWithDiagnostics.Success -> { res is ResultWithDiagnostics.Success && expectedRes is ResultWithDiagnostics.Success -> {
val expectedVal = expectedRes.value val expectedVal = expectedRes.value
val resVal = res.value.result val actualVal = res.value.result
when (resVal) { when (actualVal) {
is ResultValue.Value -> Assert.assertEquals( is ResultValue.Value -> Assert.assertEquals(
"#$index: Expected $expectedVal, got $resVal", "#$index: Expected $expectedVal, got $actualVal",
expectedVal, expectedVal,
resVal.value actualVal.value
) )
is ResultValue.Unit -> Assert.assertNull("#$index: Expected $expectedVal, got Unit", expectedVal) is ResultValue.Unit -> Assert.assertNull("#$index: Expected $expectedVal, got Unit", expectedVal)
is ResultValue.Error -> Assert.assertTrue( is ResultValue.Error -> Assert.assertTrue(
"#$index: Expected $expectedVal, got Error: ${resVal.error}", "#$index: Expected $expectedVal, got Error: ${actualVal.error}",
expectedVal is Throwable && expectedVal.message == resVal.error?.message expectedVal is Throwable && expectedVal.message == actualVal.error.message
)
is ResultValue.NotEvaluated -> Assert.assertEquals(
"#$index: Expected $expectedVal, got NotEvaluated",
expectedVal, actualVal
)
else -> Assert.assertTrue("#$index: Expected $expectedVal, got unknown result $actualVal", expectedVal == null)
}
if (!ignoreDiagnostics) {
val expectedDiag = expectedRes.reports
val actualDiag = res.reports
Assert.assertEquals(
"Diagnostics should be same",
expectedDiag.map { it.toString() },
actualDiag.map { it.toString() }
) )
else -> Assert.assertTrue("#$index: Expected $expectedVal, got unknown result $resVal", expectedVal == null)
} }
} }
else -> { else -> {
@@ -234,7 +274,7 @@ class ReplTest : TestCase() {
evaluationConfiguration: ScriptEvaluationConfiguration? = simpleScriptEvaluationConfiguration, evaluationConfiguration: ScriptEvaluationConfiguration? = simpleScriptEvaluationConfiguration,
limit: Int = 0 limit: Int = 0
) = checkEvaluateInReplDiags( ) = checkEvaluateInReplDiags(
snippets, expected.map { ResultWithDiagnostics.Success(it) }, compilationConfiguration, evaluationConfiguration, limit snippets, expected.map { ResultWithDiagnostics.Success(it) }, compilationConfiguration, evaluationConfiguration, limit, true
) )
class TestReceiver( class TestReceiver(