Supply proper classloader to the evaluator, add another test for function type
and some minor refactoring
This commit is contained in:
@@ -91,7 +91,10 @@ class GenericReplTest : KtUsefulTestCase() {
|
|||||||
|
|
||||||
fun testCompilingReplEvaluator() {
|
fun testCompilingReplEvaluator() {
|
||||||
TestRepl().use { replBase ->
|
TestRepl().use { replBase ->
|
||||||
val repl = GenericReplCompilingEvaluator(replBase.replCompiler, replBase.baseClasspath, fallbackScriptArgs = replBase.emptyScriptArgs)
|
val repl = GenericReplCompilingEvaluator(
|
||||||
|
replBase.replCompiler, replBase.baseClasspath, Thread.currentThread().contextClassLoader,
|
||||||
|
fallbackScriptArgs = replBase.emptyScriptArgs
|
||||||
|
)
|
||||||
|
|
||||||
val state = repl.createState()
|
val state = repl.createState()
|
||||||
|
|
||||||
@@ -132,6 +135,16 @@ class GenericReplTest : KtUsefulTestCase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun testReplResultFieldWithFunction() {
|
||||||
|
TestRepl().use { repl ->
|
||||||
|
val state = repl.createState()
|
||||||
|
|
||||||
|
assertEvalResultIs<Function0<Int>>(repl, state, "{ 1 + 2 }")
|
||||||
|
assertEvalResultIs<Function0<Int>>(repl, state, "res0")
|
||||||
|
assertEvalResult(repl, state, "res0()", 3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun testReplResultField() {
|
fun testReplResultField() {
|
||||||
TestRepl().use { repl ->
|
TestRepl().use { repl ->
|
||||||
val state = repl.createState()
|
val state = repl.createState()
|
||||||
@@ -142,10 +155,7 @@ class GenericReplTest : KtUsefulTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun assertEvalUnit(repl: TestRepl, state: IReplStageState<*>, line: String) {
|
private fun assertEvalUnit(repl: TestRepl, state: IReplStageState<*>, line: String) {
|
||||||
val codeLine = repl.nextCodeLine(line)
|
val compiledClasses = checkCompile(repl, state, line)
|
||||||
val compileResult = repl.replCompiler.compile(state, codeLine)
|
|
||||||
val compiledClasses = compileResult as? ReplCompileResult.CompiledClasses
|
|
||||||
TestCase.assertNotNull("Unexpected compile result: $compileResult", compiledClasses)
|
|
||||||
|
|
||||||
val evalResult = repl.compiledEvaluator.eval(state, compiledClasses!!)
|
val evalResult = repl.compiledEvaluator.eval(state, compiledClasses!!)
|
||||||
val unitResult = evalResult as? ReplEvalResult.UnitResult
|
val unitResult = evalResult as? ReplEvalResult.UnitResult
|
||||||
@@ -153,16 +163,30 @@ class GenericReplTest : KtUsefulTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun<R> assertEvalResult(repl: TestRepl, state: IReplStageState<*>, line: String, expectedResult: R) {
|
private fun<R> assertEvalResult(repl: TestRepl, state: IReplStageState<*>, line: String, expectedResult: R) {
|
||||||
val codeLine = repl.nextCodeLine(line)
|
val compiledClasses = checkCompile(repl, state, line)
|
||||||
val compileResult = repl.replCompiler.compile(state, codeLine)
|
|
||||||
val compiledClasses = compileResult as? ReplCompileResult.CompiledClasses
|
|
||||||
TestCase.assertNotNull("Unexpected compile result: $compileResult", compiledClasses)
|
|
||||||
|
|
||||||
val evalResult = repl.compiledEvaluator.eval(state, compiledClasses!!)
|
val evalResult = repl.compiledEvaluator.eval(state, compiledClasses!!)
|
||||||
val valueResult = evalResult as? ReplEvalResult.ValueResult
|
val valueResult = evalResult as? ReplEvalResult.ValueResult
|
||||||
TestCase.assertNotNull("Unexpected eval result: $evalResult", valueResult)
|
TestCase.assertNotNull("Unexpected eval result: $evalResult", valueResult)
|
||||||
TestCase.assertEquals(expectedResult, valueResult!!.value)
|
TestCase.assertEquals(expectedResult, valueResult!!.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private inline fun<reified R> assertEvalResultIs(repl: TestRepl, state: IReplStageState<*>, line: String) {
|
||||||
|
val compiledClasses = checkCompile(repl, state, line)
|
||||||
|
|
||||||
|
val evalResult = repl.compiledEvaluator.eval(state, compiledClasses!!)
|
||||||
|
val valueResult = evalResult as? ReplEvalResult.ValueResult
|
||||||
|
TestCase.assertNotNull("Unexpected eval result: $evalResult", valueResult)
|
||||||
|
TestCase.assertTrue(valueResult!!.value is R)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun checkCompile(repl: TestRepl, state: IReplStageState<*>, line: String): ReplCompileResult.CompiledClasses? {
|
||||||
|
val codeLine = repl.nextCodeLine(line)
|
||||||
|
val compileResult = repl.replCompiler.compile(state, codeLine)
|
||||||
|
val compiledClasses = compileResult as? ReplCompileResult.CompiledClasses
|
||||||
|
TestCase.assertNotNull("Unexpected compile result: $compileResult", compiledClasses)
|
||||||
|
return compiledClasses
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -200,7 +224,7 @@ internal class TestRepl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val compiledEvaluator: ReplEvaluator by lazy {
|
val compiledEvaluator: ReplEvaluator by lazy {
|
||||||
GenericReplEvaluator(baseClasspath, null, emptyScriptArgs, repeatingMode)
|
GenericReplEvaluator(baseClasspath, Thread.currentThread().contextClassLoader, emptyScriptArgs, repeatingMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createState(lock: ReentrantReadWriteLock = ReentrantReadWriteLock()): IReplStageState<*> =
|
fun createState(lock: ReentrantReadWriteLock = ReentrantReadWriteLock()): IReplStageState<*> =
|
||||||
|
|||||||
Reference in New Issue
Block a user