From ecd42f14b3408bcfe8677fae72b5503e56da1122 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 22 Dec 2017 15:34:26 +0300 Subject: [PATCH] Compile common stdlib tests against common stdlib Declare platform-specific test utilities as expect. --- js/js.libraries/test/core/testUtils.kt | 5 +++- libraries/stdlib/common/build.gradle | 19 +++++++++++++- .../common/test/jsCollectionFactories.kt | 23 +++++++++++++++++ libraries/stdlib/common/test/testUtils.kt | 25 +++++++++++++++++++ libraries/stdlib/test/testUtilsJVM.kt | 13 +++++++++- libraries/stdlib/test/text/RegexTest.kt | 1 + .../test/text/StringNumberConversionTest.kt | 11 +------- 7 files changed, 84 insertions(+), 13 deletions(-) create mode 100644 libraries/stdlib/common/test/jsCollectionFactories.kt create mode 100644 libraries/stdlib/common/test/testUtils.kt diff --git a/js/js.libraries/test/core/testUtils.kt b/js/js.libraries/test/core/testUtils.kt index 0d8ec1aefd1..90c854e154f 100644 --- a/js/js.libraries/test/core/testUtils.kt +++ b/js/js.libraries/test/core/testUtils.kt @@ -14,11 +14,14 @@ * limitations under the License. */ -package kotlin.test +package test + +import kotlin.test.* public fun assertTypeEquals(expected: Any?, actual: Any?) { assertEquals(expected?.let { it::class.js }, actual?.let { it::class.js }) } +@Suppress("NOTHING_TO_INLINE") internal inline fun String.removeLeadingPlusOnJava6(): String = this internal fun doubleTotalOrderEquals(a: Double?, b: Double?) = a == b || (a != a && b != b) diff --git a/libraries/stdlib/common/build.gradle b/libraries/stdlib/common/build.gradle index 0531bb7a995..c15919c8690 100644 --- a/libraries/stdlib/common/build.gradle +++ b/libraries/stdlib/common/build.gradle @@ -4,7 +4,8 @@ apply plugin: 'kotlin-platform-common' configurePublishing(project) -ext.commonSrcDir = "${buildDir}/common-sources" +def commonSrcDir = "${buildDir}/common-sources" +def commonTestSrcDir = "${buildDir}/common-test-sources" sourceSets { main { @@ -13,9 +14,21 @@ sourceSets { srcDir commonSrcDir } } + test { + kotlin { + srcDir commonTestSrcDir + srcDir 'test' + } + } +} + +dependencies { + testCompile project(":kotlin-test:kotlin-test-common") + testCompile project(":kotlin-test:kotlin-test-annotations-common") } createPreprocessorTask(project, "Main", "${projectDir}/../src/kotlin", commonSrcDir) +createPreprocessorTask(project, "Test", "${projectDir}/../test", commonTestSrcDir) compileKotlinCommon { dependsOn preprocessSourcesMain @@ -34,6 +47,10 @@ compileKotlinCommon { } */ +compileTestKotlinCommon { + dependsOn preprocessSourcesTest +} + kotlin.experimental.coroutines 'enable' jar { diff --git a/libraries/stdlib/common/test/jsCollectionFactories.kt b/libraries/stdlib/common/test/jsCollectionFactories.kt new file mode 100644 index 00000000000..74bc524e692 --- /dev/null +++ b/libraries/stdlib/common/test/jsCollectionFactories.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package test.collections.js + +// TODO: These have actuals only in JVM tests, and in JS they are in stdlib +public expect fun stringMapOf(vararg pairs: Pair): HashMap +public expect fun linkedStringMapOf(vararg pairs: Pair): LinkedHashMap +public expect fun stringSetOf(vararg elements: String): HashSet +public expect fun linkedStringSetOf(vararg elements: String): LinkedHashSet diff --git a/libraries/stdlib/common/test/testUtils.kt b/libraries/stdlib/common/test/testUtils.kt new file mode 100644 index 00000000000..ba18a0bc59d --- /dev/null +++ b/libraries/stdlib/common/test/testUtils.kt @@ -0,0 +1,25 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package test + +public expect fun assertTypeEquals(expected: Any?, actual: Any?) + +internal expect fun String.removeLeadingPlusOnJava6(): String +internal expect fun doubleTotalOrderEquals(a: Double?, b: Double?): Boolean + +// TODO +internal expect class NumberFormatException : Throwable \ No newline at end of file diff --git a/libraries/stdlib/test/testUtilsJVM.kt b/libraries/stdlib/test/testUtilsJVM.kt index 0a95a247ac1..8b02e61ead3 100644 --- a/libraries/stdlib/test/testUtilsJVM.kt +++ b/libraries/stdlib/test/testUtilsJVM.kt @@ -21,4 +21,15 @@ import kotlin.test.assertEquals @JvmVersion public fun assertTypeEquals(expected: Any?, actual: Any?) { assertEquals(expected?.javaClass, actual?.javaClass) -} \ No newline at end of file +} + + +@kotlin.jvm.JvmVersion +private val isJava6 = System.getProperty("java.version").startsWith("1.6.") + +@kotlin.jvm.JvmVersion +internal fun String.removeLeadingPlusOnJava6(): String = + if (isJava6) removePrefix("+") else this + +@kotlin.jvm.JvmVersion +internal fun doubleTotalOrderEquals(a: Any?, b: Any?) = a == b diff --git a/libraries/stdlib/test/text/RegexTest.kt b/libraries/stdlib/test/text/RegexTest.kt index 929f0b34c25..449f0d46394 100644 --- a/libraries/stdlib/test/text/RegexTest.kt +++ b/libraries/stdlib/test/text/RegexTest.kt @@ -1,3 +1,4 @@ +@file:Suppress("NAMED_ARGUMENTS_NOT_ALLOWED") // for common tests package test.text import kotlin.text.* diff --git a/libraries/stdlib/test/text/StringNumberConversionTest.kt b/libraries/stdlib/test/text/StringNumberConversionTest.kt index bdddb9c290e..7bd15aa72d9 100644 --- a/libraries/stdlib/test/text/StringNumberConversionTest.kt +++ b/libraries/stdlib/test/text/StringNumberConversionTest.kt @@ -1,5 +1,6 @@ package test.text +import test.* import kotlin.test.* class StringNumberConversionTest { @@ -334,13 +335,3 @@ private class ConversionWithRadixContext(val convertOrFail: (String, Int assertNull(convertOrNull(input, radix), message = "On input \"$input\" with radix $radix") } } - -@kotlin.jvm.JvmVersion -private val isJava6 = System.getProperty("java.version").startsWith("1.6.") - -@kotlin.jvm.JvmVersion -private fun String.removeLeadingPlusOnJava6(): String = - if (isJava6) removePrefix("+") else this - -@kotlin.jvm.JvmVersion -private fun doubleTotalOrderEquals(a: Any?, b: Any?) = a == b