From ace2279631ebadd2039f46cca7400ac17ca5de9e Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Sat, 22 Apr 2023 06:41:51 +0200 Subject: [PATCH] Refactor helper function to run/not run block of common code on specific platform Use it in StringBuilder tests --- .../tests/stdlib_external/utils.kt | 4 +--- libraries/stdlib/common/test/testUtils.kt | 3 --- libraries/stdlib/js/test/core/testUtils.kt | 3 +-- libraries/stdlib/jvm/test/testUtilsJVM.kt | 3 +-- libraries/stdlib/test/testUtils.kt | 17 +++++++++++++++++ libraries/stdlib/test/text/StringBuilderTest.kt | 17 +++++++++++------ libraries/stdlib/wasm/test/testUtils.kt | 4 +--- 7 files changed, 32 insertions(+), 19 deletions(-) diff --git a/kotlin-native/backend.native/tests/stdlib_external/utils.kt b/kotlin-native/backend.native/tests/stdlib_external/utils.kt index b4ca95d825d..984da44bba5 100644 --- a/kotlin-native/backend.native/tests/stdlib_external/utils.kt +++ b/kotlin-native/backend.native/tests/stdlib_external/utils.kt @@ -16,9 +16,7 @@ public actual fun assertTypeEquals(expected: Any?, actual: Any?) { } } -actual fun testOnJvm(action: () -> Unit) {} -actual fun testOnJs(action: () -> Unit) {} - +public actual val TestPlatform.Companion.current: TestPlatform get() = TestPlatform.Native public actual val isFloat32RangeEnforced: Boolean get() = true diff --git a/libraries/stdlib/common/test/testUtils.kt b/libraries/stdlib/common/test/testUtils.kt index 15ef4002ced..34c239f24e2 100644 --- a/libraries/stdlib/common/test/testUtils.kt +++ b/libraries/stdlib/common/test/testUtils.kt @@ -7,9 +7,6 @@ package test public expect fun assertTypeEquals(expected: Any?, actual: Any?) -public expect fun testOnJvm(action: () -> Unit) -public expect fun testOnJs(action: () -> Unit) - public expect val isFloat32RangeEnforced: Boolean public expect val supportsNamedCapturingGroup: Boolean diff --git a/libraries/stdlib/js/test/core/testUtils.kt b/libraries/stdlib/js/test/core/testUtils.kt index 742834bd55f..0a5f63af950 100644 --- a/libraries/stdlib/js/test/core/testUtils.kt +++ b/libraries/stdlib/js/test/core/testUtils.kt @@ -12,8 +12,7 @@ public actual fun assertTypeEquals(expected: Any?, actual: Any?) { } -public actual fun testOnJvm(action: () -> Unit) { } -public actual fun testOnJs(action: () -> Unit) = action() +public actual val TestPlatform.Companion.current: TestPlatform get() = TestPlatform.Js // TODO: should be true at least in JS IR after implementing KT-24975 public actual val isFloat32RangeEnforced: Boolean = false diff --git a/libraries/stdlib/jvm/test/testUtilsJVM.kt b/libraries/stdlib/jvm/test/testUtilsJVM.kt index 04c56cc4733..d1cf01c2bb4 100644 --- a/libraries/stdlib/jvm/test/testUtilsJVM.kt +++ b/libraries/stdlib/jvm/test/testUtilsJVM.kt @@ -12,8 +12,7 @@ public actual fun assertTypeEquals(expected: Any?, actual: Any?) { assertEquals(expected?.javaClass, actual?.javaClass) } -public actual fun testOnJvm(action: () -> Unit) = action() -public actual fun testOnJs(action: () -> Unit) {} +public actual val TestPlatform.Companion.current: TestPlatform get() = TestPlatform.Jvm @Suppress("HasPlatformType", "UNCHECKED_CAST") public fun platformNull() = Collections.singletonList(null as T).first() diff --git a/libraries/stdlib/test/testUtils.kt b/libraries/stdlib/test/testUtils.kt index 8b16cf2af8b..91b4994201b 100644 --- a/libraries/stdlib/test/testUtils.kt +++ b/libraries/stdlib/test/testUtils.kt @@ -10,6 +10,23 @@ import kotlin.test.assertEquals import kotlin.test.assertTrue import kotlin.test.fail +public enum class TestPlatform { + Jvm, + Js, + Native, + Wasm; + companion object +} + +public expect val TestPlatform.Companion.current: TestPlatform + +public fun testOn(platformPredicate: (TestPlatform) -> Boolean, action: () -> Unit) { + if (platformPredicate(TestPlatform.current)) action() +} +public fun testOnlyOn(platform: TestPlatform, action: () -> Unit) = testOn({ it == platform }, action) +public fun testExceptOn(platform: TestPlatform, action: () -> Unit) = testOn({ it != platform}, action) + + // just a static type check @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") fun assertStaticTypeIs(@Suppress("UNUSED_PARAMETER") value: @kotlin.internal.NoInfer T) {} diff --git a/libraries/stdlib/test/text/StringBuilderTest.kt b/libraries/stdlib/test/text/StringBuilderTest.kt index 1cbbe343507..a50689ee520 100644 --- a/libraries/stdlib/test/text/StringBuilderTest.kt +++ b/libraries/stdlib/test/text/StringBuilderTest.kt @@ -5,7 +5,9 @@ package test.text -import test.testOnJvm +import test.TestPlatform +import test.testOnlyOn +import test.testExceptOn import kotlin.random.Random import kotlin.test.* import kotlin.text.* @@ -39,11 +41,11 @@ class StringBuilderTest { fun deprecatedAppend() { val chars = charArrayOf('a', 'b', 'c', 'd') val sb = StringBuilder() - testOnJvm { + testOnlyOn(TestPlatform.Jvm) { sb.append(chars, 1, 2) // Should fail after KT-15220 gets fixed assertEquals("bc", sb.toString()) } - if (sb.isEmpty()) { + testExceptOn(TestPlatform.Jvm) { assertFailsWith { sb.append(chars, 1, 2) } @@ -256,8 +258,9 @@ class StringBuilderTest { @Test @Suppress("DEPRECATION") fun capacityTest() { -// assertEquals(100, StringBuilder(100).capacity()) // not implemented in JS - + testExceptOn(TestPlatform.Js) { + assertEquals(100, StringBuilder(100).capacity()) // not implemented in JS + } StringBuilder("string builder from string capacity test").let { sb -> assertTrue(sb.capacity() >= sb.length) } @@ -270,7 +273,9 @@ class StringBuilderTest { sb.ensureCapacity(1) assertTrue(sb.capacity() >= sb.length) sb.ensureCapacity(sb.length * 10) -// assertTrue(sb.capacity() >= sb.length * 10) // not implemented in JS + testExceptOn(TestPlatform.Js) { + assertTrue(sb.capacity() >= sb.length * 10) // not implemented in JS + } } } diff --git a/libraries/stdlib/wasm/test/testUtils.kt b/libraries/stdlib/wasm/test/testUtils.kt index 78d4c41031d..1ff3e8f07dc 100644 --- a/libraries/stdlib/wasm/test/testUtils.kt +++ b/libraries/stdlib/wasm/test/testUtils.kt @@ -12,9 +12,7 @@ public actual fun assertTypeEquals(expected: Any?, actual: Any?) { assertEquals(expected?.let { it::class }, actual?.let { it::class }) } - -public actual fun testOnJvm(action: () -> Unit) { } -public actual fun testOnJs(action: () -> Unit) { } +public actual val TestPlatform.Companion.current: TestPlatform get() = TestPlatform.Wasm // TODO: See KT-24975 public actual val isFloat32RangeEnforced: Boolean = false