mirror of
https://github.com/ethauvin/kobalt.git
synced 2025-04-25 16:07:12 -07:00
Distinct.
This commit is contained in:
parent
8b192e31bf
commit
47bdbf04ee
3 changed files with 77 additions and 2 deletions
|
@ -92,7 +92,7 @@ class TestNgRunner : GenericTestRunner() {
|
||||||
}
|
}
|
||||||
|
|
||||||
val v = Versions.toLongVersion("6.10")
|
val v = Versions.toLongVersion("6.10")
|
||||||
val cp = (classpath + dep).map { it.jarFile.get() }
|
val cp = (classpath + dep).distinct().map { it.jarFile.get() }
|
||||||
.joinToString(File.pathSeparator)
|
.joinToString(File.pathSeparator)
|
||||||
val passedArgs = listOf(
|
val passedArgs = listOf(
|
||||||
"-classpath",
|
"-classpath",
|
||||||
|
|
|
@ -2,10 +2,47 @@ package com.beust.kobalt.misc
|
||||||
|
|
||||||
import com.beust.kobalt.maven.MavenId
|
import com.beust.kobalt.maven.MavenId
|
||||||
import com.google.common.base.CharMatcher
|
import com.google.common.base.CharMatcher
|
||||||
|
import java.lang.Character
|
||||||
|
import java.lang.IllegalStateException
|
||||||
|
import java.lang.Integer
|
||||||
|
import java.lang.Math
|
||||||
|
import java.lang.NumberFormatException
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
public class Versions {
|
/**
|
||||||
|
* Allow to compare string versions.
|
||||||
|
*/
|
||||||
|
class StringVersion(val version: String) {
|
||||||
|
val array = version.split('.')
|
||||||
|
|
||||||
|
enum class Compare { LT, EQ, GT }
|
||||||
|
|
||||||
|
fun compareTo(other: String) : Compare {
|
||||||
|
val s1 = arrayListOf<String>().apply { addAll(version.split('.')) }
|
||||||
|
val s2 = arrayListOf<String>().apply { addAll(other.split('.')) }
|
||||||
|
val max = Math.max(s1.size, s2.size)
|
||||||
|
val shorterList : ArrayList<String> = if (s1.size == max) s2 else s1
|
||||||
|
repeat(max - shorterList.size) {
|
||||||
|
shorterList.add("0")
|
||||||
|
}
|
||||||
|
|
||||||
|
repeat(max) { index ->
|
||||||
|
try {
|
||||||
|
val v1 = Integer.parseInt(s1[index])
|
||||||
|
val v2 = Integer.parseInt(s2[index])
|
||||||
|
if (v1 < v2) return Compare.LT
|
||||||
|
else if (v1 > v2) return Compare.GT
|
||||||
|
} catch(ex: NumberFormatException) {
|
||||||
|
warn("Couldn't parse version $version or $other")
|
||||||
|
return Compare.LT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Compare.EQ
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Versions {
|
||||||
companion object {
|
companion object {
|
||||||
/**
|
/**
|
||||||
* Turn "6.9.4" into 600090004
|
* Turn "6.9.4" into 600090004
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
package com.beust.kobalt.internal
|
package com.beust.kobalt.internal
|
||||||
|
|
||||||
|
import com.beust.kobalt.misc.StringVersion
|
||||||
import com.beust.kobalt.misc.Versions
|
import com.beust.kobalt.misc.Versions
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.testng.annotations.DataProvider
|
import org.testng.annotations.DataProvider
|
||||||
import org.testng.annotations.Test
|
import org.testng.annotations.Test
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make sure we parse version numbers correctly.
|
* Make sure we parse version numbers correctly.
|
||||||
*/
|
*/
|
||||||
|
@ -22,4 +24,40 @@ class VersionTest {
|
||||||
fun versionConversionShouldWork(version: String, expected: Long) {
|
fun versionConversionShouldWork(version: String, expected: Long) {
|
||||||
assertThat(Versions.toLongVersion(version)).isEqualTo(expected)
|
assertThat(Versions.toLongVersion(version)).isEqualTo(expected)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DataProvider
|
||||||
|
fun versionsEqual() : Array<Array<String>>
|
||||||
|
= arrayOf(
|
||||||
|
arrayOf("1", "1"),
|
||||||
|
arrayOf("1.0", "1"),
|
||||||
|
arrayOf("1.0.0", "1"),
|
||||||
|
arrayOf("1.0", "1.0.0")
|
||||||
|
)
|
||||||
|
|
||||||
|
@Test(dataProvider = "versionsEqual")
|
||||||
|
fun versionComparisonsEqual(v1: String, v2: String) {
|
||||||
|
assertThat(StringVersion(v1).compareTo(v2)).isEqualTo(StringVersion.Compare.EQ)
|
||||||
|
assertThat(StringVersion(v2).compareTo(v1)).isEqualTo(StringVersion.Compare.EQ)
|
||||||
|
}
|
||||||
|
|
||||||
|
@DataProvider
|
||||||
|
fun versionsNotEqual() : Array<Array<Any>>
|
||||||
|
= arrayOf(
|
||||||
|
arrayOf("1", "1.2.3", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2", "1.2.3", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2.2", "1.2.3", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2.4", "1.2.3", StringVersion.Compare.GT),
|
||||||
|
arrayOf("1", "1.2.3.4", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2", "1.2.3.4", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2.3", "1.2.3.4", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2.3.3", "1.2.3.4", StringVersion.Compare.LT),
|
||||||
|
arrayOf("1.2.3.5", "1.2.3.4", StringVersion.Compare.GT)
|
||||||
|
)
|
||||||
|
|
||||||
|
@Test(dataProvider = "versionsNotEqual")
|
||||||
|
fun versionComparisonsNotEqual(v1: String, v2: String, expected: StringVersion.Compare) {
|
||||||
|
assertThat(StringVersion(v1).compareTo(v2)).isEqualTo(expected)
|
||||||
|
assertThat(StringVersion(v2).compareTo(v1)).isEqualTo(
|
||||||
|
if (expected == StringVersion.Compare.LT) StringVersion.Compare.GT else StringVersion.Compare.LT)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue