1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
/* NEST (New Scala Test)
* Copyright 2007-2011 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.collection.mutable.HashMap
import sys.process._
trait FileManager {
/**
* 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 testRootDir: Directory
def testRootPath: String
var JAVACMD: String
var JAVAC_CMD: String
var CLASSPATH: String
var LATEST_LIB: String
var showDiff = false
var updateCheck = false
var showLog = false
var failed = false
var SCALAC_OPTS = PartestDefaults.scalacOpts
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 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: _*)
}
}
|