Merge pull request #1336 from sbt/wip/compile-with-2.11

Bump expected 2.11 module versions so we can compile with 2.11
This commit is contained in:
eugene yokota 2014-05-15 09:13:36 -04:00
commit f402f9ac9e
11 changed files with 60 additions and 29 deletions

View File

@ -17,8 +17,8 @@ env:
- SCRIPTED_TEST="scripted source-dependencies/*2of3" - SCRIPTED_TEST="scripted source-dependencies/*2of3"
- SCRIPTED_TEST="scripted source-dependencies/*3of3" - SCRIPTED_TEST="scripted source-dependencies/*3of3"
- SCRIPTED_TEST="scripted tests/*" - SCRIPTED_TEST="scripted tests/*"
- SCRIPTED_TEST="all launcher/test main-settings/test main/test ivy/test logic/test completion/test" - SCRIPTED_TEST="safeUnitTests"
- SCRIPTED_TEST="all actions/test classpath/test collections/test incremental-compiler/test logging/test run/test task-system/test" - SCRIPTED_TEST="checkBuildScala211"
# TODO - we'd like to actually test everything, but the process library has a deadlock right now # TODO - we'd like to actually test everything, but the process library has a deadlock right now
jdk: jdk:
- openjdk6 - openjdk6

View File

@ -165,14 +165,14 @@ class NameHashingSpecification extends Specification {
} }
private def assertNameHashEqualForRegularName(name: String, nameHashes1: _internalOnly_NameHashes, private def assertNameHashEqualForRegularName(name: String, nameHashes1: _internalOnly_NameHashes,
nameHashes2: _internalOnly_NameHashes): Unit = { nameHashes2: _internalOnly_NameHashes) = {
val nameHash1 = nameHashForRegularName(nameHashes1, name) val nameHash1 = nameHashForRegularName(nameHashes1, name)
val nameHash2 = nameHashForRegularName(nameHashes1, name) val nameHash2 = nameHashForRegularName(nameHashes1, name)
nameHash1 === nameHash2 nameHash1 === nameHash2
} }
private def assertNameHashNotEqualForRegularName(name: String, nameHashes1: _internalOnly_NameHashes, private def assertNameHashNotEqualForRegularName(name: String, nameHashes1: _internalOnly_NameHashes,
nameHashes2: _internalOnly_NameHashes): Unit = { nameHashes2: _internalOnly_NameHashes) = {
val nameHash1 = nameHashForRegularName(nameHashes1, name) val nameHash1 = nameHashForRegularName(nameHashes1, name)
val nameHash2 = nameHashForRegularName(nameHashes2, name) val nameHash2 = nameHashForRegularName(nameHashes2, name)
nameHash1 !=== nameHash2 nameHash1 !=== nameHash2

View File

@ -35,13 +35,13 @@ object ComponentManagerTest extends Specification {
"return the files for a multi-file component" in { "return the files for a multi-file component" in {
withManager { manager => withManager { manager =>
val hashes = defineFiles(manager, TestID, "a", "b") val hashes = defineFiles(manager, TestID, "a", "b")
checksum(manager.files(TestID)(Fail)) must haveTheSameElementsAs(hashes) checksum(manager.files(TestID)(Fail)) must containTheSameElementsAs(hashes)
} }
} }
"return the files for a single-file component" in { "return the files for a single-file component" in {
withManager { manager => withManager { manager =>
val hashes = defineFiles(manager, TestID, "a") val hashes = defineFiles(manager, TestID, "a")
checksum(manager.files(TestID)(Fail)) must haveTheSameElementsAs(hashes) checksum(manager.files(TestID)(Fail)) must containTheSameElementsAs(hashes)
} }
} }
"throw an exception if 'files' is called for a non-existing component" in { "throw an exception if 'files' is called for a non-existing component" in {

View File

@ -51,8 +51,12 @@ object LocksTest extends Properties("Locks") {
(true /: forkWait(n)(impl))(_ && _) (true /: forkWait(n)(impl))(_ && _)
private def forkWait(n: Int)(impl: Int => Boolean): Iterable[Boolean] = private def forkWait(n: Int)(impl: Int => Boolean): Iterable[Boolean] =
{ {
import scala.concurrent.ops.future import scala.concurrent.Future
val futures = (0 until n).map { i => future { impl(i) } } import scala.concurrent.ExecutionContext.Implicits.global
futures.toList.map(_()) import scala.concurrent.Await
import scala.concurrent.duration.Duration.Inf
// TODO - Don't wait forever...
val futures = (0 until n).map { i => Future { impl(i) } }
futures.toList.map(f => Await.result(f, Inf))
} }
} }

View File

@ -59,8 +59,8 @@ object ScalaProviderTest extends Specification {
testResources.foreach(resource => touch(new File(resourceDirectory, resource.replace('/', File.separatorChar)))) testResources.foreach(resource => touch(new File(resourceDirectory, resource.replace('/', File.separatorChar))))
Array(resourceDirectory) Array(resourceDirectory)
} }
private def checkScalaLoader(version: String): Unit = withLauncher(checkLauncher(version, mapScalaVersion(version))) private def checkScalaLoader(version: String) = withLauncher(checkLauncher(version, mapScalaVersion(version)))
private def checkLauncher(version: String, versionValue: String)(launcher: Launcher): Unit = private def checkLauncher(version: String, versionValue: String)(launcher: Launcher) =
{ {
val provider = launcher.getScala(version) val provider = launcher.getScala(version)
val loader = provider.loader val loader = provider.loader
@ -68,7 +68,7 @@ object ScalaProviderTest extends Specification {
tryScala(loader) tryScala(loader)
getScalaVersion(loader) must beEqualTo(versionValue) getScalaVersion(loader) must beEqualTo(versionValue)
} }
private def tryScala(loader: ClassLoader): Unit = Class.forName("scala.Product", false, loader).getClassLoader must be(loader) private def tryScala(loader: ClassLoader) = Class.forName("scala.Product", false, loader).getClassLoader must be(loader)
} }
object LaunchTest { object LaunchTest {
def testApp(main: String): Application = testApp(main, Array[File]()) def testApp(main: String): Application = testApp(main, Array[File]())

View File

@ -66,8 +66,8 @@ val p = {
property("explicit import") = forAll(testImport("import math.abs" :: Nil)) property("explicit import") = forAll(testImport("import math.abs" :: Nil))
property("wildcard import") = forAll(testImport("import math._" :: Nil)) property("wildcard import") = forAll(testImport("import math._" :: Nil))
property("comma-separated imports") = forAll(testImport("import util._, math._, xml._" :: Nil)) property("comma-separated imports") = forAll(testImport("import annotation._, math._, meta._" :: Nil))
property("multiple imports") = forAll(testImport("import util._" :: "import math._" :: "import xml._" :: Nil)) property("multiple imports") = forAll(testImport("import annotation._" :: "import math._" :: "import meta._" :: Nil))
private[this] def testImport(imports: Seq[String]): Int => Prop = i => private[this] def testImport(imports: Seq[String]): Int => Prop = i =>
value(eval.eval("abs(" + i + ")", new EvalImports(imports.zipWithIndex, "imp"))) == math.abs(i) value(eval.eval("abs(" + i + ")", new EvalImports(imports.zipWithIndex, "imp"))) == math.abs(i)

View File

@ -106,17 +106,30 @@ object ParseKey extends Properties("Key parser test") {
f(parsed) f(parsed)
} }
def genStructure(implicit genEnv: Gen[Env]): Gen[Structure] = // Here we're shadowing the in-scope implicit called `mkEnv` for this method
// so that it will use the passed-in `Gen` rather than the one imported
// from TestBuild.
def genStructure(implicit mkEnv: Gen[Env]): Gen[Structure] =
structureGenF { (scopes: Seq[Scope], env: Env, current: ProjectRef) => structureGenF { (scopes: Seq[Scope], env: Env, current: ProjectRef) =>
val settings = for (scope <- scopes; t <- env.tasks) yield Def.setting(ScopedKey(scope, t.key), Def.value("")) val settings =
for {
scope <- scopes
t <- env.tasks
} yield Def.setting(ScopedKey(scope, t.key), Def.value(""))
TestBuild.structure(env, settings, current) TestBuild.structure(env, settings, current)
} }
def structureGenF(f: (Seq[Scope], Env, ProjectRef) => Structure)(implicit genEnv: Gen[Env]): Gen[Structure] = // Here we're shadowing the in-scope implicit called `mkEnv` for this method
// so that it will use the passed-in `Gen` rather than the one imported
// from TestBuild.
def structureGenF(f: (Seq[Scope], Env, ProjectRef) => Structure)(implicit mkEnv: Gen[Env]): Gen[Structure] =
structureGen((s, e, p) => Gen.value(f(s, e, p))) structureGen((s, e, p) => Gen.value(f(s, e, p)))
def structureGen(f: (Seq[Scope], Env, ProjectRef) => Gen[Structure])(implicit genEnv: Gen[Env]): Gen[Structure] = // Here we're shadowing the in-scope implicit called `mkEnv` for this method
// so that it will use the passed-in `Gen` rather than the one imported
// from TestBuild.
def structureGen(f: (Seq[Scope], Env, ProjectRef) => Gen[Structure])(implicit mkEnv: Gen[Env]): Gen[Structure] =
for { for {
env <- genEnv env <- mkEnv
loadFactor <- choose(0.0, 1.0) loadFactor <- choose(0.0, 1.0)
scopes <- pickN(loadFactor, env.allFullScopes) scopes <- pickN(loadFactor, env.allFullScopes)
current <- oneOf(env.allProjects.unzip._1) current <- oneOf(env.allProjects.unzip._1)

View File

@ -23,7 +23,20 @@ object Sbt extends Build {
concurrentRestrictions in Global += Util.testExclusiveRestriction, concurrentRestrictions in Global += Util.testExclusiveRestriction,
testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"), testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"),
javacOptions in compile ++= Seq("-target", "6", "-source", "6", "-Xlint", "-Xlint:-serial"), javacOptions in compile ++= Seq("-target", "6", "-source", "6", "-Xlint", "-Xlint:-serial"),
incOptions := incOptions.value.withNameHashing(true) incOptions := incOptions.value.withNameHashing(true),
commands += Command.command("checkBuildScala211") { state =>
"""set scalaVersion in ThisBuild := "2.11.0" """ ::
"set Util.includeTestDependencies in ThisBuild := true" ::
// First compile everything before attempting to test
"all compile test:compile" ::
// Now run known working tests.
"safeUnitTests" ::
state
},
commands += Command.command("safeUnitTests") { state =>
"all launcher/test main-settings/test main/test ivy/test logic/test completion/test actions/test classpath/test collections/test incremental-compiler/test logging/test run/test task-system/test" ::
state
}
) )
lazy val myProvided = config("provided") intransitive; lazy val myProvided = config("provided") intransitive;

View File

@ -31,7 +31,8 @@ object Util {
) )
def commonSettings(nameString: String) = Seq( def commonSettings(nameString: String) = Seq(
crossVersion in update <<= (crossVersion, nightly211) { (cv, n) => if (n) CrossVersion.full else cv }, crossVersion in update <<= (crossVersion, nightly211) { (cv, n) => if (n) CrossVersion.full else cv },
name := nameString name := nameString,
resolvers += Resolver.typesafeIvyRepo("releases")
) )
def minProject(path: File, nameString: String) = Project(normalize(nameString), path) settings (commonSettings(nameString) ++ publishPomSettings: _*) def minProject(path: File, nameString: String) = Project(normalize(nameString), path) settings (commonSettings(nameString) ++ publishPomSettings: _*)
def baseProject(path: File, nameString: String) = minProject(path, nameString) settings (base: _*) def baseProject(path: File, nameString: String) = minProject(path, nameString) settings (base: _*)
@ -49,8 +50,8 @@ object Util {
def testDependencies = libraryDependencies <++= includeTestDependencies { incl => def testDependencies = libraryDependencies <++= includeTestDependencies { incl =>
if (incl) Seq( if (incl) Seq(
"org.scalacheck" %% "scalacheck" % "1.11.1" % "test", "org.scalacheck" %% "scalacheck" % "1.11.4" % "test",
"org.specs2" %% "specs2" % "1.12.3" % "test", "org.specs2" %% "specs2" % "2.3.11" % "test",
"junit" % "junit" % "4.11" % "test" "junit" % "junit" % "4.11" % "test"
) )
else Seq() else Seq()
@ -169,7 +170,7 @@ object Common {
lazy val ivy = lib("org.scala-sbt.ivy" % "ivy" % "2.4.0-sbt-d6fca11d63402c92e4167cdf2da91a660d043392") lazy val ivy = lib("org.scala-sbt.ivy" % "ivy" % "2.4.0-sbt-d6fca11d63402c92e4167cdf2da91a660d043392")
lazy val httpclient = lib("commons-httpclient" % "commons-httpclient" % "3.1") lazy val httpclient = lib("commons-httpclient" % "commons-httpclient" % "3.1")
lazy val jsch = lib("com.jcraft" % "jsch" % "0.1.46" intransitive ()) lazy val jsch = lib("com.jcraft" % "jsch" % "0.1.46" intransitive ())
lazy val sbinary = libraryDependencies <+= Util.nightly211(n => "org.scala-tools.sbinary" % "sbinary" % "0.4.2" cross (if (n) CrossVersion.full else CrossVersion.binary)) lazy val sbinary = libraryDependencies += "org.scala-tools.sbinary" %% "sbinary" % "0.4.2"
lazy val scalaCompiler = libraryDependencies <+= scalaVersion(sv => "org.scala-lang" % "scala-compiler" % sv) lazy val scalaCompiler = libraryDependencies <+= scalaVersion(sv => "org.scala-lang" % "scala-compiler" % sv)
lazy val testInterface = lib("org.scala-sbt" % "test-interface" % "1.0") lazy val testInterface = lib("org.scala-sbt" % "test-interface" % "1.0")
private def scala211Module(name: String, moduleVersion: String) = private def scala211Module(name: String, moduleVersion: String) =
@ -177,8 +178,8 @@ object Common {
if (scalaVersion startsWith "2.11.") ("org.scala-lang.modules" %% name % moduleVersion) :: Nil if (scalaVersion startsWith "2.11.") ("org.scala-lang.modules" %% name % moduleVersion) :: Nil
else Nil else Nil
) )
lazy val scalaXml = scala211Module("scala-xml", "1.0.0-RC7") lazy val scalaXml = scala211Module("scala-xml", "1.0.1")
lazy val scalaParsers = scala211Module("scala-parser-combinators", "1.0.0-RC5") lazy val scalaParsers = scala211Module("scala-parser-combinators", "1.0.1")
} }
object Licensed { object Licensed {
lazy val notice = SettingKey[File]("notice") lazy val notice = SettingKey[File]("notice")

View File

@ -26,7 +26,7 @@ object CheckStash extends Specification {
} }
} }
def checkRestore(seq: Seq[File]) { def checkRestore(seq: Seq[File]) = {
allCorrect(seq) allCorrect(seq)
stash0(seq, throw new TestRuntimeException) must beFalse stash0(seq, throw new TestRuntimeException) must beFalse
@ -38,7 +38,7 @@ object CheckStash extends Specification {
stash0(seq, throw new TestError) must beFalse stash0(seq, throw new TestError) must beFalse
noneExist(seq) noneExist(seq)
} }
def checkMove(seq: Seq[File]) { def checkMove(seq: Seq[File]) = {
allCorrect(seq) allCorrect(seq)
stash0(seq, ()) must beTrue stash0(seq, ()) must beTrue
noneExist(seq) noneExist(seq)

View File

@ -128,7 +128,7 @@ object Escape {
def pad(s: String, minLength: Int, extra: Char) = def pad(s: String, minLength: Int, extra: Char) =
{ {
val diff = minLength - s.length val diff = minLength - s.length
if (diff <= 0) s else List.make(diff, extra).mkString("", "", s) if (diff <= 0) s else List.fill(diff)(extra).mkString("", "", s)
} }
/** Replaces a \n character at the end of a string `s` with `nl`.*/ /** Replaces a \n character at the end of a string `s` with `nl`.*/
def newline(s: String, nl: String): String = def newline(s: String, nl: String): String =