/* NEST (New Scala Test) * Copyright 2007-2013 LAMP/EPFL */ package scala.tools.partest package nest import scala.tools.nsc.util.ClassPath import scala.tools.nsc.io.{ Path, File, Directory } import Path._ object PathSettings { import PartestDefaults.{ testRootDir, srcDirName } private def cwd = Directory.Current getOrElse sys.error("user.dir property not set") private def isPartestDir(d: Directory) = (d.name == "test") && (d / srcDirName isDirectory) private def findJar(d: Directory, name: String): Option[File] = findJar(d.files, name) private def findJar(files: Iterator[File], name: String): Option[File] = files filter (_ hasExtension "jar") find { _.name startsWith name } private def findJarOrFail(name: String, ds: Directory*): File = findJar(ds flatMap (_.files) iterator, name) getOrElse sys.error(s"'${name}.jar' not found in '${ds map (_.path) mkString ", "}'.") // Directory /test lazy val testRoot: Directory = testRootDir getOrElse { val candidates: List[Directory] = (cwd :: cwd.parents) flatMap (d => List(d, Directory(d / "test"))) candidates find isPartestDir getOrElse sys.error("Directory 'test' not found.") } // Directory /test/files or .../scaladoc def srcDir = Directory(testRoot / srcDirName toCanonical) // Directory /test/files/lib lazy val srcLibDir = Directory(srcDir / "lib") // Directory /test/files/speclib lazy val srcSpecLibDir = Directory(srcDir / "speclib") lazy val srcSpecLib: File = findJar(srcSpecLibDir, "instrumented") getOrElse { sys.error("No instrumented.jar found in %s".format(srcSpecLibDir)) } // Directory /test/files/codelib lazy val srcCodeLibDir = Directory(srcDir / "codelib") lazy val srcCodeLib: File = ( findJar(srcCodeLibDir, "code") orElse findJar(Directory(testRoot / "files" / "codelib"), "code") // work with --srcpath pending getOrElse sys.error("No code.jar found in %s".format(srcCodeLibDir)) ) lazy val instrumentationAgentLib: File = { findJar(buildPackLibDir.files, "scala-partest-javaagent") getOrElse { sys.error("No partest-javaagent jar found in '%s' or '%s'".format(buildPackLibDir, srcLibDir)) } } // Directory /build lazy val buildDir: Directory = { val bases = testRoot :: testRoot.parents // In the classic "ant" build, the relevant subdirectory is called build, // but in the postmodern "sbt" build, it is called target. Look for both. val dirs = Path.onlyDirs(bases flatMap (x => List(x / "build", x / "target"))) dirs.headOption getOrElse sys.error("Neither 'build' nor 'target' dir found under test root " + testRoot + ".") } // Directory /build/pack/lib lazy val buildPackLibDir = Directory(buildDir / "pack" / "lib") lazy val scalaCheck: File = findJar(buildPackLibDir.files ++ srcLibDir.files, "scalacheck") getOrElse { sys.error("No scalacheck jar found in '%s' or '%s'".format(buildPackLibDir, srcLibDir)) } lazy val testInterface: File = findJarOrFail("test-interface", buildPackLibDir, srcLibDir) lazy val diffUtils: File = findJar(buildPackLibDir.files, "diffutils") getOrElse sys.error(s"No diffutils.jar found in '$buildPackLibDir'.") /** The platform-specific support jar, `tools.jar`. */ lazy val platformTools: Option[File] = PathResolver.SupplementalLocations.platformTools } class PathSettings() { // def classpathAsURLs: List[URL] }