@@ -22,20 +22,18 @@ import org.jetbrains.kotlin.konan.file.File as KFile
2222
2323abstract class LibrarySpecialCompatibilityChecksTest : TestCaseWithTmpdir () {
2424
25- fun testJsSameBasicCompilerVersion () = testSameBasicCompilerVersion(isWasm = false )
26-
27- fun testWasmSameBasicCompilerVersion () = testSameBasicCompilerVersion(isWasm = true )
28-
29- private fun testSameBasicCompilerVersion (isWasm : Boolean ) {
25+ fun testSameBasicCompilerVersion () {
3026 for (versionsWithSameBasicVersion in SORTED_TEST_VERSION_GROUPS ) {
3127 for (libraryVersion in versionsWithSameBasicVersion) {
3228 for (compilerVersion in versionsWithSameBasicVersion) {
33- compileDummyLibrary(
34- libraryVersion = libraryVersion,
35- compilerVersion = compilerVersion,
36- isWasm = isWasm,
37- expectedWarningStatus = WarningStatus .NO_WARNINGS
38- )
29+ for (isWasm in listOf (false , true )) {
30+ compileDummyLibrary(
31+ libraryVersion = libraryVersion,
32+ compilerVersion = compilerVersion,
33+ isWasm = isWasm,
34+ expectedWarningStatus = WarningStatus .NO_WARNINGS
35+ )
36+ }
3937 }
4038 }
4139 }
@@ -64,16 +62,26 @@ abstract class LibrarySpecialCompatibilityChecksTest : TestCaseWithTmpdir() {
6462 }
6563 }
6664
67- fun testWasmMismatchingVersions () {
65+ fun testWasmNewerCompilerVersion () {
6866 testCurrentAndNextBasicVersions { currentVersion, nextVersion ->
69- for ((libraryVersion, compilerVersion) in listOf (currentVersion to nextVersion, nextVersion to currentVersion)) {
70- compileDummyLibrary(
71- libraryVersion = libraryVersion,
72- compilerVersion = compilerVersion,
73- isWasm = true ,
74- expectedWarningStatus = WarningStatus .WASM_WARNING
75- )
76- }
67+ compileDummyLibrary(
68+ libraryVersion = currentVersion,
69+ compilerVersion = nextVersion,
70+ isWasm = true ,
71+ expectedWarningStatus = WarningStatus .WASM_OLD_LIBRARY_WARNING
72+ )
73+ }
74+ }
75+
76+ fun testWasmOlderCompilerVersion () {
77+ testCurrentAndNextBasicVersions { currentVersion, nextVersion ->
78+ val sameLanguageVersion = haveSameLanguageVersion(currentVersion, nextVersion)
79+ compileDummyLibrary(
80+ libraryVersion = nextVersion,
81+ compilerVersion = currentVersion,
82+ isWasm = true ,
83+ expectedWarningStatus = if (sameLanguageVersion) WarningStatus .NO_WARNINGS else WarningStatus .WASM_TOO_NEW_LIBRARY_WARNING
84+ )
7785 }
7886 }
7987
@@ -130,18 +138,20 @@ abstract class LibrarySpecialCompatibilityChecksTest : TestCaseWithTmpdir() {
130138
131139 protected abstract fun MessageCollectorImpl.hasJsOldLibraryError (specificVersions : Pair <TestVersion , TestVersion >? = null): Boolean
132140 protected abstract fun MessageCollectorImpl.hasJsTooNewLibraryError (specificVersions : Pair <TestVersion , TestVersion >? = null): Boolean
133- protected abstract fun MessageCollectorImpl.hasWasmError (specificVersions : Pair <TestVersion , TestVersion >? = null): Boolean
141+ protected abstract fun MessageCollectorImpl.hasWasmOldLibraryError (specificVersions : Pair <TestVersion , TestVersion >? = null): Boolean
142+ protected abstract fun MessageCollectorImpl.hasWasmTooNewLibraryError (specificVersions : Pair <TestVersion , TestVersion >? = null): Boolean
134143
135144 private fun MessageCollectorImpl.checkMessage (
136145 expectedWarningStatus : WarningStatus ,
137146 libraryVersion : TestVersion ? ,
138147 compilerVersion : TestVersion ? ,
139148 ) {
140149 val success = when (expectedWarningStatus) {
141- WarningStatus .NO_WARNINGS -> ! hasJsOldLibraryError() && ! hasJsTooNewLibraryError() && ! hasWasmError ()
150+ WarningStatus .NO_WARNINGS -> ! hasJsOldLibraryError() && ! hasJsTooNewLibraryError() && ! hasWasmOldLibraryError() && ! hasWasmTooNewLibraryError ()
142151 WarningStatus .JS_OLD_LIBRARY_WARNING -> hasJsOldLibraryError(libraryVersion!! to compilerVersion!! )
143152 WarningStatus .JS_TOO_NEW_LIBRARY_WARNING -> hasJsTooNewLibraryError(libraryVersion!! to compilerVersion!! )
144- WarningStatus .WASM_WARNING -> hasWasmError(libraryVersion!! to compilerVersion!! )
153+ WarningStatus .WASM_OLD_LIBRARY_WARNING -> hasWasmOldLibraryError(libraryVersion!! to compilerVersion!! )
154+ WarningStatus .WASM_TOO_NEW_LIBRARY_WARNING -> hasWasmTooNewLibraryError(libraryVersion!! to compilerVersion!! )
145155 }
146156 if (! success) fail(
147157 buildString {
@@ -197,7 +207,7 @@ abstract class LibrarySpecialCompatibilityChecksTest : TestCaseWithTmpdir() {
197207 private fun createFakeUnzippedLibraryWithSpecificVersion (isWasm : Boolean , version : TestVersion ? ): File {
198208 val rawVersion = version?.toString()
199209
200- val patchedLibraryDir = createDir(" dependencies/fakeLib-${rawVersion ? : " unknown" } " )
210+ val patchedLibraryDir = createDir(" dependencies/fakeLib-${rawVersion ? : " unknown" } - ${ if (isWasm) " wasm " else " js " } " )
201211 val manifestFile = patchedLibraryDir.resolve(" default" ).resolve(" manifest" )
202212 if (manifestFile.exists()) return patchedLibraryDir
203213
@@ -229,7 +239,7 @@ abstract class LibrarySpecialCompatibilityChecksTest : TestCaseWithTmpdir() {
229239 private fun createFakeZippedLibraryWithSpecificVersion (isWasm : Boolean , version : TestVersion ? ): File {
230240 val rawVersion = version?.toString()
231241
232- val patchedLibraryFile = createFile(" dependencies/fakeLib-${rawVersion ? : " unknown" } .klib" )
242+ val patchedLibraryFile = createFile(" dependencies/fakeLib-${rawVersion ? : " unknown" } - ${ if (isWasm) " wasm " else " js " } .klib" )
233243 if (patchedLibraryFile.exists()) return patchedLibraryFile
234244
235245 val unzippedLibraryDir = createFakeUnzippedLibraryWithSpecificVersion(isWasm, version)
@@ -251,7 +261,7 @@ abstract class LibrarySpecialCompatibilityChecksTest : TestCaseWithTmpdir() {
251261 protected fun createDir (name : String ): File = tmpdir.resolve(name).apply { mkdirs() }
252262 protected fun createFile (name : String ): File = tmpdir.resolve(name).apply { parentFile.mkdirs() }
253263
254- protected enum class WarningStatus { NO_WARNINGS , JS_OLD_LIBRARY_WARNING , JS_TOO_NEW_LIBRARY_WARNING , WASM_WARNING }
264+ protected enum class WarningStatus { NO_WARNINGS , JS_OLD_LIBRARY_WARNING , JS_TOO_NEW_LIBRARY_WARNING , WASM_OLD_LIBRARY_WARNING , WASM_TOO_NEW_LIBRARY_WARNING }
255265
256266 protected class TestVersion (val basicVersion : KotlinVersion , val postfix : String ) : Comparable<TestVersion> {
257267 constructor (major: Int , minor: Int , patch: Int , postfix: String = " " ) : this (KotlinVersion (major, minor, patch), postfix)
0 commit comments