From 4dcc11418333491b4cb2ed8429e723c42034699d Mon Sep 17 00:00:00 2001 From: moix Date: Tue, 7 Sep 2010 09:38:32 +0000 Subject: Stability testing task added. --- project/build/Comparator.scala | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 project/build/Comparator.scala (limited to 'project/build/Comparator.scala') diff --git a/project/build/Comparator.scala b/project/build/Comparator.scala new file mode 100644 index 0000000000..8b5d65d157 --- /dev/null +++ b/project/build/Comparator.scala @@ -0,0 +1,72 @@ +import sbt._ +import java.io.{File,FileInputStream} + +// Based on scala.tools.ant.Same +object Comparator { + + private def getMappedPath(path:Path,baseDirectory:Path):Path= { + Path.fromString(baseDirectory,path.relativePath) + } + + + def compare(origin:Path,dest:Path,filter:Path=>PathFinder,log:Logger):Option[String] = { + log.info("Comparing the contents of "+origin.absolutePath+ " with "+dest.absolutePath) + var allEqualNow = true + + def reportDiff(f1: File, f2: File) = { + allEqualNow = false + log.error("File '" + f1 + "' is different from correspondant.") + } + + def reportMissing(f1: File) = { + allEqualNow = false + log.error("File '" + f1 + "' has no correspondant.") + } + + + + val originPaths = filter(origin).get + + val bufferSize = 1024 + val originBuffer = new Array[Byte](bufferSize) + val destBuffer = new Array[Byte](bufferSize) + + for (originPath <- originPaths.filter(! _.isDirectory)){ + log.debug("origin :" + originPath.absolutePath) + val destPath = getMappedPath(originPath,dest) + log.debug("dest :" + destPath.absolutePath) + var equalNow = true + val originFile = originPath.asFile + val destFile = destPath.asFile + + if (originFile.canRead && destFile.canRead) { + + val originStream = new FileInputStream(originFile) + val destStream = new FileInputStream(destFile) + var originRemaining = originStream.read(originBuffer) + var destRemaining = destStream.read(destBuffer) + while (originRemaining > 0 && equalNow) { + if (originRemaining == destRemaining) + for (idx <- 0 until originRemaining) { + equalNow = equalNow && (originBuffer(idx) == destBuffer(idx))} + else + equalNow = false + originRemaining = originStream.read(originBuffer) + destRemaining = destStream.read(destBuffer) + } + if (destRemaining > 0) equalNow = false + + if (!equalNow) reportDiff(originFile, destFile) + + originStream.close + destStream.close + + } + else reportMissing(originFile) + + } + if(allEqualNow) None else Some("There were differences between "+origin.absolutePath+ " and "+ dest.absolutePath) + } + + +} -- cgit v1.2.3