From 9798decca079f41b35e3ddff414d8f194c9e1b06 Mon Sep 17 00:00:00 2001 From: Pavel Punegov Date: Mon, 29 Oct 2018 20:25:45 +0300 Subject: [PATCH] Add test for contracts --- backend.native/tests/build.gradle | 5 ++ .../tests/codegen/contracts/contracts.kt | 47 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 backend.native/tests/codegen/contracts/contracts.kt diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index fb403a3e9d5..58835da96b4 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -1183,6 +1183,11 @@ task classDelegation_linkTest(type: LinkKonanTest) { lib = "codegen/classDelegation/linkTest_lib.kt" } +task contracts(type: RunStandaloneKonanTest) { + flags = [ '-Xuse-experimental=kotlin.Experimental', '-tr' ] + source = "codegen/contracts/contracts.kt" +} + task delegatedProperty_simpleVal(type: RunKonanTest) { goldValue = "x\n42\n" source = "codegen/delegatedProperty/simpleVal.kt" diff --git a/backend.native/tests/codegen/contracts/contracts.kt b/backend.native/tests/codegen/contracts/contracts.kt new file mode 100644 index 00000000000..f9ab1154b44 --- /dev/null +++ b/backend.native/tests/codegen/contracts/contracts.kt @@ -0,0 +1,47 @@ +import kotlin.test.* +import kotlin.contracts.* + +open class S +class P(val str: String = "P") : S() + +@UseExperimental(kotlin.contracts.ExperimentalContracts::class) +fun check(actual: Boolean) { + contract { returns() implies actual } + assertTrue(actual) +} + +@Test fun testContractForCast() { + val s: S = P() + + check(s is P) + assertEquals(s.str, "P") +} + +@Test fun testRequire() { + val s: S = P() + + require(s is P) + assertEquals(s.str, "P") +} + +@Test fun testNonNullSmartCast() { + val i: Int? = 1234 + requireNotNull(i) + assertEquals(i, 1234) +} + +@Test fun testRunLambdaForVal() { + val x: Int + run { + x = 42 + } + assertEquals(x, 42) +} + +@Test fun testIsNullString() { + assertEquals("STR", nullableString("str")) + + assertEquals("", nullableString(null)) +} + +private fun nullableString(string: String?): String = if (string.isNullOrBlank()) "" else "STR" \ No newline at end of file