migrate a few more dependency management integration tests

This commit is contained in:
Mark Harrah 2011-05-25 22:44:22 -04:00
parent 58d9f3b0a0
commit 5b6f6a16e1
11 changed files with 102 additions and 67 deletions

View File

@ -0,0 +1,25 @@
import sbt._
import Keys._
object ExcludeScala extends Build
{
lazy val projects = Seq(root)
lazy val root = Project("root", file(".")) settings(
libraryDependencies <++= baseDirectory(dependencies),
scalaVersion := "2.8.1",
autoScalaLibrary <<= baseDirectory(base => !(base / "noscala").exists ),
scalaOverride <<= fullClasspath in Compile map { cp =>
val existing = cp.files.filter(_.getName contains "scala-library")
val loader = classpath.ClasspathUtilities.toLoader(existing)
// check that the 2.8.1 scala-library is on the classpath and not 2.7.7
Class.forName("scala.collection.immutable.List", false, loader)
}
)
lazy val scalaOverride = TaskKey[Unit]("scala-override")
def dependencies(base: File) =
if( ( base / "sbinary").exists )
("org.scala-tools.sbinary" % "sbinary_2.7.7" % "0.3") :: Nil
else
Nil
}

View File

@ -1,3 +1,13 @@
> no-scala
> update
> no-scala
> scala-override
$ touch sbinary
> reload
> scala-override
$ touch noscala
> reload
> scala-override
$ delete sbinary
> reload
-> scala-override

View File

@ -6,23 +6,20 @@ object TestProject extends Build
lazy val projects = Seq(root)
lazy val root = Project("root", file(".")) settings(
ivyPaths <<= (baseDirectory, target)( (dir, t) => new IvyPaths(dir, Some(t / "ivy-cache"))),
libraryDependencies += transitive("javax.mail" % "mail" % "1.4.1"),
libraryDependencies <+= baseDirectory(transitive("javax.mail" % "mail" % "1.4.1")),
TaskKey("check-transitive") <<= check(true),
TaskKey("check-intransitive") <<= check(false)
)
def transitive(dep: ModuleID) =
{
println("transitive(" + dep + ") = " + file("transitive").exists)
if(file("transitive").exists) dep else dep.intransitive()
}
def transitive(dep: ModuleID)(base: File) =
if((base / "transitive").exists) dep else dep.intransitive()
private def check(transitive: Boolean) =
(dependencyClasspath in Compile) map { downloaded =>
val jars = downloaded.size
if(transitive)
if(jars <= 1) error("Transitive dependencies not downloaded")
if(jars <= 2) error("Transitive dependencies not downloaded") else ()
else
if(jars > 1) error("Transitive dependencies downloaded (" + downloaded.files.mkString(", ") + ")")
if(jars > 2) error("Transitive dependencies downloaded (" + downloaded.files.mkString(", ") + ")") else ()
}
}

View File

@ -1,10 +1,11 @@
# load the project definition with transitive dependencies enabled
# and check that they are not downloaded
$ pause
#$ pause
$ touch transitive
$ pause
#$ pause
> reload
$ pause
#$ pause
> check-transitive
-> check-intransitive

View File

@ -0,0 +1,25 @@
import sbt._
import Keys._
object Test extends Build
{
lazy val projects = Seq(root)
lazy val root = Project("root", file(".")) settings(
libraryDependencies += "net.liftweb" % "lift-webkit" % "1.0" intransitive(),
libraryDependencies += "org.scalacheck" % "scalacheck" % "1.5" intransitive(),
transitiveClassifiers := Seq("sources"),
TaskKey("check-sources") <<= updateClassifiers map checkSources,
TaskKey("check-binaries") <<= update map checkBinaries
)
def getSources(report: UpdateReport) = report.matching(artifactFilter(`classifier` = "sources") )
def checkSources(report: UpdateReport) =
{
val srcs = getSources(report)
if(srcs.isEmpty) error("No sources retrieved") else if(srcs.size != 2) error("Incorrect sources retrieved:\n\t" + srcs.mkString("\n\t"))
}
def checkBinaries(report: UpdateReport) =
{
val srcs = getSources(report)
if(!srcs.isEmpty) error("Sources retrieved:\n\t" + srcs.mkString("\n\t"))
}
}

View File

@ -1,2 +0,0 @@
project.name=Test
project.version=1.0

View File

@ -1,22 +0,0 @@
import sbt._
class Test(info: ProjectInfo) extends DefaultProject(info)
{
val sourcesOnly = "net.liftweb" % "lift-webkit" % "1.0" % "sources" sources() intransitive()
val sourcesAndJar = "org.scalacheck" % "scalacheck" % "1.5" withSources()
def expectedCompile = Set("scalacheck-1.5.jar", "scalacheck-1.5-sources.jar")
def expectedSources = Set("lift-webkit-1.0-sources.jar")
lazy val check = task
{
val compilePath = names(compileClasspath.get)
val sources = names(fullClasspath(Configurations.Sources).get)
if(!same(expectedCompile, compilePath))
Some("Expected compile classpath " + expectedCompile.mkString(", ") + " differs from actual: " + compilePath.mkString(", "))
else if(!same(expectedSources, sources))
Some("Expected sources " + expectedSources.mkString(", ") + " differ from actual: " + sources.mkString(", "))
else
None
}
def names(path: Iterable[Path]): Set[String] = Set() ++ path.map(_.asFile.getName)
def same(expected: Set[String], actual: Set[String]) = (expected -- actual).isEmpty
}

View File

@ -1,2 +1,3 @@
> update
> check
> check-binaries
> show update-classifiers
> check-sources

View File

@ -0,0 +1,27 @@
import sbt._
import Keys._
object TestProject extends Build
{
lazy val projects = Seq(root)
lazy val root = Project("root", file(".")) settings(
libraryDependencies += "slinky" % "slinky" % "2.1" % "test" from "http://slinky2.googlecode.com/svn/artifacts/2.1/slinky.jar",
TaskKey("check-in-test") <<= checkClasspath(Test),
TaskKey("check-in-compile") <<= checkClasspath(Compile)
)
lazy val checkInTest = checkClasspath(testClasspath)
lazy val checkInCompile = checkClasspath(compileClasspath)
private def checkClasspath(conf: Configuration) =
fullClasspath in conf map { cp =>
try
{
val loader = ClasspathUtilities.toLoader(cp)
Class.forName("slinky.http.Application", false, loader)
}
catch
{
case _: ClassNotFoundException => error("Dependency not downloaded.")
}
}
}

View File

@ -1,2 +0,0 @@
project.name=Test
project.version=1.0

View File

@ -1,25 +0,0 @@
import sbt._
import java.net.{URL, URLClassLoader}
class TestProject(info: ProjectInfo) extends DefaultProject(info)
{
override def useMavenConfigurations = true
val direct = "slinky" % "slinky" % "2.1" % "test->default" from "http://slinky2.googlecode.com/svn/artifacts/2.1/slinky.jar"
lazy val checkInTest = checkClasspath(testClasspath)
lazy val checkInCompile = checkClasspath(compileClasspath)
private def checkClasspath(cp: PathFinder) =
task
{
try
{
Class.forName("slinky.http.Application", false, new URLClassLoader(cp.get.map(_.asURL).toList.toArray))
None
}
catch
{
case _: ClassNotFoundException =>
Some("Dependency not downloaded.")
}
}
}