diff --git a/assertk/build.gradle.kts b/assertk/build.gradle.kts index c3ae5f6e..ea0eb906 100644 --- a/assertk/build.gradle.kts +++ b/assertk/build.gradle.kts @@ -64,3 +64,7 @@ kotlin { } } } + +tasks.withType().configureEach { + useJUnitPlatform() +} \ No newline at end of file diff --git a/assertk/src/jvmMain/kotlin/assertk/assume.kt b/assertk/src/jvmMain/kotlin/assertk/assume.kt new file mode 100644 index 00000000..6f2ef94b --- /dev/null +++ b/assertk/src/jvmMain/kotlin/assertk/assume.kt @@ -0,0 +1,15 @@ +package assertk + +/** + * Aborts the test instead of failing it, this gives you a way to skip tests based on a dynamic assertion. + * + * ``` + * // only run test on windows + * assume { + * assertThat(System.getProperty("os.name")).startsWith("Windows") + * } + * ``` + */ +fun assume(f: () -> Unit) { + AssumptionFailure.run { f() } +} \ No newline at end of file diff --git a/assertk/src/jvmMain/kotlin/assertk/failure.kt b/assertk/src/jvmMain/kotlin/assertk/failure.kt index a782578f..a55b42ab 100644 --- a/assertk/src/jvmMain/kotlin/assertk/failure.kt +++ b/assertk/src/jvmMain/kotlin/assertk/failure.kt @@ -3,6 +3,9 @@ package assertk +import com.willowtreeapps.opentest4k.AssertionFailedError +import com.willowtreeapps.opentest4k.TestAbortedException + internal actual inline fun failWithNotInStacktrace(error: Throwable): Nothing { val filtered = error.stackTrace .dropWhile { it.className.startsWith("assertk") } @@ -16,3 +19,21 @@ internal actual inline fun failWithNotInStacktrace(error: Throwable): Nothing { internal actual inline fun Throwable.isFatal(): Boolean = // https://github.com/ReactiveX/RxJava/blob/6a44e5d0543a48f1c378dc833a155f3f71333bc2/src/main/java/io/reactivex/exceptions/Exceptions.java#L66 this is VirtualMachineError || this is ThreadDeath || this is LinkageError + +internal object AssumptionFailure : Failure { + override fun fail(error: Throwable) { + failWithNotInStacktrace( + TestAbortedException( + buildString { + append("Assumption failed") + error.message?.let { message -> + append(": ") + append(message) + } + }, + // unwrap assertion errors + if (error is AssertionFailedError) error.cause else error + ) + ) + } +} \ No newline at end of file diff --git a/assertk/src/jvmTest/kotlin/test/assertk/JVMAssertAllTest.kt b/assertk/src/jvmTest/kotlin/test/assertk/JVMAssertAllTest.kt index fabfb159..5327bbe5 100644 --- a/assertk/src/jvmTest/kotlin/test/assertk/JVMAssertAllTest.kt +++ b/assertk/src/jvmTest/kotlin/test/assertk/JVMAssertAllTest.kt @@ -4,9 +4,9 @@ import assertk.all import assertk.assertAll import assertk.assertThat import assertk.assertions.* -import org.junit.Test import java.util.concurrent.Executors import java.util.concurrent.TimeUnit +import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertFalse diff --git a/assertk/src/jvmTest/kotlin/test/assertk/assertions/AssumeTest.kt b/assertk/src/jvmTest/kotlin/test/assertk/assertions/AssumeTest.kt new file mode 100644 index 00000000..4468c5cd --- /dev/null +++ b/assertk/src/jvmTest/kotlin/test/assertk/assertions/AssumeTest.kt @@ -0,0 +1,28 @@ +package test.assertk.assertions + +import assertk.assertThat +import assertk.assertions.isFalse +import assertk.assume +import com.willowtreeapps.opentest4k.TestAbortedException +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith + +class AssumeTest { + @Test + fun assume_throws_TestAbortedException() { + val error = assertFailsWith { + assume { + assertThat(true).isFalse() + } + } + + assertEquals("Assumption failed: expected to be false", error.message) + } + + @Test + fun assume_aborts_instead_of_fails_test() { + // this test should be skipped instead of failing + assume { assertThat(true).isFalse() } + } +} \ No newline at end of file diff --git a/assertk/src/jvmTest/kotlin/test/assertk/assertions/JVMResultTest.kt b/assertk/src/jvmTest/kotlin/test/assertk/assertions/JVMResultTest.kt index 06ccbb1d..90df55a6 100644 --- a/assertk/src/jvmTest/kotlin/test/assertk/assertions/JVMResultTest.kt +++ b/assertk/src/jvmTest/kotlin/test/assertk/assertions/JVMResultTest.kt @@ -2,8 +2,8 @@ package test.assertk.assertions import assertk.assertThat import assertk.assertions.isSuccess -import org.junit.Test import test.assertk.exceptionPackageName +import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertNotNull diff --git a/assertk/src/jvmTest/kotlin/test/assertk/assertions/OptionalTest.kt b/assertk/src/jvmTest/kotlin/test/assertk/assertions/OptionalTest.kt index 0596a1a3..f1d40acd 100644 --- a/assertk/src/jvmTest/kotlin/test/assertk/assertions/OptionalTest.kt +++ b/assertk/src/jvmTest/kotlin/test/assertk/assertions/OptionalTest.kt @@ -4,10 +4,10 @@ import assertk.all import assertk.assertAll import assertk.assertThat import assertk.assertions.* -import org.junit.Test import java.time.LocalDate import java.time.Month import java.util.* +import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith diff --git a/assertk/src/jvmTest/kotlin/test/assertk/assertions/support/JavaNumberTest.kt b/assertk/src/jvmTest/kotlin/test/assertk/assertions/support/JavaNumberTest.kt index 20e95af2..a2d9a9dc 100644 --- a/assertk/src/jvmTest/kotlin/test/assertk/assertions/support/JavaNumberTest.kt +++ b/assertk/src/jvmTest/kotlin/test/assertk/assertions/support/JavaNumberTest.kt @@ -4,9 +4,9 @@ import assertk.assertThat import assertk.assertions.isNegative import assertk.assertions.isPositive import assertk.assertions.isZero -import org.junit.Test import java.math.BigDecimal import java.math.BigInteger +import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFailsWith