Improved version parsing.

This commit is contained in:
Erik C. Thauvin 2019-07-26 12:26:34 -07:00
parent c16f95a8d3
commit c678bb7889
2 changed files with 34 additions and 13 deletions

View file

@ -36,6 +36,7 @@ import org.gradle.api.GradleException
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import java.util.Properties
/**
@ -77,7 +78,7 @@ object Utils {
if (!exists() && createNewFile()) {
isNew = true
}
} catch (e: Exception) {
} catch (e: IOException) {
throw GradleException("Unable to create: `$absoluteFile`", e)
}
if (canReadFile()) {
@ -131,26 +132,29 @@ object Utils {
if (input.isNullOrBlank()) return false
try {
val max = 5
val min = 3
val parts = input.split(
Regex("[\\Q${version.separator}${version.preReleasePrefix}${version.buildMetaPrefix}\\E]"),
5
max
)
if (parts.size >= 3) {
if (parts.size >= min) {
version.major = parts[0].toInt()
version.minor = parts[1].toInt()
version.patch = parts[2].toInt()
version.preRelease = ""
version.buildMeta = ""
if (parts.size > 3) {
if (parts.size > min) {
when {
parts.size == 5 -> {
parts.size == max -> {
version.preRelease = parts[3]
version.buildMeta = parts[4]
}
parts.size == 4 -> {
if (input.contains(version.buildMetaPrefix)) {
if (input.endsWith(version.buildMetaPrefix + parts[3])) {
version.buildMeta = parts[3]
} else {
version.preRelease = parts[3]
@ -208,11 +212,11 @@ object Utils {
store(it, "Generated by the Semver Plugin for Gradle")
}
} else {
throw GradleException()
throw IOException("Can't write.")
}
}
} catch (e: Exception) {
throw GradleException("Unable to write version to: `${propsFile.absoluteFile}`")
} catch (e: IOException) {
throw GradleException("Unable to write version to: `${propsFile.absoluteFile}`", e)
}
}
}

View file

@ -152,8 +152,10 @@ object UtilsSpec : Spek({
}
}
Scenario("Testing Version Parsing") {
When("validating version parsing") {
Scenario("Version Parsing") {
When("validating version parsing") {}
Then("versions should parse") {
listOf(
"1.0.0",
"2.1.0-beta",
@ -168,19 +170,34 @@ object UtilsSpec : Spek({
}
}
Then("should throw exceptions") {
assertFailsWith<GradleException> {
Utils.parseSemVer("2.1.1a", version)
}
assertFailsWith<GradleException> {
Utils.parseSemVer("2a.1.1", version)
}
assertFailsWith<GradleException> {
Utils.parseSemVer("2.1a.1", version)
}
assertFailsWith<GradleException> {
Utils.parseSemVer("2.1", version)
}
}
Given("new prefixes") {
version.preReleasePrefix = "."
version.buildMetaPrefix = "."
}
Then("validating prefixes parsing") {
Then("prefixes should parse") {
listOf("2.1.0.beta.1", "2.1.1.1", "3.2.1.beta.1.007").forEach {
assertTrue(Utils.parseSemVer(it, version), "parsing semver: $it")
assertEquals(it, version.semver, it)
}
}
Then("verifying pre-release and meta") {
Then("last pre-release and meta should match") {
assertEquals(version.preRelease, "beta")
assertEquals(version.buildMeta, "1.007")
}