summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-10-08 19:00:48 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-10-08 23:07:36 -0700
commit58ba39ce851460c18f2f81341a8c80e0e51d2764 (patch)
tree3cad6ec64abb2089c32425bd40b2ad3a679bfee2
parent4265ab6345d7e84e36dc1444fdbbba3643b29b35 (diff)
downloadscala-58ba39ce851460c18f2f81341a8c80e0e51d2764.tar.gz
scala-58ba39ce851460c18f2f81341a8c80e0e51d2764.tar.bz2
scala-58ba39ce851460c18f2f81341a8c80e0e51d2764.zip
Single Abstract Method support: java8 test
Inspired by test/files/run/t7398.scala and sammy_poly. Added some notes to original tests. Elaborating on that note: we don't yet desugar `f(a)` to `f.sam(a)`, like we do for regular functions: `f(a)` becomes `f.apply(a)`. It seems pleasingly symmetrical and is easy to implement, but not sure it's a good idea...
-rw-r--r--test/files/pos/sammy_poly.scala1
-rw-r--r--test/files/run/sammy_java8.flags1
-rw-r--r--test/files/run/sammy_java8.scala34
-rw-r--r--test/files/run/t7398.scala2
4 files changed, 37 insertions, 1 deletions
diff --git a/test/files/pos/sammy_poly.scala b/test/files/pos/sammy_poly.scala
index f03be4f8f5..c629be7166 100644
--- a/test/files/pos/sammy_poly.scala
+++ b/test/files/pos/sammy_poly.scala
@@ -1,6 +1,7 @@
// test synthesizeSAMFunction where the sam type is not fully defined
class T {
trait F[T, U] { def apply(x: T): U }
+ // NOTE: the f(x) desugaring for now assumes the single abstract method is called 'apply'
def app[T, U](x: T)(f: F[T, U]): U = f(x)
app(1)(x => List(x))
} \ No newline at end of file
diff --git a/test/files/run/sammy_java8.flags b/test/files/run/sammy_java8.flags
new file mode 100644
index 0000000000..48fd867160
--- /dev/null
+++ b/test/files/run/sammy_java8.flags
@@ -0,0 +1 @@
+-Xexperimental
diff --git a/test/files/run/sammy_java8.scala b/test/files/run/sammy_java8.scala
new file mode 100644
index 0000000000..db9df7f5fe
--- /dev/null
+++ b/test/files/run/sammy_java8.scala
@@ -0,0 +1,34 @@
+import scala.tools.partest._
+
+// java8 version of sammy_poly.scala
+object Test extends CompilerTest {
+ import global._
+
+ override lazy val units: List[CompilationUnit] = {
+ global.settings.Xexperimental.value = true
+
+ // This test itself does not depend on JDK8.
+ javaCompilationUnits(global)(samSource) ++
+ compilationUnits(global)(useSamSource)
+ }
+
+ private def samSource = """
+// trait F[T, U] { def apply(x: T): U }
+public interface F<T, U> {
+ U apply(T t);
+ default void yadayada() {
+ throw new UnsupportedOperationException("yadayada");
+ }
+}
+ """
+
+ private def useSamSource = """
+class T {
+ def app[T, U](x: T)(f: F[T, U]): U = f(x)
+ app(1)(x => List(x))
+}
+ """
+
+ // We're only checking we can compile it.
+ def check(source: String, unit: global.CompilationUnit): Unit = ()
+}
diff --git a/test/files/run/t7398.scala b/test/files/run/t7398.scala
index 493c4dcf40..4b46850768 100644
--- a/test/files/run/t7398.scala
+++ b/test/files/run/t7398.scala
@@ -21,6 +21,6 @@ public interface Iterator<E> {
}
"""
- // We're only checking we can parse it.
+ // We're only checking we can compile it.
def check(source: String, unit: global.CompilationUnit): Unit = ()
}