|
|
@@ -19,6 +19,7 @@
|
|
|
|
|
|
package org.elasticsearch.painless;
|
|
|
|
|
|
+import org.apache.lucene.util.Constants;
|
|
|
import org.joda.time.DateTime;
|
|
|
import org.joda.time.DateTimeZone;
|
|
|
|
|
|
@@ -32,32 +33,39 @@ import static org.hamcrest.Matchers.startsWith;
|
|
|
public class FunctionRefTests extends ScriptTestCase {
|
|
|
|
|
|
public void testStaticMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(1, exec("List l = new ArrayList(); l.add(2); l.add(1); l.sort(Integer::compare); return l.get(0);"));
|
|
|
}
|
|
|
|
|
|
public void testStaticMethodReferenceDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(1, exec("def l = new ArrayList(); l.add(2); l.add(1); l.sort(Integer::compare); return l.get(0);"));
|
|
|
}
|
|
|
|
|
|
public void testVirtualMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(2, exec("List l = new ArrayList(); l.add(1); l.add(1); return l.stream().mapToInt(Integer::intValue).sum();"));
|
|
|
}
|
|
|
|
|
|
public void testVirtualMethodReferenceDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(2, exec("def l = new ArrayList(); l.add(1); l.add(1); return l.stream().mapToInt(Integer::intValue).sum();"));
|
|
|
}
|
|
|
|
|
|
public void testQualifiedStaticMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(true,
|
|
|
exec("List l = [true]; l.stream().map(org.elasticsearch.painless.FeatureTest::overloadedStatic).findFirst().get()"));
|
|
|
}
|
|
|
|
|
|
public void testQualifiedStaticMethodReferenceDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(true,
|
|
|
exec("def l = [true]; l.stream().map(org.elasticsearch.painless.FeatureTest::overloadedStatic).findFirst().get()"));
|
|
|
}
|
|
|
|
|
|
public void testQualifiedVirtualMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
long instant = randomLong();
|
|
|
assertEquals(instant, exec(
|
|
|
"List l = [params.d]; return l.stream().mapToLong(org.joda.time.ReadableDateTime::getMillis).sum()",
|
|
|
@@ -65,6 +73,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testQualifiedVirtualMethodReferenceDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
long instant = randomLong();
|
|
|
assertEquals(instant, exec(
|
|
|
"def l = [params.d]; return l.stream().mapToLong(org.joda.time.ReadableDateTime::getMillis).sum()",
|
|
|
@@ -72,6 +81,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testCtorMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(3.0D,
|
|
|
exec("List l = new ArrayList(); l.add(1.0); l.add(2.0); " +
|
|
|
"DoubleStream doubleStream = l.stream().mapToDouble(Double::doubleValue);" +
|
|
|
@@ -82,6 +92,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testCtorMethodReferenceDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(3.0D,
|
|
|
exec("def l = new ArrayList(); l.add(1.0); l.add(2.0); " +
|
|
|
"def doubleStream = l.stream().mapToDouble(Double::doubleValue);" +
|
|
|
@@ -92,6 +103,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testArrayCtorMethodRef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(1.0D,
|
|
|
exec("List l = new ArrayList(); l.add(1.0); l.add(2.0); " +
|
|
|
"def[] array = l.stream().toArray(Double[]::new);" +
|
|
|
@@ -99,6 +111,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testArrayCtorMethodRefDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(1.0D,
|
|
|
exec("def l = new ArrayList(); l.add(1.0); l.add(2.0); " +
|
|
|
"def[] array = l.stream().toArray(Double[]::new);" +
|
|
|
@@ -106,26 +119,31 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("5", exec("Integer x = Integer.valueOf(5); return Optional.empty().orElseGet(x::toString);"));
|
|
|
assertEquals("[]", exec("List l = new ArrayList(); return Optional.empty().orElseGet(l::toString);"));
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceDefImpl() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("5", exec("def x = Integer.valueOf(5); return Optional.empty().orElseGet(x::toString);"));
|
|
|
assertEquals("[]", exec("def l = new ArrayList(); return Optional.empty().orElseGet(l::toString);"));
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceDefInterface() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("5", exec("Integer x = Integer.valueOf(5); def opt = Optional.empty(); return opt.orElseGet(x::toString);"));
|
|
|
assertEquals("[]", exec("List l = new ArrayList(); def opt = Optional.empty(); return opt.orElseGet(l::toString);"));
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceDefEverywhere() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("5", exec("def x = Integer.valueOf(5); def opt = Optional.empty(); return opt.orElseGet(x::toString);"));
|
|
|
assertEquals("[]", exec("def l = new ArrayList(); def opt = Optional.empty(); return opt.orElseGet(l::toString);"));
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceMultipleLambdas() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("testingcdefg", exec(
|
|
|
"String x = 'testing';" +
|
|
|
"String y = 'abcdefg';" +
|
|
|
@@ -134,6 +152,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceMultipleLambdasDefImpls() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("testingcdefg", exec(
|
|
|
"def x = 'testing';" +
|
|
|
"def y = 'abcdefg';" +
|
|
|
@@ -142,6 +161,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceMultipleLambdasDefInterface() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("testingcdefg", exec(
|
|
|
"String x = 'testing';" +
|
|
|
"String y = 'abcdefg';" +
|
|
|
@@ -150,6 +170,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testCapturingMethodReferenceMultipleLambdasDefEverywhere() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("testingcdefg", exec(
|
|
|
"def x = 'testing';" +
|
|
|
"def y = 'abcdefg';" +
|
|
|
@@ -158,26 +179,31 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testOwnStaticMethodReference() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(2, exec("int mycompare(int i, int j) { j - i } " +
|
|
|
"List l = new ArrayList(); l.add(2); l.add(1); l.sort(this::mycompare); return l.get(0);"));
|
|
|
}
|
|
|
|
|
|
public void testOwnStaticMethodReferenceDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals(2, exec("int mycompare(int i, int j) { j - i } " +
|
|
|
"def l = new ArrayList(); l.add(2); l.add(1); l.sort(this::mycompare); return l.get(0);"));
|
|
|
}
|
|
|
|
|
|
public void testInterfaceDefaultMethod() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("bar", exec("String f(BiFunction function) { function.apply('foo', 'bar') }" +
|
|
|
"Map map = new HashMap(); f(map::getOrDefault)"));
|
|
|
}
|
|
|
|
|
|
public void testInterfaceDefaultMethodDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
assertEquals("bar", exec("String f(BiFunction function) { function.apply('foo', 'bar') }" +
|
|
|
"def map = new HashMap(); f(map::getOrDefault)"));
|
|
|
}
|
|
|
|
|
|
public void testMethodMissing() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
Exception e = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("List l = [2, 1]; l.sort(Integer::bogus); return l.get(0);");
|
|
|
});
|
|
|
@@ -185,6 +211,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testQualifiedMethodMissing() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
Exception e = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("List l = [2, 1]; l.sort(org.joda.time.ReadableDateTime::bogus); return l.get(0);", false);
|
|
|
});
|
|
|
@@ -192,6 +219,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testClassMissing() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
Exception e = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("List l = [2, 1]; l.sort(Bogus::bogus); return l.get(0);", false);
|
|
|
});
|
|
|
@@ -199,6 +227,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testQualifiedClassMissing() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
Exception e = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("List l = [2, 1]; l.sort(org.joda.time.BogusDateTime::bogus); return l.get(0);", false);
|
|
|
});
|
|
|
@@ -208,6 +237,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testNotFunctionalInterface() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
IllegalArgumentException expected = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("List l = new ArrayList(); l.add(2); l.add(1); l.add(Integer::bogus); return l.get(0);");
|
|
|
});
|
|
|
@@ -215,12 +245,14 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testIncompatible() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
expectScriptThrows(BootstrapMethodError.class, () -> {
|
|
|
exec("List l = new ArrayList(); l.add(2); l.add(1); l.sort(String::startsWith); return l.get(0);");
|
|
|
});
|
|
|
}
|
|
|
|
|
|
public void testWrongArity() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
IllegalArgumentException expected = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("Optional.empty().orElseGet(String::startsWith);");
|
|
|
});
|
|
|
@@ -228,6 +260,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testWrongArityNotEnough() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
IllegalArgumentException expected = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("List l = new ArrayList(); l.add(2); l.add(1); l.sort(String::isEmpty);");
|
|
|
});
|
|
|
@@ -235,6 +268,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testWrongArityDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
IllegalArgumentException expected = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("def y = Optional.empty(); return y.orElseGet(String::startsWith);");
|
|
|
});
|
|
|
@@ -242,6 +276,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testWrongArityNotEnoughDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
IllegalArgumentException expected = expectScriptThrows(IllegalArgumentException.class, () -> {
|
|
|
exec("def l = new ArrayList(); l.add(2); l.add(1); l.sort(String::isEmpty);");
|
|
|
});
|
|
|
@@ -249,6 +284,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testReturnVoid() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
Throwable expected = expectScriptThrows(BootstrapMethodError.class, () -> {
|
|
|
exec("StringBuilder b = new StringBuilder(); List l = [1, 2]; l.stream().mapToLong(b::setLength);");
|
|
|
});
|
|
|
@@ -257,6 +293,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
|
|
}
|
|
|
|
|
|
public void testReturnVoidDef() {
|
|
|
+ assumeFalse("JDK is JDK 9", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
|
Exception expected = expectScriptThrows(LambdaConversionException.class, () -> {
|
|
|
exec("StringBuilder b = new StringBuilder(); def l = [1, 2]; l.stream().mapToLong(b::setLength);");
|
|
|
});
|