summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/partest/scala/tools/partest/PartestTask.scala13
-rw-r--r--src/partest/scala/tools/partest/nest/CompileManager.scala1
-rw-r--r--src/partest/scala/tools/partest/nest/TestFile.scala9
-rw-r--r--src/partest/scala/tools/partest/nest/Worker.scala63
-rw-r--r--src/scala-lang.iml16
5 files changed, 87 insertions, 15 deletions
diff --git a/src/partest/scala/tools/partest/PartestTask.scala b/src/partest/scala/tools/partest/PartestTask.scala
index bda1f5b679..90073db13d 100644
--- a/src/partest/scala/tools/partest/PartestTask.scala
+++ b/src/partest/scala/tools/partest/PartestTask.scala
@@ -56,6 +56,10 @@ class PartestTask extends Task {
shootoutFiles = Some(input)
}
+ def addConfiguredScalapTests(input: FileSet) {
+ scalapFiles = Some(input)
+ }
+
def setClasspath(input: Path) {
if (classpath.isEmpty)
classpath = Some(input)
@@ -119,6 +123,7 @@ class PartestTask extends Task {
private var residentFiles: Option[FileSet] = None
private var scriptFiles: Option[FileSet] = None
private var shootoutFiles: Option[FileSet] = None
+ private var scalapFiles: Option[FileSet] = None
private var errorOnFailed: Boolean = false
private var scalacOpts: Option[String] = None
private var timeout: Option[String] = None
@@ -158,6 +163,7 @@ class PartestTask extends Task {
private def getResidentFiles = getFiles(residentFiles)
private def getScriptFiles = getFiles(scriptFiles)
private def getShootoutFiles = getFiles(shootoutFiles)
+ private def getScalapFiles = getFiles(scalapFiles)
override def execute() {
if (debug)
@@ -285,6 +291,13 @@ class PartestTask extends Task {
allFailures += failures
}
+ if (getScalapFiles.size > 0) {
+ log("Running scalap tests")
+ val (successes, failures) = runTestsForFiles(getScalapFiles, "scalap")
+ allSucesses += successes
+ allFailures += failures
+ }
+
if ((getPosFiles.size + getNegFiles.size + getRunFiles.size + getResidentFiles.size + getScriptFiles.size + getShootoutFiles.size) == 0)
log("There where no tests to run.")
else if (allFailures == 0)
diff --git a/src/partest/scala/tools/partest/nest/CompileManager.scala b/src/partest/scala/tools/partest/nest/CompileManager.scala
index fe175b2b7e..0f21efc346 100644
--- a/src/partest/scala/tools/partest/nest/CompileManager.scala
+++ b/src/partest/scala/tools/partest/nest/CompileManager.scala
@@ -105,6 +105,7 @@ class DirectCompiler(val fileManager: FileManager) extends SimpleCompiler {
case "jvm" => JvmTestFile(files(0), fileManager, out.isEmpty)
case "jvm5" => Jvm5TestFile(files(0), fileManager, out.isEmpty)
case "shootout" => ShootoutTestFile(files(0), fileManager, out.isEmpty)
+ case "scalap" => ScalapTestFile(files(0), fileManager, out.isEmpty)
case "scalacheck" =>
ScalaCheckTestFile(files(0), fileManager, out.isEmpty)
}
diff --git a/src/partest/scala/tools/partest/nest/TestFile.scala b/src/partest/scala/tools/partest/nest/TestFile.scala
index 07a96956dd..3d83abe176 100644
--- a/src/partest/scala/tools/partest/nest/TestFile.scala
+++ b/src/partest/scala/tools/partest/nest/TestFile.scala
@@ -106,3 +106,12 @@ case class ShootoutTestFile(override val file: File, override val fileManager: F
settings.outdir.value = file.getParent
}
}
+
+case class ScalapTestFile(override val file: File, override val fileManager: FileManager, createOutDir: Boolean) extends TestFile("scalap", file, fileManager, createOutDir) {
+ override def defineSettings(settings: Settings) {
+ baseSettings(settings)
+ settings.classpath.value = settings.classpath.value+
+ File.pathSeparator+fileManager.CLASSPATH
+ settings.outdir.value = file.getParent
+ }
+}
diff --git a/src/partest/scala/tools/partest/nest/Worker.scala b/src/partest/scala/tools/partest/nest/Worker.scala
index b1e83d6808..3f449b3827 100644
--- a/src/partest/scala/tools/partest/nest/Worker.scala
+++ b/src/partest/scala/tools/partest/nest/Worker.scala
@@ -7,17 +7,15 @@
package scala.tools.partest.nest
-import java.io.{File, FileInputStream, FileOutputStream, PrintStream,
- PrintWriter, StringWriter, FileWriter, InputStreamReader,
- FileReader, OutputStreamWriter, BufferedReader}
-
-import java.net.URL
+import java.io._
+import java.net.{URLClassLoader, URL}
import java.util.{Timer, TimerTask}
import scala.tools.nsc.{ObjectRunner, GenericRunnerCommand}
import scala.actors.{Actor, Exit, TIMEOUT}
import scala.actors.Actor._
+import scalap.scalax.rules.scalasig.{ByteCode, ClassFileParser, ScalaSigAttributeParsers}
case class RunTests(kind: String, files: List[File])
case class Results(succ: Int, fail: Int, logs: List[LogFile], outdirs: List[File])
@@ -741,6 +739,61 @@ class Worker(val fileManager: FileManager) extends Actor {
LogContext(logFile, None)
}
+ case "scalap" => {
+
+ def decompileFile(clazz: Class[_]) = {
+ val byteCode = ByteCode.forClass(clazz)
+ val classFile = ClassFileParser.parse(byteCode)
+ val Some(sig) = classFile.attribute("ScalaSig").map(_.byteCode).map(ScalaSigAttributeParsers.parse)
+ import scala.tools.scalap.Main._
+ parseScalaSignature(sig)
+ }
+
+ runInContext(file, kind, (logFile: File, outDir: File) => {
+ val sourceDir = file.getParentFile
+ val sourceDirName = sourceDir.getName
+
+ // 1. Find file with result text
+ val results = sourceDir.listFiles(new FilenameFilter {
+ def accept(dir: File, name: String) = name == "result.test"
+ })
+
+ if (results.length != 1) {
+ NestUI.verbose("Result file not found in directory " + sourceDirName + " \n")
+ } else {
+ val resFile = results(0)
+ // 2. Compile source file
+ if (!compileMgr.shouldCompile(outDir, List(file), kind, logFile)) {
+ succeeded = false
+ } else {
+
+ // 3. Decompile file and compare results
+ val className = sourceDirName.capitalize
+ val url = outDir.toURI.toURL
+ val loader = new URLClassLoader(Array(url), getClass.getClassLoader)
+ val clazz = loader.loadClass(className)
+
+ val result = decompileFile(clazz)
+
+ try {
+ val fstream = new FileWriter(logFile);
+ val out = new BufferedWriter(fstream);
+ out.write(result)
+ out.close();
+ } catch {
+ case e: IOException => NestUI.verbose(e.getMessage()); succeeded = false
+ }
+
+ val diff = fileManager.compareFiles(logFile, resFile)
+ if (!diff.equals("")) {
+ NestUI.verbose("output differs from log file\n")
+ succeeded = false
+ }
+ }
+ }
+ })
+ }
+
case "script" => {
val osName = System.getProperty("os.name", "")
// when option "--failed" is provided
diff --git a/src/scala-lang.iml b/src/scala-lang.iml
index 365c7cd7f7..d74dfe8334 100644
--- a/src/scala-lang.iml
+++ b/src/scala-lang.iml
@@ -7,6 +7,9 @@
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
+ <content url="file://$MODULE_DIR$/../META-INF" />
+ <content url="file://$MODULE_DIR$/../docs" />
+ <content url="file://$MODULE_DIR$/../lib" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/actors" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/compiler" isTestSource="false" />
@@ -22,19 +25,12 @@
<excludeFolder url="file://$MODULE_DIR$/jvm14-library" />
<excludeFolder url="file://$MODULE_DIR$/mono" />
</content>
- <orderEntry type="library" name="lib1" level="project" />
+ <content url="file://$MODULE_DIR$/../test" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="ant" level="project" />
- <orderEntry type="module-library">
- <library name="my_ant">
- <CLASSES>
- <root url="jar://$MODULE_DIR$/../../ant/ant.jar!/" />
- </CLASSES>
- <JAVADOC />
- <SOURCES />
- </library>
- </orderEntry>
+ <orderEntry type="library" name="lib1" level="project" />
+ <orderEntry type="library" name="testlib" level="project" />
</component>
</module>