scala.tools.partest.nest.FileManager.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, FilenameFilter, IOException, StringWriter,
FileInputStream, FileOutputStream, BufferedReader,
FileReader, PrintWriter, FileWriter}
import java.net.URI
import scala.tools.nsc.io.{ Path, Directory, File => SFile }
import scala.sys.process._
import scala.collection.mutable
trait FileUtil {
/**
* Compares two files using a Java implementation of the GNU diff
* available at http://www.bmsi.com/java/#diff.
*
* @param f1 the first file to be compared
* @param f2 the second file to be compared
* @return the text difference between the compared files
*/
def compareFiles(f1: File, f2: File): String = {
val diffWriter = new StringWriter
val args = Array(f1.getAbsolutePath(), f2.getAbsolutePath())
DiffPrint.doDiff(args, diffWriter)
val res = diffWriter.toString
if (res startsWith "No") "" else res
}
def compareContents(lines1: Seq[String], lines2: Seq[String]): String = {
val xs1 = lines1.toArray[AnyRef]
val xs2 = lines2.toArray[AnyRef]
val diff = new Diff(xs1, xs2)
val change = diff.diff_2(false)
val writer = new StringWriter
val p = new DiffPrint.NormalPrint(xs1, xs2, writer)
p.print_script(change)
val res = writer.toString
if (res startsWith "No ") ""
else res
}
}
object FileUtil extends FileUtil { }
trait FileManager extends FileUtil {
def testRootDir: Directory
def testRootPath: String
var JAVACMD: String
var JAVAC_CMD: String
var CLASSPATH: String
var LATEST_LIB: String
var LATEST_REFLECT: String
var LATEST_COMP: String
var LATEST_PARTEST: String
var LATEST_ACTORS: String
var showDiff = false
var updateCheck = false
var showLog = false
var failed = false
var SCALAC_OPTS = PartestDefaults.scalacOpts.split(' ').toSeq
var JAVA_OPTS = PartestDefaults.javaOpts
var timeout = PartestDefaults.timeout
// how can 15 minutes not be enough? What are you doing, run/lisp.scala?
// You complete in 11 seconds on my machine.
var oneTestTimeout = 60 * 60 * 1000
/** Only when --debug is given. */
lazy val testTimings = new mutable.HashMap[String, Long]
def recordTestTiming(name: String, milliseconds: Long) =
synchronized { testTimings(name) = milliseconds }
def showTestTimings() {
testTimings.toList sortBy (-_._2) foreach { case (k, v) => println("%s: %s".format(k, v)) }
}
def getLogFile(dir: File, fileBase: String, kind: String): File =
new File(dir, fileBase + "-" + kind + ".log")
def getLogFile(file: File, kind: String): File = {
val dir = file.getParentFile
val fileBase = basename(file.getName)
getLogFile(dir, fileBase, kind)
}
def logFileExists(file: File, kind: String) =
getLogFile(file, kind).canRead
def overwriteFileWith(dest: File, file: File) =
dest.isFile && copyFile(file, dest)
def copyFile(from: File, dest: File): Boolean = {
if (from.isDirectory) {
assert(dest.isDirectory, "cannot copy directory to file")
val subDir:Directory = Path(dest) / Directory(from.getName)
subDir.createDirectory()
from.listFiles.toList forall (copyFile(_, subDir))
}
else {
val to = if (dest.isDirectory) new File(dest, from.getName) else dest
try {
SFile(to) writeAll SFile(from).slurp()
true
}
catch { case _: IOException => false }
}
}
def mapFile(file: File, replace: String => String) {
val f = SFile(file)
f.printlnAll(f.lines.toList map replace: _*)
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy