diff --git a/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt b/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt index 4f5c9a5..4a0db27 100644 --- a/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt +++ b/src/main/kotlin/net/thauvin/erik/gradle/semver/Utils.kt @@ -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) } } } diff --git a/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt b/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt index 578dc80..c0a3adc 100644 --- a/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt +++ b/src/test/kotlin/net/thauvin/erik/gradle/semver/UtilsSpec.kt @@ -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 { + Utils.parseSemVer("2.1.1a", version) + } + assertFailsWith { + Utils.parseSemVer("2a.1.1", version) + } + assertFailsWith { + Utils.parseSemVer("2.1a.1", version) + } + assertFailsWith { + 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") }