Add ContinuationAdapter to coroutine tests helpers

It allows having the same Continuation implementations for different
API versions
This commit is contained in:
Denis Zharkov
2018-06-29 17:34:29 +03:00
parent f01e690f49
commit f23a0c8fea
33 changed files with 55 additions and 45 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ fun <T> asyncGenerate(block: suspend AsyncGenerator<T>.() -> Unit): AsyncSequenc
}
}
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, Continuation<Unit> {
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, ContinuationAdapter<Unit>() {
var computedNext = false
var nextValue: T? = null
var nextStep: Continuation<Unit>? = null
@@ -28,7 +28,7 @@ fun <T> asyncGenerate(block: suspend AsyncGenerator<T>.() -> Unit): AsyncSequenc
}
}
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, Continuation<Unit> {
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, ContinuationAdapter<Unit>() {
var computedNext = false
var nextValue: T? = null
var nextStep: Continuation<Unit>? = null
@@ -28,7 +28,7 @@ fun <T> asyncGenerate(block: suspend AsyncGenerator<T>.() -> Unit): AsyncSequenc
}
}
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, Continuation<Unit> {
class AsyncGeneratorIterator<T>: AsyncIterator<T>, AsyncGenerator<T>, ContinuationAdapter<Unit>() {
var computedNext = false
var nextValue: T? = null
var nextStep: Continuation<Unit>? = null
@@ -12,7 +12,7 @@ suspend fun suspendHere(): Any = suspendCoroutineOrReturn { x -> }
fun builder(c: suspend () -> Unit) {
var exception: Throwable? = null
c.createCoroutine(object : Continuation<Unit> {
c.createCoroutine(object : ContinuationAdapter<Unit>() {
override val context = EmptyCoroutineContext
override fun resume(data: Unit) {
@@ -27,7 +27,7 @@ class Controller {
fun builder(c: suspend Controller.() -> Unit): String {
val controller = Controller()
c.startCoroutine(controller, object : Continuation<Unit> {
c.startCoroutine(controller, object : ContinuationAdapter<Unit>() {
override val context = EmptyCoroutineContext
override fun resume(data: Unit) {
@@ -20,7 +20,7 @@ class Controller {
fun builder(c: suspend Controller.() -> Unit): String {
val controller = Controller()
c.startCoroutine(controller, object : Continuation<Unit> {
c.startCoroutine(controller, object : ContinuationAdapter<Unit>() {
override val context = EmptyCoroutineContext
override fun resume(data: Unit) {}
@@ -1,6 +1,7 @@
// IGNORE_BACKEND: JS_IR
// IGNORE_BACKEND: JVM_IR
// WITH_RUNTIME
// WITH_COROUTINES
// IGNORE_BACKEND: JS
// COMMON_COROUTINES_TEST
import COROUTINES_PACKAGE.*
@@ -9,7 +10,7 @@ import COROUTINES_PACKAGE.intrinsics.COROUTINE_SUSPENDED
fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation<String>) -> Any?): String {
var result = "fail"
var wasIntercepted = false
val c = (x as suspend () -> String).createCoroutine(object: Continuation<String> {
val c = (x as suspend () -> String).createCoroutine(object: ContinuationAdapter() {
override fun resumeWithException(exception: Throwable) {
throw exception
}
@@ -27,7 +28,7 @@ fun runCustomLambdaAsCoroutine(e: Throwable? = null, x: (Continuation<String>) -
return null
}
override fun <T> interceptContinuation(continuation: Continuation<T>) = object : Continuation<T> {
override fun <T> interceptContinuation(continuation: Continuation<T>) = object : helpers.ContinuationAdapter<T>() {
override val context: CoroutineContext
get() = continuation.context
@@ -23,7 +23,7 @@ fun builder(c: suspend () -> Unit) {
fun builderConsumer(c: suspend () -> Consumer): Consumer {
var res: Consumer? = null
c.startCoroutine(object : Continuation<Consumer> {
c.startCoroutine(object : ContinuationAdapter<Consumer>() {
override fun resume(value: Consumer) {
res = value
}
+1 -1
View File
@@ -33,7 +33,7 @@ abstract class ContinuationDispatcher : AbstractCoroutineContextElement(Continua
private class DispatchedContinuation<T>(
val dispatcher: ContinuationDispatcher,
val continuation: Continuation<T>
): Continuation<T> {
): ContinuationAdapter<T>() {
override val context: CoroutineContext = continuation.context
override fun resume(value: T) {
+1 -1
View File
@@ -42,7 +42,7 @@ class GeneratedSequence<out T>(private val block: suspend Generator<T>.() -> Uni
}
class GeneratedIterator<T>(block: suspend Generator<T>.() -> Unit) : AbstractIterator<T>(), Generator<T> {
private var nextStep: Continuation<Unit> = block.createCoroutine(this, object : Continuation<Unit> {
private var nextStep: Continuation<Unit> = block.createCoroutine(this, object : ContinuationAdapter<Unit>() {
override val context = EmptyCoroutineContext
override fun resume(data: Unit) {
@@ -22,7 +22,7 @@ suspend fun multipleArgs(a: Any, b: Any, c: Any) =
fun builder(c: suspend () -> String): String {
var fromSuspension: String? = null
val continuation = object : Continuation<String> {
val continuation = object : ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = EmptyCoroutineContext
@@ -23,7 +23,7 @@ class Controller {
fun builder(c: suspend Controller.() -> String): String {
var fromSuspension: String? = null
c.startCoroutine(this, object : Continuation<String> {
c.startCoroutine(this, object : ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = EmptyCoroutineContext
@@ -61,4 +61,4 @@ fun box(): String {
}
return "OK"
}
}
@@ -27,7 +27,7 @@ class Controller {
fun builder(c: suspend Controller.() -> String): String {
var fromSuspension: String? = null
c.startCoroutine(this, object : Continuation<String> {
c.startCoroutine(this, object : ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = EmptyCoroutineContext
@@ -60,4 +60,4 @@ fun box(): String {
}
return "OK"
}
}
@@ -33,7 +33,7 @@ fun builder(expectedCount: Int, c: suspend () -> String): String {
var counter = 0
val result = try {
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = ContinuationDispatcher { counter++ }
@@ -60,7 +60,7 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont
private class DispatchedContinuation<T>(
val dispatcher: () -> Unit,
val continuation: Continuation<T>
): Continuation<T> {
): ContinuationAdapter<T>() {
override val context: CoroutineContext = continuation.context
override fun resume(value: T) {
@@ -21,7 +21,7 @@ suspend fun suspendWithException(): String = suspendCoroutineOrReturn { x ->
fun builder(c: suspend () -> String): String {
var fromSuspension: String? = null
c.startCoroutine(object: Continuation<String> {
c.startCoroutine(object: ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = EmptyCoroutineContext
@@ -22,7 +22,7 @@ fun builder(shouldSuspend: Boolean, c: suspend () -> String): String {
var fromSuspension: String? = null
val result = try {
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = EmptyCoroutineContext
@@ -23,7 +23,7 @@ fun builder(shouldSuspend: Boolean, expectedCount: Int, c: suspend () -> String)
var counter = 0
val result = try {
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = ContinuationDispatcher { counter++ }
@@ -58,7 +58,7 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont
private class DispatchedContinuation<T>(
val dispatcher: () -> Unit,
val continuation: Continuation<T>
): Continuation<T> {
): ContinuationAdapter<T>() {
override val context: CoroutineContext = continuation.context
override fun resume(value: T) {
@@ -23,7 +23,7 @@ fun builder(shouldSuspend: Boolean, c: suspend () -> String): String {
var counter = 0
val result = try {
c.startCoroutineUninterceptedOrReturn(object: Continuation<String> {
c.startCoroutineUninterceptedOrReturn(object: ContinuationAdapter<String>() {
override val context: CoroutineContext
get() = ContinuationDispatcher { counter++ }
@@ -58,7 +58,7 @@ class ContinuationDispatcher(val dispatcher: () -> Unit) : AbstractCoroutineCont
private class DispatchedContinuation<T>(
val dispatcher: () -> Unit,
val continuation: Continuation<T>
): Continuation<T> {
): ContinuationAdapter<T>() {
override val context: CoroutineContext = continuation.context
override fun resume(value: T) {
@@ -32,7 +32,7 @@ suspend fun callLocal() {
}
fun builder(c: suspend () -> Unit) {
val continuation = object: Continuation<Unit> {
val continuation = object: ContinuationAdapter<Unit>() {
override val context: CoroutineContext
get() = EmptyCoroutineContext
@@ -50,7 +50,7 @@ suspend fun sleep(): Unit = suspendCoroutine { c ->
}
fun async(f: suspend () -> Unit) {
f.startCoroutine(object : Continuation<Unit> {
f.startCoroutine(object : ContinuationAdapter<Unit>() {
override fun resume(x: Unit) {
proceed = {
result += "done;"
@@ -63,7 +63,7 @@ fun async(f: suspend () -> Unit) {
}
fun asyncSuspend(f: suspend () -> Unit) {
val coroutine = f.createCoroutine(object : Continuation<Unit> {
val coroutine = f.createCoroutine(object : ContinuationAdapter<Unit>() {
override fun resume(x: Unit) {
proceed = {
result += "done;"
@@ -15,7 +15,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x ->
fun builder(c: suspend () -> Int): Int {
var res = 0
c.createCoroutine(object : Continuation<Int> {
c.createCoroutine(object : ContinuationAdapter<Int>() {
override val context = EmptyCoroutineContext
override fun resume(data: Int) {
@@ -33,7 +33,7 @@ abstract class ContinuationDispatcher : AbstractCoroutineContextElement(Continua
private class DispatchedContinuation<T>(
val dispatcher: ContinuationDispatcher,
val continuation: Continuation<T>
): Continuation<T> {
): ContinuationAdapter<T>() {
override val context: CoroutineContext = continuation.context
override fun resume(value: T) {
@@ -40,7 +40,7 @@ suspend fun bar(x: Int): Int = suspendCoroutine { c ->
inline suspend fun foo(x: Int) = bar(x)
fun async(a: suspend () -> Unit) {
a.startCoroutine(object : Continuation<Unit> {
a.startCoroutine(object : ContinuationAdapter<Unit>() {
override fun resume(value: Unit) {
proceed = {
log("done")
@@ -14,7 +14,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x ->
fun builder(c: suspend () -> Unit) {
var wasResumeCalled = false
c.startCoroutine(object : Continuation<Unit> {
c.startCoroutine(object : ContinuationAdapter<Unit>() {
override val context = EmptyCoroutineContext
override fun resume(value: Unit) {
@@ -14,7 +14,7 @@ suspend fun suspendHere(): String = suspendCoroutineOrReturn { x ->
fun builder(c: suspend () -> Unit) {
var wasResumeCalled = false
c.startCoroutine(object : Continuation<Unit> {
c.startCoroutine(object : ContinuationAdapter<Unit>() {
override val context = EmptyCoroutineContext
override fun resume(value: Unit) {