aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-10-25 17:01:53 +0200
committerGuillaume Martres <smarter@ubuntu.com>2016-11-22 01:35:06 +0100
commit0da788c52121e44de6be0cdc7a0c4c6e1b125ff9 (patch)
treee0658e385f711e679effbcd65e94f921a9208cee /bin
parent0bd959813d94edd01d44513b57f633594805c9d7 (diff)
downloaddotty-0da788c52121e44de6be0cdc7a0c4c6e1b125ff9.tar.gz
dotty-0da788c52121e44de6be0cdc7a0c4c6e1b125ff9.tar.bz2
dotty-0da788c52121e44de6be0cdc7a0c4c6e1b125ff9.zip
Add bin project to separate scripted tests from compiler tests
Diffstat (limited to 'bin')
-rw-r--r--bin/test/TestScripts.scala91
1 files changed, 91 insertions, 0 deletions
diff --git a/bin/test/TestScripts.scala b/bin/test/TestScripts.scala
new file mode 100644
index 000000000..1a200c1b9
--- /dev/null
+++ b/bin/test/TestScripts.scala
@@ -0,0 +1,91 @@
+package test
+
+import org.junit.Assert._
+import org.junit.{Before, After, Test}
+
+import scala.io.Source
+import scala.sys.process.{Process, ProcessLogger}
+import java.io.{File => JFile, FileNotFoundException}
+
+class TestScripts {
+ private val lineSep = util.Properties.lineSeparator
+ private def doUnlessWindows(op: => Unit) =
+ if (!System.getProperty("os.name").toLowerCase.contains("windows"))
+ op
+ else
+ Console.err.println("[warn] Could not perform test, windows batch-scripts not available")
+
+ private def executeScript(script: String): (Int, String) = {
+ val sb = new StringBuilder
+ val ret = Process(script) ! ProcessLogger(sb append _)
+ (ret, sb.toString)
+ }
+
+ private def deletePackages: Unit = {
+ def delete(path: String) = {
+ val file = new JFile(path)
+ if (file.exists) file.delete()
+ }
+
+ try {
+ for (jar <- Source.fromFile("../.packages").getLines())
+ delete(jar)
+
+ delete("../.packages")
+ delete("./src/dotty/tools/dotc/Dummy.scala")
+ delete("HelloWorld.class")
+ delete("HelloWorld$.class")
+ } catch {
+ case _: FileNotFoundException => ()
+ }
+ }
+
+ @Before def buildUp = deletePackages
+ @After def tearDown = deletePackages
+
+ /** bin/dotc script should be able to build hello world and successfully
+ * execute it using dotr
+ */
+ @Test def buildAndRunHelloWorld = doUnlessWindows {
+ val (retDotc, dotcOutput) = executeScript("./bin/dotc ./tests/pos/HelloWorld.scala")
+
+ // Check correct output of building and running dotc
+ assert(
+ retDotc == 0,
+ s"bin/dotc script did not run properly. Output:$lineSep$dotcOutput"
+ )
+
+ val (retDotr, dotrOutput) = executeScript("./bin/dotr HelloWorld")
+ assert(
+ retDotr == 0 && dotrOutput == "hello world",
+ s"Running hello world exited with status: $retDotr and output: $dotrOutput"
+ )
+ }
+
+ /** bin/dotc script should be able to detect changes in dotty sources and
+ * rebuild dotty if needed
+ */
+ @Test def rebuildIfNecessary = doUnlessWindows {
+ val (retFirstBuild, _) = executeScript("./bin/dotc ./tests/pos/HelloWorld.scala")
+ assert(retFirstBuild == 0, "building dotc failed")
+
+ // Create a new file to force rebuild
+ new JFile("./src/dotty/tools/dotc/Dummy.scala").createNewFile()
+
+ val (retSecondBuild, output) = executeScript("./bin/dotc ./tests/pos/HelloWorld.scala")
+ assert(
+ retSecondBuild == 0 && output.contains("rebuilding"),
+ s"Rebuilding the tool should result in jar files being rebuilt. Status: $retSecondBuild, output:$lineSep$output")
+ }
+
+ /** if no changes to dotty, dotc script should be fast */
+ @Test def beFastOnNoChanges = doUnlessWindows {
+ val (retFirstBuild, _) = executeScript("./bin/dotc ./tests/pos/HelloWorld.scala")
+ assert(retFirstBuild == 0, "building dotc failed")
+
+ val (ret, output) = executeScript("./bin/dotc ./tests/pos/HelloWorld.scala")
+ assert(
+ ret == 0 && !output.contains("rebuilding"),
+ s"Project recompiled when it didn't need to be. Status $ret, output:$lineSep$output")
+ }
+}