mirror of https://github.com/sbt/sbt.git
Merge pull request #1316 from sbt/wip/fix-broken-build
This doesn't quite fix the build, but gets closer
This commit is contained in:
commit
d3aa84ff7a
|
|
@ -3,90 +3,87 @@ package sbt
|
|||
import java.io.File
|
||||
import org.specs2._
|
||||
import mutable.Specification
|
||||
import IO.{createDirectory, delete, touch, withTemporaryDirectory}
|
||||
import IO.{ createDirectory, delete, touch, withTemporaryDirectory }
|
||||
import org.apache.ivy.util.ChecksumHelper
|
||||
import IfMissing.Fail
|
||||
|
||||
object ComponentManagerTest extends Specification
|
||||
{
|
||||
val TestID = "manager-test"
|
||||
"Component manager" should {
|
||||
"throw an exception if 'file' is called for a non-existing component" in {
|
||||
withManager { _.file(TestID)(Fail) must throwA[InvalidComponent] }
|
||||
}
|
||||
"throw an exception if 'file' is called for an empty component" in {
|
||||
withManager { manager =>
|
||||
manager.define(TestID, Nil)
|
||||
( manager.file(TestID)(Fail) ) must throwA[InvalidComponent]
|
||||
}
|
||||
}
|
||||
"return the file for a single-file component" in {
|
||||
withManager { manager =>
|
||||
val hash = defineFile(manager, TestID, "a")
|
||||
checksum(manager.file(TestID)(Fail)) must beEqualTo(hash)
|
||||
}
|
||||
}
|
||||
object ComponentManagerTest extends Specification {
|
||||
val TestID = "manager-test"
|
||||
"Component manager" should {
|
||||
"throw an exception if 'file' is called for a non-existing component" in {
|
||||
withManager { _.file(TestID)(Fail) must throwA[InvalidComponent] }
|
||||
}
|
||||
"throw an exception if 'file' is called for an empty component" in {
|
||||
withManager { manager =>
|
||||
manager.define(TestID, Nil)
|
||||
(manager.file(TestID)(Fail)) must throwA[InvalidComponent]
|
||||
}
|
||||
}
|
||||
"return the file for a single-file component" in {
|
||||
withManager { manager =>
|
||||
val hash = defineFile(manager, TestID, "a")
|
||||
checksum(manager.file(TestID)(Fail)) must beEqualTo(hash)
|
||||
}
|
||||
}
|
||||
|
||||
"throw an exception if 'file' is called for multi-file component" in {
|
||||
withManager { manager =>
|
||||
defineFiles(manager, TestID, "a", "b")
|
||||
( manager.file(TestID)(Fail) ) must throwA[InvalidComponent]
|
||||
}
|
||||
}
|
||||
"return the files for a multi-file component" in {
|
||||
withManager { manager =>
|
||||
val hashes = defineFiles(manager, TestID, "a", "b")
|
||||
checksum(manager.files(TestID)(Fail)) must haveTheSameElementsAs(hashes)
|
||||
}
|
||||
}
|
||||
"return the files for a single-file component" in {
|
||||
withManager { manager =>
|
||||
val hashes = defineFiles(manager, TestID, "a")
|
||||
checksum(manager.files(TestID)(Fail)) must haveTheSameElementsAs(hashes)
|
||||
}
|
||||
}
|
||||
"throw an exception if 'files' is called for a non-existing component" in {
|
||||
withManager { _.files(TestID)(Fail) must throwA[InvalidComponent] }
|
||||
}
|
||||
"throw an exception if 'file' is called for multi-file component" in {
|
||||
withManager { manager =>
|
||||
defineFiles(manager, TestID, "a", "b")
|
||||
(manager.file(TestID)(Fail)) must throwA[InvalidComponent]
|
||||
}
|
||||
}
|
||||
"return the files for a multi-file component" in {
|
||||
withManager { manager =>
|
||||
val hashes = defineFiles(manager, TestID, "a", "b")
|
||||
checksum(manager.files(TestID)(Fail)) must haveTheSameElementsAs(hashes)
|
||||
}
|
||||
}
|
||||
"return the files for a single-file component" in {
|
||||
withManager { manager =>
|
||||
val hashes = defineFiles(manager, TestID, "a")
|
||||
checksum(manager.files(TestID)(Fail)) must haveTheSameElementsAs(hashes)
|
||||
}
|
||||
}
|
||||
"throw an exception if 'files' is called for a non-existing component" in {
|
||||
withManager { _.files(TestID)(Fail) must throwA[InvalidComponent] }
|
||||
}
|
||||
|
||||
"properly cache a file and then retrieve it to an unresolved component" in {
|
||||
withTemporaryDirectory { ivyHome =>
|
||||
withManagerHome(ivyHome) { definingManager =>
|
||||
val hash = defineFile(definingManager, TestID, "a")
|
||||
try
|
||||
{
|
||||
definingManager.cache(TestID)
|
||||
withManagerHome(ivyHome) { usingManager =>
|
||||
checksum(usingManager.file(TestID)(Fail)) must beEqualTo(hash)
|
||||
}
|
||||
}
|
||||
finally { definingManager.clearCache(TestID) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private def checksum(files: Iterable[File]): Seq[String] = files.map(checksum).toSeq
|
||||
private def checksum(file: File): String = if(file.exists) ChecksumHelper.computeAsString(file, "sha1") else ""
|
||||
private def defineFile(manager: ComponentManager, id: String, name: String): String = createFile(manager, id, name)(checksum)
|
||||
private def defineFiles(manager: ComponentManager, id: String, names: String*): Seq[String] = createFiles(manager, id, names : _*)(checksum)
|
||||
private def createFile[T](manager: ComponentManager, id: String, name: String)(f: File => T): T = createFiles(manager, id, name)(files => f(files.toList.head))
|
||||
private def createFiles[T](manager: ComponentManager, id: String, names: String*)(f: Seq[File] => T): T =
|
||||
withTemporaryDirectory { dir =>
|
||||
val files = names.map(name => new File(dir, name) )
|
||||
files.foreach(writeRandomContent)
|
||||
manager.define(id, files)
|
||||
f(files)
|
||||
}
|
||||
private def writeRandomContent(file: File) = IO.write(file, randomString)
|
||||
private def randomString = "asdf"
|
||||
private def withManager[T](f: ComponentManager => T): T =
|
||||
withTemporaryDirectory { ivyHome => withManagerHome(ivyHome)(f) }
|
||||
"properly cache a file and then retrieve it to an unresolved component" in {
|
||||
withTemporaryDirectory { ivyHome =>
|
||||
withManagerHome(ivyHome) { definingManager =>
|
||||
val hash = defineFile(definingManager, TestID, "a")
|
||||
try {
|
||||
definingManager.cache(TestID)
|
||||
withManagerHome(ivyHome) { usingManager =>
|
||||
checksum(usingManager.file(TestID)(Fail)) must beEqualTo(hash)
|
||||
}
|
||||
} finally { definingManager.clearCache(TestID) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private def checksum(files: Iterable[File]): Seq[String] = files.map(checksum).toSeq
|
||||
private def checksum(file: File): String = if (file.exists) ChecksumHelper.computeAsString(file, "sha1") else ""
|
||||
private def defineFile(manager: ComponentManager, id: String, name: String): String = createFile(manager, id, name)(checksum)
|
||||
private def defineFiles(manager: ComponentManager, id: String, names: String*): Seq[String] = createFiles(manager, id, names: _*)(checksum)
|
||||
private def createFile[T](manager: ComponentManager, id: String, name: String)(f: File => T): T = createFiles(manager, id, name)(files => f(files.toList.head))
|
||||
private def createFiles[T](manager: ComponentManager, id: String, names: String*)(f: Seq[File] => T): T =
|
||||
withTemporaryDirectory { dir =>
|
||||
val files = names.map(name => new File(dir, name))
|
||||
files.foreach(writeRandomContent)
|
||||
manager.define(id, files)
|
||||
f(files)
|
||||
}
|
||||
private def writeRandomContent(file: File) = IO.write(file, randomString)
|
||||
private def randomString = "asdf"
|
||||
private def withManager[T](f: ComponentManager => T): T =
|
||||
withTemporaryDirectory { ivyHome => withManagerHome(ivyHome)(f) }
|
||||
|
||||
private def withManagerHome[T](ivyHome: File)(f: ComponentManager => T): T =
|
||||
TestLogger { logger =>
|
||||
withTemporaryDirectory { temp =>
|
||||
val mgr = new ComponentManager(xsbt.boot.Locks, new xsbt.boot.ComponentProvider(temp, true), Some(ivyHome), logger)
|
||||
f(mgr)
|
||||
}
|
||||
}
|
||||
private def withManagerHome[T](ivyHome: File)(f: ComponentManager => T): T =
|
||||
TestLogger { logger =>
|
||||
withTemporaryDirectory { temp =>
|
||||
val mgr = new ComponentManager(xsbt.boot.Locks, new xsbt.boot.ComponentProvider(temp, true), Some(ivyHome), logger)
|
||||
f(mgr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,120 +4,119 @@ import java.io.File
|
|||
import org.specs2._
|
||||
import mutable.Specification
|
||||
|
||||
object CrossVersionTest extends Specification
|
||||
{
|
||||
"Cross version" should {
|
||||
"return sbt API for xyz as None" in {
|
||||
CrossVersion.sbtApiVersion("xyz") must_== None
|
||||
}
|
||||
"return sbt API for 0.12 as None" in {
|
||||
CrossVersion.sbtApiVersion("0.12") must_== None
|
||||
}
|
||||
"return sbt API for 0.12.0-SNAPSHOT as None" in {
|
||||
CrossVersion.sbtApiVersion("0.12.0-SNAPSHOT") must_== None
|
||||
}
|
||||
"return sbt API for 0.12.0-RC1 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.0-RC1") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.0 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.0") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.1-SNAPSHOT as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.1-SNAPSHOT") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.1-RC1 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.1-RC1") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.1 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.1") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API compatibility for 0.12.0-M1 as false" in {
|
||||
CrossVersion.isSbtApiCompatible("0.12.0-M1") must_== false
|
||||
}
|
||||
"return sbt API compatibility for 0.12.0-RC1 as true" in {
|
||||
CrossVersion.isSbtApiCompatible("0.12.0-RC1") must_== true
|
||||
}
|
||||
"return sbt API compatibility for 0.12.1-RC1 as true" in {
|
||||
CrossVersion.isSbtApiCompatible("0.12.1-RC1") must_== true
|
||||
}
|
||||
"return binary sbt version for 0.11.3 as 0.11.3" in {
|
||||
CrossVersion.binarySbtVersion("0.11.3") must_== "0.11.3"
|
||||
}
|
||||
"return binary sbt version for 0.12.0-M1 as 0.12.0-M1" in {
|
||||
CrossVersion.binarySbtVersion("0.12.0-M1") must_== "0.12.0-M1"
|
||||
}
|
||||
"return binary sbt version for 0.12.0-RC1 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.0-RC1") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.0 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.0") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.1-SNAPSHOT as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.1-SNAPSHOT") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.1-RC1 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.1-RC1") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.1 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.1") must_== "0.12"
|
||||
}
|
||||
object CrossVersionTest extends Specification {
|
||||
"Cross version" should {
|
||||
"return sbt API for xyz as None" in {
|
||||
CrossVersion.sbtApiVersion("xyz") must_== None
|
||||
}
|
||||
"return sbt API for 0.12 as None" in {
|
||||
CrossVersion.sbtApiVersion("0.12") must_== None
|
||||
}
|
||||
"return sbt API for 0.12.0-SNAPSHOT as None" in {
|
||||
CrossVersion.sbtApiVersion("0.12.0-SNAPSHOT") must_== None
|
||||
}
|
||||
"return sbt API for 0.12.0-RC1 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.0-RC1") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.0 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.0") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.1-SNAPSHOT as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.1-SNAPSHOT") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.1-RC1 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.1-RC1") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API for 0.12.1 as Some((0, 12))" in {
|
||||
CrossVersion.sbtApiVersion("0.12.1") must_== Some((0, 12))
|
||||
}
|
||||
"return sbt API compatibility for 0.12.0-M1 as false" in {
|
||||
CrossVersion.isSbtApiCompatible("0.12.0-M1") must_== false
|
||||
}
|
||||
"return sbt API compatibility for 0.12.0-RC1 as true" in {
|
||||
CrossVersion.isSbtApiCompatible("0.12.0-RC1") must_== true
|
||||
}
|
||||
"return sbt API compatibility for 0.12.1-RC1 as true" in {
|
||||
CrossVersion.isSbtApiCompatible("0.12.1-RC1") must_== true
|
||||
}
|
||||
"return binary sbt version for 0.11.3 as 0.11.3" in {
|
||||
CrossVersion.binarySbtVersion("0.11.3") must_== "0.11.3"
|
||||
}
|
||||
"return binary sbt version for 0.12.0-M1 as 0.12.0-M1" in {
|
||||
CrossVersion.binarySbtVersion("0.12.0-M1") must_== "0.12.0-M1"
|
||||
}
|
||||
"return binary sbt version for 0.12.0-RC1 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.0-RC1") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.0 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.0") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.1-SNAPSHOT as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.1-SNAPSHOT") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.1-RC1 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.1-RC1") must_== "0.12"
|
||||
}
|
||||
"return binary sbt version for 0.12.1 as 0.12" in {
|
||||
CrossVersion.binarySbtVersion("0.12.1") must_== "0.12"
|
||||
}
|
||||
|
||||
"return Scala API for xyz as None" in {
|
||||
CrossVersion.scalaApiVersion("xyz") must_== None
|
||||
}
|
||||
"return Scala API for 2.10 as None" in {
|
||||
CrossVersion.scalaApiVersion("2.10") must_== None
|
||||
}
|
||||
"return Scala API for 2.10.0-SNAPSHOT as None" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0-SNAPSHOT") must_== None
|
||||
}
|
||||
"return Scala API for 2.10.0-RC1 as None" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0-RC1") must_== None
|
||||
}
|
||||
"return Scala API for 2.10.0 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.0-1 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0-1") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.1-SNAPSHOT as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.1-SNAPSHOT") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.1-RC1 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.1-RC1") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.1 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.1") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API compatibility for 2.10.0-M1 as false" in {
|
||||
CrossVersion.isScalaApiCompatible("2.10.0-M1") must_== false
|
||||
}
|
||||
"return Scala API compatibility for 2.10.0-RC1 as false" in {
|
||||
CrossVersion.isScalaApiCompatible("2.10.0-RC1") must_== false
|
||||
}
|
||||
"return Scala API compatibility for 2.10.1-RC1 as false" in {
|
||||
CrossVersion.isScalaApiCompatible("2.10.1-RC1") must_== true
|
||||
}
|
||||
"return binary Scala version for 2.9.2 as 2.9.2" in {
|
||||
CrossVersion.binaryScalaVersion("2.9.2") must_== "2.9.2"
|
||||
}
|
||||
"return binary Scala version for 2.10.0-M1 as 2.10.0-M1" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.0-M1") must_== "2.10.0-M1"
|
||||
}
|
||||
"return binary Scala version for 2.10.0-RC1 as 2.10.0-RC1" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.0-RC1") must_== "2.10.0-RC1"
|
||||
}
|
||||
"return binary Scala version for 2.10.0 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.0") must_== "2.10"
|
||||
}
|
||||
"return binary Scala version for 2.10.1-M1 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.1-M1") must_== "2.10"
|
||||
}
|
||||
"return binary Scala version for 2.10.1-RC1 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.1-RC1") must_== "2.10"
|
||||
}
|
||||
"return binary Scala version for 2.10.1 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.1") must_== "2.10"
|
||||
}
|
||||
}
|
||||
"return Scala API for xyz as None" in {
|
||||
CrossVersion.scalaApiVersion("xyz") must_== None
|
||||
}
|
||||
"return Scala API for 2.10 as None" in {
|
||||
CrossVersion.scalaApiVersion("2.10") must_== None
|
||||
}
|
||||
"return Scala API for 2.10.0-SNAPSHOT as None" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0-SNAPSHOT") must_== None
|
||||
}
|
||||
"return Scala API for 2.10.0-RC1 as None" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0-RC1") must_== None
|
||||
}
|
||||
"return Scala API for 2.10.0 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.0-1 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.0-1") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.1-SNAPSHOT as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.1-SNAPSHOT") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.1-RC1 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.1-RC1") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API for 2.10.1 as Some((2, 10))" in {
|
||||
CrossVersion.scalaApiVersion("2.10.1") must_== Some((2, 10))
|
||||
}
|
||||
"return Scala API compatibility for 2.10.0-M1 as false" in {
|
||||
CrossVersion.isScalaApiCompatible("2.10.0-M1") must_== false
|
||||
}
|
||||
"return Scala API compatibility for 2.10.0-RC1 as false" in {
|
||||
CrossVersion.isScalaApiCompatible("2.10.0-RC1") must_== false
|
||||
}
|
||||
"return Scala API compatibility for 2.10.1-RC1 as false" in {
|
||||
CrossVersion.isScalaApiCompatible("2.10.1-RC1") must_== true
|
||||
}
|
||||
"return binary Scala version for 2.9.2 as 2.9.2" in {
|
||||
CrossVersion.binaryScalaVersion("2.9.2") must_== "2.9.2"
|
||||
}
|
||||
"return binary Scala version for 2.10.0-M1 as 2.10.0-M1" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.0-M1") must_== "2.10.0-M1"
|
||||
}
|
||||
"return binary Scala version for 2.10.0-RC1 as 2.10.0-RC1" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.0-RC1") must_== "2.10.0-RC1"
|
||||
}
|
||||
"return binary Scala version for 2.10.0 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.0") must_== "2.10"
|
||||
}
|
||||
"return binary Scala version for 2.10.1-M1 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.1-M1") must_== "2.10"
|
||||
}
|
||||
"return binary Scala version for 2.10.1-RC1 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.1-RC1") must_== "2.10"
|
||||
}
|
||||
"return binary Scala version for 2.10.1 as 2.10" in {
|
||||
CrossVersion.binaryScalaVersion("2.10.1") must_== "2.10"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,26 +4,25 @@ import java.io.File
|
|||
import org.specs2._
|
||||
import mutable.Specification
|
||||
|
||||
object MakePomTest extends Specification
|
||||
{
|
||||
val mp = new MakePom(ConsoleLogger())
|
||||
import mp.{makeDependencyVersion=>v}
|
||||
"MakePom makeDependencyVersion" should {
|
||||
"Handle .+ in versions" in {
|
||||
v("1.+") must_== "[1,2)"
|
||||
v("1.2.3.4.+") must_== "[1.2.3.4,1.2.3.5)"
|
||||
v("12.31.42.+") must_== "[12.31.42,12.31.43)"
|
||||
}
|
||||
/* TODO - do we care about this case?
|
||||
object MakePomTest extends Specification {
|
||||
val mp = new MakePom(ConsoleLogger())
|
||||
import mp.{ makeDependencyVersion => v }
|
||||
"MakePom makeDependencyVersion" should {
|
||||
"Handle .+ in versions" in {
|
||||
v("1.+") must_== "[1,2)"
|
||||
v("1.2.3.4.+") must_== "[1.2.3.4,1.2.3.5)"
|
||||
v("12.31.42.+") must_== "[12.31.42,12.31.43)"
|
||||
}
|
||||
/* TODO - do we care about this case?
|
||||
* 1+ --> [1,2),[10,20),[100,200),[1000,2000),[10000,20000),[100000,200000)
|
||||
*/
|
||||
"Handle ]* bracket in version ranges" in {
|
||||
v("]1,3]") must_== "(1,3]"
|
||||
v("]1.1,1.3]") must_== "(1.1,1.3]"
|
||||
}
|
||||
"Handle *[ bracket in version ranges" in {
|
||||
v("[1,3[") must_== "[1,3)"
|
||||
v("[1.1,1.3[") must_== "[1.1,1.3)"
|
||||
}
|
||||
}
|
||||
"Handle ]* bracket in version ranges" in {
|
||||
v("]1,3]") must_== "(1,3]"
|
||||
v("]1.1,1.3]") must_== "(1.1,1.3]"
|
||||
}
|
||||
"Handle *[ bracket in version ranges" in {
|
||||
v("[1,3[") must_== "[1,3)"
|
||||
v("[1.1,1.3[") must_== "[1.1,1.3)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue