summaryrefslogtreecommitdiff
path: root/test/files/run/script-positions.scala
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-05-23 18:21:07 +0000
committerPaul Phillips <paulp@improving.org>2010-05-23 18:21:07 +0000
commit41d361a9d26cb550a11691a5b93fb7f3ab5223d3 (patch)
tree040c9276da673832295571af5585b60a846bf7c0 /test/files/run/script-positions.scala
parent3bad6d54b19c9ccc01a491b6483bb205d855381a (diff)
downloadscala-41d361a9d26cb550a11691a5b93fb7f3ab5223d3.tar.gz
scala-41d361a9d26cb550a11691a5b93fb7f3ab5223d3.tar.bz2
scala-41d361a9d26cb550a11691a5b93fb7f3ab5223d3.zip
Changed the script runner mechanism to alchemiz...
Changed the script runner mechanism to alchemize from AST atoms rather than generating wrapper source, and fixed script position reporting. This patch does not include a discussed change to mark some positions as synthetic. Closes #3119, #3121. Review by milessabin.
Diffstat (limited to 'test/files/run/script-positions.scala')
-rw-r--r--test/files/run/script-positions.scala86
1 files changed, 86 insertions, 0 deletions
diff --git a/test/files/run/script-positions.scala b/test/files/run/script-positions.scala
new file mode 100644
index 0000000000..6982ed8440
--- /dev/null
+++ b/test/files/run/script-positions.scala
@@ -0,0 +1,86 @@
+import scala.tools.nsc._
+import util.stringFromStream
+
+// Testing "scripts" without the platform delights which accompany actual scripts.
+object Scripts {
+
+ val test1 =
+"""#!/bin/sh
+ exec scala $0 $@
+!#
+
+println("statement 1")
+println("statement 2".thisisborked)
+println("statement 3")
+"""
+
+ val output1 =
+"""thisisborked.scala:6: error: value thisisborked is not a member of java.lang.String
+println("statement 2".thisisborked)
+ ^
+one error found"""
+ val test2 =
+"""#!scala
+// foo
+// bar
+!#
+
+val x = "line 6"
+val y = "line 7"
+val z "line 8""""
+
+ val output2 =
+"""bob.scala:8: error: '=' expected but string literal found.
+val z "line 8"
+ ^
+bob.scala:8: error: illegal start of simple expression
+val z "line 8"
+ ^
+two errors found"""
+}
+
+object Test {
+ import Scripts._
+
+ def settings = new GenericRunnerSettings(println _)
+ settings.nocompdaemon.value = true
+
+ def runScript(code: String): String =
+ stringFromStream(stream =>
+ Console.withOut(stream) {
+ Console.withErr(stream) {
+ ScriptRunner.runCommand(settings, code, Nil)
+ }
+ }
+ )
+
+ val tests: List[(String, String)] = List(
+ test1 -> output1,
+ test2 -> output2
+ )
+ // def lines(s: String) = s split """\r\n|\r|\n""" toList
+ def lines(s: String) = s split "\\n" toList
+
+ // strip the random temp filename from error msgs
+ def stripFilename(s: String) = (s indexOf ".scala:") match {
+ case -1 => s
+ case idx => s drop (idx + 7)
+ }
+ def toLines(text: String) = lines(text) map stripFilename
+
+ def main(args: Array[String]): Unit = {
+ for ((code, expected) <- tests) {
+ val out = toLines(runScript(code))
+ val exp = toLines(expected)
+ val nomatch = out zip exp filter { case (x, y) => x != y }
+ val success = out.size == exp.size && nomatch.isEmpty
+
+ assert(
+ success,
+ "Output doesn't match expected:\n" +
+ "Expected:\n" + expected +
+ "Actual:\n" + out.mkString("\n")
+ )
+ }
+ }
+}