diff options
Diffstat (limited to 'test/files/jvm')
-rw-r--r-- | test/files/jvm/inner.scala | 126 | ||||
-rw-r--r-- | test/files/jvm/reactWithinZero.check | 2 | ||||
-rw-r--r-- | test/files/jvm/reactWithinZero.scala | 18 | ||||
-rw-r--r-- | test/files/jvm/receiveWithinZero.check | 2 | ||||
-rw-r--r-- | test/files/jvm/receiveWithinZero.scala | 18 | ||||
-rw-r--r-- | test/files/jvm/timeout.check | 1 | ||||
-rw-r--r-- | test/files/jvm/timeout.scala | 33 |
7 files changed, 200 insertions, 0 deletions
diff --git a/test/files/jvm/inner.scala b/test/files/jvm/inner.scala new file mode 100644 index 0000000000..4ad1f1e215 --- /dev/null +++ b/test/files/jvm/inner.scala @@ -0,0 +1,126 @@ +//############################################################################ +// Test Java interaction with scala inner classes +//############################################################################ +// $Id$ + +import java.io.{BufferedReader, File, FileWriter, InputStreamReader} + +class A { + val abc = "A.abc" + + protected class B(x: Int, y: String) { + println(abc); println(x) + println(y) + } + + trait Itf { + def method1(x: Int): Int + + trait Itf2 extends Itf { + def method2: Unit + } + } + + trait PlainTrait { + def method1(x: Int): Int + } + + class Impl(a: Int) extends Itf { + def method1(x: Int) = { + println(x) + println(a) + x + a + } + } + + class Impl2 extends Impl(1) with Itf#Itf2 { + def method2 = { + println(abc) + } + } + + def newImpl: Itf = new Impl(1) + def newImpl2: Itf#Itf2 = new Impl2 + + class Outer1(arg1: Int) { + class Outer2(arg2: Int) { + class Outer3(arg3: Int) { + println("Outer3: " + arg1 + " " + arg2 + " " + arg3); + } + } + } +} + +object Scalatest { + private val outputdir = System.getProperty("scalatest.output", "inner-jvm.obj") + private val scalalib = System.getProperty("scalatest.lib", "") + private val classpath = outputdir + File.pathSeparator + scalalib + private val javabin = { + val jhome = new File(System.getProperty("java.home")) + if (jhome.getName == "jre") + new File(jhome.getParent, "bin").getAbsolutePath + else + new File(jhome, "bin").getAbsolutePath + } + private val javacmd = javabin + File.separator + "java" + private val javac = javabin + File.separator + "javac" + + def javac(src: String, fname: String) { + val tmpfilename = outputdir + File.separator + fname + val tmpfile = new FileWriter(tmpfilename) + tmpfile.write(src) + tmpfile.close + exec(javac + " -d " + outputdir + " -classpath " + classpath + " " + tmpfilename) + } + + def java(cname: String) = + exec(javacmd + " -cp " + classpath + " " + cname) + + /** Execute cmd, wait for the process to end and pipe it's output to stdout */ + private def exec(cmd: String) { + val proc = Runtime.getRuntime().exec(cmd) + val inp = new BufferedReader(new InputStreamReader(proc.getInputStream)) + val errp = new BufferedReader(new InputStreamReader(proc.getErrorStream)) + proc.waitFor() + while (inp.ready) println(inp.readLine()) + while (errp.ready) println(errp.readLine()) + } +} + +object Test { + def main(args: Array[String]) { + val javaInteraction = """ +public class JavaInteraction { + public static void main(String[] args) { + A a = new A(); + A.B b = a.new B(1, "Hello"); + + A.Itf itf = a.newImpl(); + itf.method1(1); + + A.Itf.Itf2 itf2 = a.newImpl2(); + itf2.method2(); + + A.Outer1 o1 = a.new Outer1(1); + A.Outer1.Outer2 o2 = o1.new Outer2(2); + A.Outer1.Outer2.Outer3 or = o2.new Outer3(3); + } +} +""" + Scalatest.javac(javaInteraction, "JavaInteraction.java") + Scalatest.java("JavaInteraction") + + val accessingScala = """ +public class AccessingScala { + public static void main(String[] args) { + A a = new A(); + System.out.println(a.abc()); + } +} +""" + Scalatest.javac(accessingScala, "AccessingScala.java") + Scalatest.java("AccessingScala") + } +} + +//############################################################################ diff --git a/test/files/jvm/reactWithinZero.check b/test/files/jvm/reactWithinZero.check new file mode 100644 index 0000000000..cf2a2facf9 --- /dev/null +++ b/test/files/jvm/reactWithinZero.check @@ -0,0 +1,2 @@ +TIMEOUT +'ack diff --git a/test/files/jvm/reactWithinZero.scala b/test/files/jvm/reactWithinZero.scala new file mode 100644 index 0000000000..0786ce271d --- /dev/null +++ b/test/files/jvm/reactWithinZero.scala @@ -0,0 +1,18 @@ +import scala.actors.{Actor, TIMEOUT} + +class A extends Actor { + def act() = reactWithin(0) { + case TIMEOUT => + println("TIMEOUT") + reply('ack) + act() + case x => println(x) + } +} + +object Test { + def main(args: Array[String]): Unit = { + val a = new A + a.start() + } +} diff --git a/test/files/jvm/receiveWithinZero.check b/test/files/jvm/receiveWithinZero.check new file mode 100644 index 0000000000..cf2a2facf9 --- /dev/null +++ b/test/files/jvm/receiveWithinZero.check @@ -0,0 +1,2 @@ +TIMEOUT +'ack diff --git a/test/files/jvm/receiveWithinZero.scala b/test/files/jvm/receiveWithinZero.scala new file mode 100644 index 0000000000..315dd9c86a --- /dev/null +++ b/test/files/jvm/receiveWithinZero.scala @@ -0,0 +1,18 @@ +import scala.actors.{Actor, TIMEOUT} + +class A extends Actor { + def act() = receiveWithin(0) { + case TIMEOUT => + println("TIMEOUT") + reply('ack) + act() + case x => println(x) + } +} + +object Test { + def main(args: Array[String]): Unit = { + val a = new A + a.start() + } +} diff --git a/test/files/jvm/timeout.check b/test/files/jvm/timeout.check new file mode 100644 index 0000000000..d86bac9de5 --- /dev/null +++ b/test/files/jvm/timeout.check @@ -0,0 +1 @@ +OK diff --git a/test/files/jvm/timeout.scala b/test/files/jvm/timeout.scala new file mode 100644 index 0000000000..12f1bd7bad --- /dev/null +++ b/test/files/jvm/timeout.scala @@ -0,0 +1,33 @@ + +import scala.actors.Actor._ +import scala.actors.TIMEOUT + +object Test extends Application { + case class Timing(time: Long) + + actor { + val a = actor { + react { + case 'doTiming => + val s = sender + reactWithin(500) { + case TIMEOUT => + s ! Timing(System.currentTimeMillis) + } + } + } + + val start = System.currentTimeMillis + (a !? 'doTiming) match { + case Timing(end) => + val delay = end - start + + if (delay > 100 && delay < 900) + println("OK") + else { + println("EXPECTED: 100 < x < 900") + println("ACTUAL: "+delay) + } + } + } +} |