Changed partest ant task not to use reflection, instead using

the path with which scala was invoked.  No review.

git-svn-id: http://lampsvn.epfl.ch/svn-repos/scala/scala/trunk@21109 5e8d7ff9-d8ef-0310-90f0-a4852d11357a
This commit is contained in:
extempore 2010-03-08 18:46:35 +00:00
parent 573701e870
commit 87ea1aa955
3 changed files with 43 additions and 65 deletions

View File

@ -1397,10 +1397,10 @@ BOOTRAPING TEST AND TEST SUITE
<partest showlog="yes" erroronfailed="yes" javacmd="${java.home}/bin/java" <partest showlog="yes" erroronfailed="yes" javacmd="${java.home}/bin/java"
timeout="1200000" javaccmd="${javac.cmd}" timeout="1200000" javaccmd="${javac.cmd}"
scalacopts="${scalac.args.optimise}"> scalacopts="${scalac.args.optimise}">
<classpath> <compilationpath>
<path refid="pack.classpath"/> <path refid="pack.classpath"/>
<fileset dir="${partest.dir}/files/lib" includes="*.jar"/> <fileset dir="${partest.dir}/files/lib" includes="*.jar" />
</classpath> </compilationpath>
<runtests dir="${partest.dir}/files"> <runtests dir="${partest.dir}/files">
<include name="run/**/*.scala"/> <include name="run/**/*.scala"/>
<include name="jvm/**/*.scala"/> <include name="jvm/**/*.scala"/>
@ -1412,10 +1412,10 @@ BOOTRAPING TEST AND TEST SUITE
<partest showlog="yes" erroronfailed="yes" javacmd="${java.home}/bin/java" <partest showlog="yes" erroronfailed="yes" javacmd="${java.home}/bin/java"
timeout="2400000" javaccmd="${javac.cmd}" timeout="2400000" javaccmd="${javac.cmd}"
scalacopts="${scalac.args.optimise}"> scalacopts="${scalac.args.optimise}">
<classpath> <compilationpath>
<path refid="pack.classpath"/> <path refid="pack.classpath"/>
<fileset dir="${partest.dir}/files/lib" includes="*.jar"/> <fileset dir="${partest.dir}/files/lib" includes="*.jar" />
</classpath> </compilationpath>
<postests dir="${partest.dir}/files/pos" includes="*.scala"/> <postests dir="${partest.dir}/files/pos" includes="*.scala"/>
<negtests dir="${partest.dir}/files/neg" includes="*.scala"/> <negtests dir="${partest.dir}/files/neg" includes="*.scala"/>
<runtests dir="${partest.dir}/files"> <runtests dir="${partest.dir}/files">

View File

@ -14,7 +14,28 @@ import java.io.File
import org.apache.tools.ant.Task import org.apache.tools.ant.Task
import org.apache.tools.ant.types.{Path, Reference} import org.apache.tools.ant.types.{Path, Reference}
trait TaskArgs { this: Task => trait CompilationPathProperty {
this: Task =>
protected var compilationPath: Option[Path] = None
def setCompilationPath(input: Path) {
if (compilationPath.isEmpty) compilationPath = Some(input)
else compilationPath.get.append(input)
}
def createCompilationPath: Path = {
if (compilationPath.isEmpty) compilationPath = Some(new Path(getProject()))
compilationPath.get.createPath()
}
def setCompilationPathRef(input: Reference) {
createCompilationPath.setRefid(input)
}
}
trait TaskArgs extends CompilationPathProperty {
this: Task =>
def setId(input: String) { def setId(input: String) {
id = Some(input) id = Some(input)
@ -31,20 +52,6 @@ trait TaskArgs { this: Task =>
compTarget = Some(input) compTarget = Some(input)
} }
def setCompilationPath(input: Path) {
if (compilationPath.isEmpty) compilationPath = Some(input)
else compilationPath.get.append(input)
}
def createCompilationPath: Path = {
if (compilationPath.isEmpty) compilationPath = Some(new Path(getProject()))
compilationPath.get.createPath()
}
def setCompilationPathRef(input: Reference) {
createCompilationPath.setRefid(input)
}
def setSrcPath(input: Path) { def setSrcPath(input: Path) {
if (sourcePath.isEmpty) sourcePath = Some(input) if (sourcePath.isEmpty) sourcePath = Some(input)
else sourcePath.get.append(input) else sourcePath.get.append(input)
@ -80,7 +87,6 @@ trait TaskArgs { this: Task =>
protected var id: Option[String] = None protected var id: Option[String] = None
protected var params: Option[String] = None protected var params: Option[String] = None
protected var compTarget: Option[String] = None protected var compTarget: Option[String] = None
protected var compilationPath: Option[Path] = None
protected var sourcePath: Option[Path] = None protected var sourcePath: Option[Path] = None
protected var compilerPath: Option[Path] = None protected var compilerPath: Option[Path] = None
protected var destinationDir: Option[File] = None protected var destinationDir: Option[File] = None

View File

@ -18,6 +18,7 @@ import io.{ Directory }
import nsc.Settings import nsc.Settings
import nsc.util.ClassPath import nsc.util.ClassPath
import util.PathResolver import util.PathResolver
import scala.tools.ant.sabbus.CompilationPathProperty
import java.io.File import java.io.File
import java.net.URLClassLoader import java.net.URLClassLoader
@ -26,7 +27,7 @@ import java.lang.reflect.Method
import org.apache.tools.ant.Task import org.apache.tools.ant.Task
import org.apache.tools.ant.types.{Path, Reference, FileSet} import org.apache.tools.ant.types.{Path, Reference, FileSet}
class PartestTask extends Task { class PartestTask extends Task with CompilationPathProperty {
def addConfiguredPosTests(input: FileSet) { def addConfiguredPosTests(input: FileSet) {
posFiles = Some(input) posFiles = Some(input)
@ -173,24 +174,12 @@ class PartestTask extends Task {
private def getScriptFiles = getFiles(scriptFiles) private def getScriptFiles = getFiles(scriptFiles)
private def getShootoutFiles = getFiles(shootoutFiles) private def getShootoutFiles = getFiles(shootoutFiles)
private def getScalapFiles = getFiles(scalapFiles) private def getScalapFiles = getFiles(scalapFiles)
private def findMethod(target: AnyRef, name: String, types: Class[_]*): Method =
target.getClass.getMethod(name, Array(types: _*): _*)
private def invokeMethod[T](target: AnyRef, m: Method, args: AnyRef*): T =
m.invoke(target, args: _*).asInstanceOf[T]
private def invoke[T](target: AnyRef, name: String, args: Any*): T = {
val boxed = args map (_.asInstanceOf[AnyRef])
val m = findMethod(target, name, boxed map (_.getClass): _*)
invokeMethod[T](target, m, boxed: _*)
}
override def execute() { override def execute() {
if (isPartestDebug) if (isPartestDebug)
setProp("partest.debug", "true") setProp("partest.debug", "true")
val classpath = this.classpath getOrElse error("Mandatory attribute 'classpath' is not set.") val classpath = this.compilationPath getOrElse error("Mandatory attribute 'compilationPath' is not set.")
val scalaLibrary = { val scalaLibrary = {
(classpath.list map { fs => new File(fs) }) find { f => (classpath.list map { fs => new File(fs) }) find { f =>
@ -202,36 +191,19 @@ class PartestTask extends Task {
} }
} getOrElse error("Provided classpath does not contain a Scala library.") } getOrElse error("Provided classpath does not contain a Scala library.")
val classloader = this.getClass.getClassLoader val antRunner = new scala.tools.partest.nest.AntRunner
def load(name: String) = classloader.loadClass(name).newInstance().asInstanceOf[AnyRef] val antFileManager = antRunner.fileManager
val antRunner = load("scala.tools.partest.nest.AntRunner") antFileManager.showDiff = showDiff
val antFileManager = invoke[AnyRef](antRunner, "fileManager") antFileManager.showLog = showLog
val runMethod = findMethod(antRunner, "reflectiveRunTestsForFiles", classOf[Array[File]], classOf[String]) antFileManager.failed = runFailed
antFileManager.CLASSPATH = ClassPath.join(classpath.list: _*)
antFileManager.LATEST_LIB = scalaLibrary.getAbsolutePath
def runTestsForFiles(kindFiles: Array[File], kind: String) = javacmd foreach (x => antFileManager.JAVACMD = x.getAbsolutePath)
invokeMethod[Map[String, Int]](antRunner, runMethod, kindFiles, kind) javaccmd foreach (x => antFileManager.JAVAC_CMD = x.getAbsolutePath)
scalacOpts foreach (antFileManager.SCALAC_OPTS = _)
def setFileManagerBooleanProperty(name: String, value: Boolean) { timeout foreach (antFileManager.timeout = _)
val setMethod = findMethod(antFileManager, name + "_$eq", classOf[Boolean])
invokeMethod[Unit](antFileManager, setMethod, Boolean.box(value))
}
def setFileManagerStringProperty(name: String, value: String) {
val setMethod = findMethod(antFileManager, name + "_$eq", classOf[String])
invokeMethod[Unit](antFileManager, setMethod, value)
}
setFileManagerBooleanProperty("showDiff", showDiff)
setFileManagerBooleanProperty("showLog", showLog)
setFileManagerBooleanProperty("failed", runFailed)
setFileManagerStringProperty("CLASSPATH", ClassPath.join(classpath.list: _*))
setFileManagerStringProperty("LATEST_LIB", scalaLibrary.getAbsolutePath)
javacmd foreach (x => setFileManagerStringProperty("JAVACMD", x.getAbsolutePath))
javaccmd foreach (x => setFileManagerStringProperty("JAVAC_CMD", x.getAbsolutePath))
scalacOpts foreach (x => setFileManagerStringProperty("SCALAC_OPTS", x))
timeout foreach (x => setFileManagerStringProperty("timeout", x))
type TFSet = (Array[File], String, String) type TFSet = (Array[File], String, String)
val testFileSets = List( val testFileSets = List(
@ -252,7 +224,7 @@ class PartestTask extends Task {
if (files.isEmpty) (0, 0, List()) if (files.isEmpty) (0, 0, List())
else { else {
log(msg) log(msg)
val results: Iterable[(String, Int)] = runTestsForFiles(files, name) val results: Iterable[(String, Int)] = antRunner.reflectiveRunTestsForFiles(files, name)
val (succs, fails) = resultsToStatistics(results) val (succs, fails) = resultsToStatistics(results)
val failed: Iterable[String] = results partialMap { val failed: Iterable[String] = results partialMap {