scala.tools.partest.nest.TestFile.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scala-partest Show documentation
Show all versions of scala-partest Show documentation
testing framework for the Scala compiler.
/* NEST (New Scala Test)
* Copyright 2007-2013 LAMP/EPFL
* @author Philipp Haller
*/
// $Id$
package scala.tools.partest
package nest
import java.io.{ File => JFile }
import scala.tools.nsc.Settings
import scala.tools.nsc.util.ClassPath
import scala.tools.nsc.io._
import scala.util.Properties.{ propIsSet, propOrElse, setProp }
trait TestFileCommon {
def file: JFile
def kind: String
val dir = file.toAbsolute.parent
val fileBase = file.stripExtension
val flags = dir / (fileBase + ".flags") ifFile (f => f.slurp().trim)
lazy val objectDir = dir / (fileBase + "-" + kind + ".obj") createDirectory true
def setOutDirTo = objectDir
}
abstract class TestFile(val kind: String) extends TestFileCommon {
def file: JFile
def fileManager: FileManager
def defineSettings(settings: Settings, setOutDir: Boolean) = {
settings.classpath append dir.path
if (setOutDir)
settings.outputDirs setSingleOutput setOutDirTo.path
// adding codelib.jar to the classpath
// codelib provides the possibility to override standard reify
// this shields the massive amount of reification tests from changes in the API
settings.classpath prepend PathSettings.srcCodeLib.toString
if (propIsSet("java.class.path")) setProp("java.class.path", PathSettings.srcCodeLib.toString + ";" + propOrElse("java.class.path", ""))
// have to catch bad flags somewhere
(flags forall (f => settings.processArgumentString(f)._1)) && {
settings.classpath append fileManager.CLASSPATH
true
}
}
override def toString(): String = "%s %s".format(kind, file)
}
case class PosTestFile(file: JFile, fileManager: FileManager) extends TestFile("pos")
case class NegTestFile(file: JFile, fileManager: FileManager) extends TestFile("neg")
case class RunTestFile(file: JFile, fileManager: FileManager) extends TestFile("run")
case class BuildManagerTestFile(file: JFile, fileManager: FileManager) extends TestFile("bm")
case class ScalaCheckTestFile(file: JFile, fileManager: FileManager) extends TestFile("scalacheck")
case class JvmTestFile(file: JFile, fileManager: FileManager) extends TestFile("jvm")
case class ShootoutTestFile(file: JFile, fileManager: FileManager) extends TestFile("shootout") {
override def setOutDirTo = file.parent
}
case class ScalapTestFile(file: JFile, fileManager: FileManager) extends TestFile("scalap") {
override def setOutDirTo = file.parent
}
case class SpecializedTestFile(file: JFile, fileManager: FileManager) extends TestFile("specialized") {
override def defineSettings(settings: Settings, setOutDir: Boolean): Boolean = {
super.defineSettings(settings, setOutDir) && {
// add the instrumented library version to classpath
settings.classpath prepend PathSettings.srcSpecLib.toString
// @partest maintainer: if we use a custom Scala build (specified via --classpath)
// then the classes provided by it will come earlier than instrumented.jar in the resulting classpath
// this entire classpath business needs a thorough solution
if (propIsSet("java.class.path")) setProp("java.class.path", PathSettings.srcSpecLib.toString + ";" + propOrElse("java.class.path", ""))
true
}
}
}
case class PresentationTestFile(file: JFile, fileManager: FileManager) extends TestFile("presentation")
case class AntTestFile(file: JFile, fileManager: FileManager) extends TestFile("ant")
case class InstrumentedTestFile(file: JFile, fileManager: FileManager) extends TestFile("instrumented")
© 2015 - 2025 Weber Informatics LLC | Privacy Policy