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:
parent
573701e870
commit
87ea1aa955
12
build.xml
12
build.xml
|
@ -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">
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Reference in New Issue