Native: improve CompilerVersion to correspond to the versioning schema
* Add pub and dev-google-pr meta versions * Allow using release versions with and without build number * Add tests for version parsing
This commit is contained in:
@@ -6,6 +6,7 @@ plugins {
|
||||
dependencies {
|
||||
implementation(kotlinStdlib())
|
||||
testImplementation(commonDep("junit:junit"))
|
||||
testImplementation(kotlin("test"))
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
||||
@@ -12,14 +12,17 @@ interface CompilerVersion : Serializable {
|
||||
val major: Int
|
||||
val minor: Int
|
||||
val maintenance: Int
|
||||
|
||||
@Deprecated("Milestone is deprecated in favour to MetaVersion's M1 and M2")
|
||||
val milestone: Int
|
||||
|
||||
val build: Int
|
||||
|
||||
fun toString(showMeta: Boolean, showBuild: Boolean): String
|
||||
|
||||
companion object {
|
||||
// major.minor.patch-meta-build where patch, meta and build are optional.
|
||||
private val versionPattern = "(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\p{Alpha}\\p{Alnum}*))?(?:-(\\d+))?".toRegex()
|
||||
val versionPattern = "(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\p{Alpha}\\p{Alnum}|[\\p{Alpha}-]*))?(?:-(\\d+))?".toRegex()
|
||||
|
||||
fun fromString(version: String): CompilerVersion {
|
||||
val (major, minor, maintenance, metaString, build) =
|
||||
@@ -68,7 +71,7 @@ data class CompilerVersionImpl(
|
||||
private val isRelease: Boolean
|
||||
get() = meta == MetaVersion.RELEASE
|
||||
|
||||
private val versionString by lazy { toString(!isRelease, !isRelease) }
|
||||
private val versionString by lazy { toString(!isRelease, true) }
|
||||
|
||||
override fun toString() = versionString
|
||||
}
|
||||
|
||||
@@ -5,18 +5,15 @@
|
||||
|
||||
package org.jetbrains.kotlin.konan
|
||||
|
||||
/**
|
||||
* https://en.wikipedia.org/wiki/Software_versioning
|
||||
* scheme major.minor[.build[.revision]].
|
||||
*/
|
||||
|
||||
enum class MetaVersion(val metaString: String) {
|
||||
DEV("dev"),
|
||||
DEV_GOOGLE("dev-google-pr"),
|
||||
EAP("eap"),
|
||||
BETA("beta"),
|
||||
M1("M1"),
|
||||
M2("M2"),
|
||||
RC("RC"),
|
||||
PUB("PUB"),
|
||||
RELEASE("release");
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.native
|
||||
|
||||
import org.jetbrains.kotlin.konan.CompilerVersion
|
||||
import org.jetbrains.kotlin.konan.CompilerVersionImpl
|
||||
import org.jetbrains.kotlin.konan.MetaVersion
|
||||
import org.jetbrains.kotlin.konan.parseCompilerVersion
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Test
|
||||
import kotlin.test.*
|
||||
|
||||
class NativeCompilerVersionTest {
|
||||
|
||||
@Test
|
||||
fun versionParseTest() {
|
||||
"1.5.30-dev-1".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.DEV, meta)
|
||||
assertEquals(1, build)
|
||||
}
|
||||
"1.5.30-rc-12".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.RC, meta)
|
||||
assertEquals(12, build)
|
||||
}
|
||||
// Final release
|
||||
"1.5.30".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.RELEASE, meta)
|
||||
assertEquals(-1, build)
|
||||
}
|
||||
// Final release build.number
|
||||
"1.5.30-release-34".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.RELEASE, meta)
|
||||
assertEquals(34, build)
|
||||
}
|
||||
// Release builds
|
||||
"1.5.30-1234".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.RELEASE, meta)
|
||||
assertEquals(1234, build)
|
||||
}
|
||||
"1.6.0-dev-1".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(6, minor)
|
||||
assertEquals(0, maintenance)
|
||||
assertEquals(MetaVersion.DEV, meta)
|
||||
assertEquals(1, build)
|
||||
}
|
||||
"1.6.10-M1-3".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(6, minor)
|
||||
assertEquals(10, maintenance)
|
||||
assertEquals(MetaVersion.M1, meta)
|
||||
assertEquals(3, build)
|
||||
}
|
||||
"1.6.20-M2".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(6, minor)
|
||||
assertEquals(20, maintenance)
|
||||
assertEquals(MetaVersion.M2, meta)
|
||||
assertEquals(-1, build)
|
||||
}
|
||||
"1.6.10-RC".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(6, minor)
|
||||
assertEquals(10, maintenance)
|
||||
assertEquals(MetaVersion.RC, meta)
|
||||
assertEquals(-1, build)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun incorrectVersionString() {
|
||||
assertFailsWith<IllegalArgumentException> { CompilerVersion.fromString("1.5.30-M1-dev-123") }
|
||||
assertFailsWith<IllegalArgumentException> { CompilerVersion.fromString("1.5.30-M1-release-123") }
|
||||
assertFailsWith<IllegalArgumentException> { CompilerVersion.fromString("1.5.30.40-release-123") }
|
||||
assertFailsWith<IllegalStateException> { CompilerVersion.fromString("1.6.0-M3-123") }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun versionToString() {
|
||||
assertEquals("1.5.30-dev-140", CompilerVersionImpl(MetaVersion.DEV, 1, 5, 30, -1, 140).toString())
|
||||
assertEquals("1.5.30-RC-140", CompilerVersionImpl(MetaVersion.RC, 1, 5, 30, -1, 140).toString())
|
||||
assertEquals("1.5.30-RC", CompilerVersionImpl(MetaVersion.RC, 1, 5, 30, -1, -1).toString())
|
||||
assertEquals("1.6.10-14", CompilerVersionImpl(MetaVersion.RELEASE, 1, 6, 10, -1, 14).toString())
|
||||
assertEquals("1.6.10-14", CompilerVersionImpl(MetaVersion.RELEASE, 1, 6, 10, -1, 14).toString())
|
||||
assertEquals("1.6.0", CompilerVersionImpl(MetaVersion.RELEASE, 1, 6, 0, -1, -1).toString())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun publicVersion() {
|
||||
"1.5.30-dev-google-pr-123".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.DEV_GOOGLE, meta)
|
||||
assertEquals(123, build)
|
||||
}
|
||||
assertEquals("1.5.30-dev-google-pr-140", CompilerVersionImpl(MetaVersion.DEV_GOOGLE, 1, 5, 30, -1, 140).toString())
|
||||
|
||||
"1.5.30-pub-123".parseCompilerVersion().apply {
|
||||
assertEquals(1, major)
|
||||
assertEquals(5, minor)
|
||||
assertEquals(30, maintenance)
|
||||
assertEquals(MetaVersion.PUB, meta)
|
||||
assertEquals(123, build)
|
||||
}
|
||||
assertEquals("1.5.30-PUB-140", CompilerVersionImpl(MetaVersion.PUB, 1, 5, 30, -1, 140).toString())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user