SuccessOrFailure test on JVM added
This commit is contained in:
committed by
Denis Zharkov
parent
0b59061bfe
commit
d33d21907d
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package test.kotlin
|
||||
|
||||
import kotlin.test.*
|
||||
|
||||
class SuccessOrFailureTest {
|
||||
@Test
|
||||
fun testRunCatchingSuccess() {
|
||||
val ok = runCatching { "OK" }
|
||||
checkSuccess(ok, "OK", true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testRunCatchingFailure() {
|
||||
val fail = runCatching { error("F") }
|
||||
checkFailure(fail, "F", true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testConstructedSuccess() {
|
||||
val ok = SuccessOrFailure.success("OK")
|
||||
checkSuccess(ok, "OK", true)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testConstructedFailure() {
|
||||
val fail = SuccessOrFailure.failure<Unit>(IllegalStateException("F"))
|
||||
checkFailure(fail, "F", true)
|
||||
}
|
||||
|
||||
private fun <T> checkSuccess(ok: SuccessOrFailure<T>, v: T, topLevel: Boolean = false) {
|
||||
assertTrue(ok.isSuccess)
|
||||
assertFalse(ok.isFailure)
|
||||
assertEquals(v, ok.getOrThrow())
|
||||
assertEquals(v, ok.getOrElse { throw it })
|
||||
assertEquals(v, ok.getOrNull())
|
||||
assertEquals(v, ok.getOrElse { null })
|
||||
assertEquals(v, ok.getOrElse { "EX:$it" })
|
||||
assertEquals("V:$v", ok.fold({ "V:$it" }, { "EX:$it" }))
|
||||
assertEquals(null, ok.exceptionOrNull())
|
||||
assertEquals(null, ok.fold(onSuccess = { null }, onFailure = { it }))
|
||||
assertEquals(v.toString(), ok.toString())
|
||||
assertEquals(ok, ok)
|
||||
if (topLevel) {
|
||||
checkSuccess(ok.map { 42 }, 42)
|
||||
checkSuccess(ok.mapCatching { 42 }, 42)
|
||||
checkFailure(ok.mapCatching { error("FAIL") }, "FAIL")
|
||||
checkSuccess(ok.recover { 42 }, "OK")
|
||||
checkSuccess(ok.recoverCatching { 42 }, "OK")
|
||||
checkSuccess(ok.recoverCatching { error("FAIL") }, "OK")
|
||||
}
|
||||
var sCnt = 0
|
||||
var fCnt = 0
|
||||
assertEquals(ok, ok.onSuccess { sCnt++ })
|
||||
assertEquals(ok, ok.onFailure { fCnt++ })
|
||||
assertEquals(1, sCnt)
|
||||
assertEquals(0, fCnt)
|
||||
}
|
||||
|
||||
private fun <T> checkFailure(fail: SuccessOrFailure<T>, msg: String, topLevel: Boolean = false) {
|
||||
assertFalse(fail.isSuccess)
|
||||
assertTrue(fail.isFailure)
|
||||
assertFails { fail.getOrThrow() }
|
||||
assertFails { fail.getOrElse { throw it } }
|
||||
assertEquals(null, fail.getOrNull())
|
||||
assertEquals(null, fail.getOrElse { null })
|
||||
assertEquals("EX:java.lang.IllegalStateException: $msg", fail.getOrElse { "EX:$it" })
|
||||
assertEquals("EX:java.lang.IllegalStateException: $msg", fail.fold({ "V:$it" }, { "EX:$it" }))
|
||||
assertEquals(msg, fail.exceptionOrNull()!!.message)
|
||||
assertEquals(msg, fail.fold(onSuccess = { null }, onFailure = { it })!!.message)
|
||||
assertEquals("Failure(java.lang.IllegalStateException: $msg)", fail.toString())
|
||||
assertEquals(fail, fail)
|
||||
if (topLevel) {
|
||||
checkFailure(fail.map { 42 }, msg)
|
||||
checkFailure(fail.mapCatching { 42 }, msg)
|
||||
checkFailure(fail.mapCatching { error("FAIL") }, msg)
|
||||
checkSuccess(fail.recover { 42 }, 42)
|
||||
checkSuccess(fail.recoverCatching { 42 }, 42)
|
||||
checkFailure(fail.recoverCatching { error("FAIL") }, "FAIL")
|
||||
}
|
||||
var sCnt = 0
|
||||
var fCnt = 0
|
||||
assertEquals(fail, fail.onSuccess { sCnt++ })
|
||||
assertEquals(fail, fail.onFailure { fCnt++ })
|
||||
assertEquals(0, sCnt)
|
||||
assertEquals(1, fCnt)
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,11 @@ sourceSets {
|
||||
kotlin {
|
||||
srcDir '../coroutines/jvm/src'
|
||||
}
|
||||
compileClasspath += sourceSets.main.output
|
||||
}
|
||||
coroutinesTest {
|
||||
kotlin {
|
||||
srcDir '../coroutines/jvm/test'
|
||||
}
|
||||
}
|
||||
test {
|
||||
kotlin {
|
||||
@@ -70,6 +74,11 @@ dependencies {
|
||||
|
||||
testCompile project(':kotlin-test:kotlin-test-junit')
|
||||
|
||||
coroutinesCompile sourceSets.main.output
|
||||
|
||||
coroutinesTestCompile sourceSets.coroutines.output
|
||||
coroutinesTestCompile project(':kotlin-test:kotlin-test-junit')
|
||||
|
||||
unsignedCompile sourceSets.main.output
|
||||
}
|
||||
|
||||
@@ -207,6 +216,26 @@ compileCoroutinesKotlin {
|
||||
}
|
||||
}
|
||||
|
||||
compileCoroutinesTestKotlin {
|
||||
kotlinOptions {
|
||||
languageVersion = "1.3"
|
||||
apiVersion = "1.3"
|
||||
freeCompilerArgs = [
|
||||
"-version",
|
||||
"-Xallow-kotlin-package",
|
||||
"-Xmultifile-parts-inherit",
|
||||
"-module-name", "kotlin-stdlib-coroutines"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
task coroutinesTest(type: Test, dependsOn: coroutinesTestClasses) {
|
||||
testClassesDirs = sourceSets.coroutinesTest.output.classesDirs
|
||||
classpath = sourceSets.coroutinesTest.runtimeClasspath
|
||||
}
|
||||
|
||||
test.dependsOn coroutinesTest
|
||||
|
||||
compileUnsignedKotlin {
|
||||
kotlinOptions {
|
||||
languageVersion = "1.3"
|
||||
|
||||
Reference in New Issue
Block a user