From 0e766517047ce861f0064f5ebd1745d9b3e0ba2a Mon Sep 17 00:00:00 2001 From: Philipp Haller Date: Tue, 9 Sep 2008 14:51:28 +0000 Subject: Added support for ScalaCheck tests. --- .../scala/tools/partest/nest/CompileManager.scala | 2 ++ .../tools/partest/nest/ConsoleFileManager.scala | 2 ++ .../scala/tools/partest/nest/ConsoleRunner.scala | 8 ++++- .../scala/tools/partest/nest/FileManager.scala | 1 + .../scala/tools/partest/nest/TestFile.scala | 7 ++++ src/partest/scala/tools/partest/nest/Worker.scala | 37 ++++++++++++++++++++++ 6 files changed, 56 insertions(+), 1 deletion(-) (limited to 'src/partest') diff --git a/src/partest/scala/tools/partest/nest/CompileManager.scala b/src/partest/scala/tools/partest/nest/CompileManager.scala index 89a6b87802..29981bcac4 100644 --- a/src/partest/scala/tools/partest/nest/CompileManager.scala +++ b/src/partest/scala/tools/partest/nest/CompileManager.scala @@ -78,6 +78,8 @@ 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 "scalacheck" => + ScalaCheckTestFile(files(0), fileManager, out.isEmpty) } test.defineSettings(testSettings) out match { diff --git a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala index 16493b8f63..224bbc5aa9 100644 --- a/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala +++ b/src/partest/scala/tools/partest/nest/ConsoleFileManager.scala @@ -86,6 +86,8 @@ else } val TESTROOT = testRootFile.getAbsolutePath + LIB_DIR = (new File(testRootFile.getParentFile, "lib")).getCanonicalFile.getAbsolutePath + CLASSPATH = CLASSPATH + File.pathSeparator + { val libs = new File(TESTROOT, "files/lib") // add all jars in libs diff --git a/src/partest/scala/tools/partest/nest/ConsoleRunner.scala b/src/partest/scala/tools/partest/nest/ConsoleRunner.scala index b43f430f4a..5f89e029a4 100644 --- a/src/partest/scala/tools/partest/nest/ConsoleRunner.scala +++ b/src/partest/scala/tools/partest/nest/ConsoleRunner.scala @@ -25,6 +25,7 @@ class ConsoleRunner extends DirectRunner with RunnerUtils { private var resCheck = false private var shootoutCheck = false private var scriptCheck = false + private var scalacheckCheck = false private var runAll = false @@ -43,6 +44,7 @@ class ConsoleRunner extends DirectRunner with RunnerUtils { case "--res" => true case "--shootout" => true case "--script" => true + case "--scalacheck" => true case _ => false } @@ -95,6 +97,7 @@ class ConsoleRunner extends DirectRunner with RunnerUtils { case "--res" => resCheck = true case "--shootout" => shootoutCheck = true case "--script" => scriptCheck = true + case "--scalacheck" => scalacheckCheck = true case "--verbose" => NestUI._verbose = true case "--show-diff" => fileManager.showDiff = true @@ -216,6 +219,7 @@ class ConsoleRunner extends DirectRunner with RunnerUtils { else short match { case "sho" => "shootout" case "scr" => "script" + case "sca" => "scalacheck" } } } @@ -240,6 +244,7 @@ class ConsoleRunner extends DirectRunner with RunnerUtils { resCheck = true shootoutCheck = true scriptCheck = true + scalacheckCheck = true } val results = List(runTestsFiles, runTests("pos", posCheck, "Testing compiler (on files whose compilation should succeed)"), @@ -249,7 +254,8 @@ class ConsoleRunner extends DirectRunner with RunnerUtils { runTests("jvm5", jvm5Check, "Testing JVM backend"), runTests("res", resCheck, "Testing resident compiler"), runTests("shootout", shootoutCheck, "Testing shootout tests"), - runTests("script", scriptCheck, "Testing script tests")) + runTests("script", scriptCheck, "Testing script tests"), + runTests("scalacheck", scalacheckCheck, "Testing ScalaCheck tests")) results reduceLeft { (p: (Int, Int), q: (Int, Int)) => (p._1+q._1, p._2+q._2) } } diff --git a/src/partest/scala/tools/partest/nest/FileManager.scala b/src/partest/scala/tools/partest/nest/FileManager.scala index a780e8050a..d58616c6c8 100644 --- a/src/partest/scala/tools/partest/nest/FileManager.scala +++ b/src/partest/scala/tools/partest/nest/FileManager.scala @@ -53,6 +53,7 @@ trait FileManager { var CLASSPATH: String var LATEST_LIB: String + var LIB_DIR: String = "" var showDiff = false var showLog = false diff --git a/src/partest/scala/tools/partest/nest/TestFile.scala b/src/partest/scala/tools/partest/nest/TestFile.scala index 6cc574c1b6..f577c79705 100644 --- a/src/partest/scala/tools/partest/nest/TestFile.scala +++ b/src/partest/scala/tools/partest/nest/TestFile.scala @@ -71,6 +71,13 @@ case class RunTestFile(override val file: File, override val fileManager: FileMa } } +case class ScalaCheckTestFile(override val file: File, override val fileManager: FileManager, createOutDir: Boolean) extends TestFile("scalacheck", file, fileManager, createOutDir) { + override def defineSettings(settings: Settings) { + baseSettings(settings) + settings.classpath.value = fileManager.CLASSPATH + } +} + case class JvmTestFile(override val file: File, override val fileManager: FileManager, createOutDir: Boolean) extends TestFile("jvm", file, fileManager, createOutDir) { override def defineSettings(settings: Settings) { baseSettings(settings) diff --git a/src/partest/scala/tools/partest/nest/Worker.scala b/src/partest/scala/tools/partest/nest/Worker.scala index 25c68bfa48..d0a11b0654 100644 --- a/src/partest/scala/tools/partest/nest/Worker.scala +++ b/src/partest/scala/tools/partest/nest/Worker.scala @@ -410,6 +410,43 @@ class Worker(val fileManager: FileManager) extends Actor { } kind match { + case "scalacheck" => for (file <- files) + runInContext(file, kind, (logFile: File, outDir: File) => { + if (file.isDirectory) { + compileFilesIn(file, kind, logFile, outDir) + } else if (!compileMgr.shouldCompile(List(file), kind, logFile)) { + NestUI.verbose("compilation of "+file+" failed\n") + succeeded = false + } + if (succeeded) { + NestUI.verbose("compilation of "+file+" succeeded\n") + + val libs = new File(fileManager.LIB_DIR) + val urls = List((new File(libs, "ScalaCheck.jar")).toURL, + (new File(libs, "ScalaCheckHelper.jar")).toURL) + val outURL = outDir.getCanonicalFile.toURL + val urlArr = (outURL :: urls).toArray + NestUI.verbose("loading classes from:") + urlArr foreach {url => NestUI.verbose(url.toString)} + val loader = new java.net.URLClassLoader(urlArr, fileManager.getClass.getClassLoader) + + (try { + Some(Class.forName("ScalaCheckHelper", true, loader)) + } catch { + case se: SecurityException => None + case cnfe: ClassNotFoundException => None + }) match { + case None => + NestUI.verbose("cannot find ScalaCheckHelper class") + succeeded = false + case Some(clazz) => + val method = clazz.getMethod("passed", Array(classOf[File], classOf[Array[URL]]): _*) + val res = method.invoke(null, Array(logFile, urlArr): _*).asInstanceOf[String] + NestUI.verbose("ScalaCheck result: "+res) + succeeded = res.equals("ok") + } + } + }) case "pos" => for (file <- files) runInContext(file, kind, (logFile: File, outDir: File) => { if (file.isDirectory) { -- cgit v1.2.3