Move test classes to test root in Painless (#40873)
This moves several test classes that were part of the main root to the test root. These were part of the main root due to limitations prior to whitelist customization. Without whitelist customization these can be moved to a test context and removed from the base whitelists as they should not be user facing.
This commit is contained in:
parent
ac58b9bded
commit
fd51780de2
|
@ -240,30 +240,3 @@ class org.elasticsearch.index.query.IntervalFilterScript$Interval {
|
||||||
int getEnd()
|
int getEnd()
|
||||||
int getGaps()
|
int getGaps()
|
||||||
}
|
}
|
||||||
|
|
||||||
# for testing
|
|
||||||
class org.elasticsearch.painless.FeatureTest no_import {
|
|
||||||
int z
|
|
||||||
()
|
|
||||||
(int,int)
|
|
||||||
int getX()
|
|
||||||
int getY()
|
|
||||||
Integer getI()
|
|
||||||
void setX(int)
|
|
||||||
void setY(int)
|
|
||||||
void setI(Integer)
|
|
||||||
boolean overloadedStatic()
|
|
||||||
boolean overloadedStatic(boolean)
|
|
||||||
int staticNumberTest(Number)
|
|
||||||
Double mixedAdd(int, Byte, char, Float)
|
|
||||||
Object twoFunctionsOfX(Function,Function)
|
|
||||||
void listInput(List)
|
|
||||||
int org.elasticsearch.painless.FeatureTestAugmentation getTotal()
|
|
||||||
int org.elasticsearch.painless.FeatureTestAugmentation addToTotal(int)
|
|
||||||
}
|
|
||||||
|
|
||||||
# for testing
|
|
||||||
static_import {
|
|
||||||
int staticAddIntsTest(int, int) from_class org.elasticsearch.painless.StaticTest
|
|
||||||
float staticAddFloatsTest(float, float) from_class org.elasticsearch.painless.FeatureTest
|
|
||||||
}
|
|
||||||
|
|
|
@ -190,13 +190,13 @@ public class AugmentationTests extends ScriptTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testFeatureTest() {
|
public void testFeatureTest() {
|
||||||
assertEquals(5, exec("org.elasticsearch.painless.FeatureTest ft = new org.elasticsearch.painless.FeatureTest();" +
|
assertEquals(5, exec("org.elasticsearch.painless.FeatureTestObject ft = new org.elasticsearch.painless.FeatureTestObject();" +
|
||||||
" ft.setX(3); ft.setY(2); return ft.getTotal()"));
|
" ft.setX(3); ft.setY(2); return ft.getTotal()"));
|
||||||
assertEquals(5, exec("def ft = new org.elasticsearch.painless.FeatureTest();" +
|
assertEquals(5, exec("def ft = new org.elasticsearch.painless.FeatureTestObject();" +
|
||||||
" ft.setX(3); ft.setY(2); return ft.getTotal()"));
|
" ft.setX(3); ft.setY(2); return ft.getTotal()"));
|
||||||
assertEquals(8, exec("org.elasticsearch.painless.FeatureTest ft = new org.elasticsearch.painless.FeatureTest();" +
|
assertEquals(8, exec("org.elasticsearch.painless.FeatureTestObject ft = new org.elasticsearch.painless.FeatureTestObject();" +
|
||||||
" ft.setX(3); ft.setY(2); return ft.addToTotal(3)"));
|
" ft.setX(3); ft.setY(2); return ft.addToTotal(3)"));
|
||||||
assertEquals(8, exec("def ft = new org.elasticsearch.painless.FeatureTest();" +
|
assertEquals(8, exec("def ft = new org.elasticsearch.painless.FeatureTestObject();" +
|
||||||
" ft.setX(3); ft.setY(2); return ft.addToTotal(3)"));
|
" ft.setX(3); ft.setY(2); return ft.addToTotal(3)"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ public class BasicAPITests extends ScriptTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testPublicMemberAccess() {
|
public void testPublicMemberAccess() {
|
||||||
assertEquals(5, exec("org.elasticsearch.painless.FeatureTest ft = new org.elasticsearch.painless.FeatureTest();" +
|
assertEquals(5, exec("org.elasticsearch.painless.FeatureTestObject ft = new org.elasticsearch.painless.FeatureTestObject();" +
|
||||||
"ft.z = 5; return ft.z;"));
|
"ft.z = 5; return ft.z;"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,11 +191,11 @@ public class BasicExpressionTests extends ScriptTestCase {
|
||||||
assertNull( exec("def a = null; return a?.length()"));
|
assertNull( exec("def a = null; return a?.length()"));
|
||||||
assertEquals(3, exec("def a = 'foo'; return a?.length()"));
|
assertEquals(3, exec("def a = 'foo'; return a?.length()"));
|
||||||
// Read shortcut
|
// Read shortcut
|
||||||
assertMustBeNullable( "org.elasticsearch.painless.FeatureTest a = null; return a?.x");
|
assertMustBeNullable( "org.elasticsearch.painless.FeatureTestObject a = null; return a?.x");
|
||||||
assertMustBeNullable(
|
assertMustBeNullable(
|
||||||
"org.elasticsearch.painless.FeatureTest a = new org.elasticsearch.painless.FeatureTest(); return a?.x");
|
"org.elasticsearch.painless.FeatureTestObject a = new org.elasticsearch.painless.FeatureTestObject(); return a?.x");
|
||||||
assertNull( exec("def a = null; return a?.x"));
|
assertNull( exec("def a = null; return a?.x"));
|
||||||
assertEquals(0, exec("def a = new org.elasticsearch.painless.FeatureTest(); return a?.x"));
|
assertEquals(0, exec("def a = new org.elasticsearch.painless.FeatureTestObject(); return a?.x"));
|
||||||
|
|
||||||
// Maps
|
// Maps
|
||||||
// Call
|
// Call
|
||||||
|
@ -222,7 +222,7 @@ public class BasicExpressionTests extends ScriptTestCase {
|
||||||
assertEquals(2, exec("def a = new int[] {2, 3}; return a?.length"));
|
assertEquals(2, exec("def a = new int[] {2, 3}; return a?.length"));
|
||||||
|
|
||||||
// Results from maps (should just work but let's test anyway)
|
// Results from maps (should just work but let's test anyway)
|
||||||
FeatureTest t = new FeatureTest();
|
FeatureTestObject t = new FeatureTestObject();
|
||||||
assertNull( exec("Map a = ['thing': params.t]; return a.other?.getX()", singletonMap("t", t), true));
|
assertNull( exec("Map a = ['thing': params.t]; return a.other?.getX()", singletonMap("t", t), true));
|
||||||
assertNull( exec("Map a = ['thing': params.t]; return a.other?.x", singletonMap("t", t), true));
|
assertNull( exec("Map a = ['thing': params.t]; return a.other?.x", singletonMap("t", t), true));
|
||||||
assertNull( exec("def a = ['thing': params.t]; return a.other?.getX()", singletonMap("t", t), true));
|
assertNull( exec("def a = ['thing': params.t]; return a.other?.getX()", singletonMap("t", t), true));
|
||||||
|
@ -254,8 +254,8 @@ public class BasicExpressionTests extends ScriptTestCase {
|
||||||
+ "return a.missing_length", true));
|
+ "return a.missing_length", true));
|
||||||
|
|
||||||
// Writes, all unsupported at this point
|
// Writes, all unsupported at this point
|
||||||
// assertEquals(null, exec("org.elasticsearch.painless.FeatureTest a = null; return a?.x")); // Read field
|
// assertEquals(null, exec("org.elasticsearch.painless.FeatureTestObject a = null; return a?.x")); // Read field
|
||||||
// assertEquals(null, exec("org.elasticsearch.painless.FeatureTest a = null; a?.x = 7; return a?.x")); // Write field
|
// assertEquals(null, exec("org.elasticsearch.painless.FeatureTestObject a = null; a?.x = 7; return a?.x")); // Write field
|
||||||
// assertEquals(null, exec("Map a = null; a?.other = 'wow'; return a?.other")); // Write shortcut
|
// assertEquals(null, exec("Map a = null; a?.other = 'wow'; return a?.other")); // Write shortcut
|
||||||
// assertEquals(null, exec("def a = null; a?.other = 'cat'; return a?.other")); // Write shortcut
|
// assertEquals(null, exec("def a = null; a?.other = 'cat'; return a?.other")); // Write shortcut
|
||||||
// assertEquals(null, exec("Map a = ['thing': 'bar']; a.other?.cat = 'no'; return a.other?.cat"));
|
// assertEquals(null, exec("Map a = ['thing': 'bar']; a.other?.cat = 'no'; return a.other?.cat"));
|
||||||
|
|
|
@ -19,14 +19,14 @@
|
||||||
|
|
||||||
package org.elasticsearch.painless;
|
package org.elasticsearch.painless;
|
||||||
|
|
||||||
public class FeatureTestAugmentation {
|
public class FeatureTestAugmentationObject {
|
||||||
public static int getTotal(FeatureTest ft) {
|
public static int getTotal(FeatureTestObject ft) {
|
||||||
return ft.getX() + ft.getY();
|
return ft.getX() + ft.getY();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int addToTotal(FeatureTest ft, int add) {
|
public static int addToTotal(FeatureTestObject ft, int add) {
|
||||||
return getTotal(ft) + add;
|
return getTotal(ft) + add;
|
||||||
}
|
}
|
||||||
|
|
||||||
private FeatureTestAugmentation() {}
|
private FeatureTestAugmentationObject() {}
|
||||||
}
|
}
|
|
@ -23,7 +23,7 @@ import java.util.function.Function;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Currently just a dummy class for testing a few features not yet exposed by whitelist! */
|
/** Currently just a dummy class for testing a few features not yet exposed by whitelist! */
|
||||||
public class FeatureTest {
|
public class FeatureTestObject {
|
||||||
/** static method that returns true */
|
/** static method that returns true */
|
||||||
public static boolean overloadedStatic() {
|
public static boolean overloadedStatic() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -51,11 +51,11 @@ public class FeatureTest {
|
||||||
private Integer i;
|
private Integer i;
|
||||||
|
|
||||||
/** empty ctor */
|
/** empty ctor */
|
||||||
public FeatureTest() {
|
public FeatureTestObject() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** ctor with params */
|
/** ctor with params */
|
||||||
public FeatureTest(int x, int y) {
|
public FeatureTestObject(int x, int y) {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
|
@ -46,12 +46,12 @@ public class FunctionRefTests extends ScriptTestCase {
|
||||||
|
|
||||||
public void testQualifiedStaticMethodReference() {
|
public void testQualifiedStaticMethodReference() {
|
||||||
assertEquals(true,
|
assertEquals(true,
|
||||||
exec("List l = [true]; l.stream().map(org.elasticsearch.painless.FeatureTest::overloadedStatic).findFirst().get()"));
|
exec("List l = [true]; l.stream().map(org.elasticsearch.painless.FeatureTestObject::overloadedStatic).findFirst().get()"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testQualifiedStaticMethodReferenceDef() {
|
public void testQualifiedStaticMethodReferenceDef() {
|
||||||
assertEquals(true,
|
assertEquals(true,
|
||||||
exec("def l = [true]; l.stream().map(org.elasticsearch.painless.FeatureTest::overloadedStatic).findFirst().get()"));
|
exec("def l = [true]; l.stream().map(org.elasticsearch.painless.FeatureTestObject::overloadedStatic).findFirst().get()"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testQualifiedVirtualMethodReference() {
|
public void testQualifiedVirtualMethodReference() {
|
||||||
|
@ -133,7 +133,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
||||||
assertEquals("testingcdefg", exec(
|
assertEquals("testingcdefg", exec(
|
||||||
"String x = 'testing';" +
|
"String x = 'testing';" +
|
||||||
"String y = 'abcdefg';" +
|
"String y = 'abcdefg';" +
|
||||||
"org.elasticsearch.painless.FeatureTest test = new org.elasticsearch.painless.FeatureTest(2,3);" +
|
"org.elasticsearch.painless.FeatureTestObject test = new org.elasticsearch.painless.FeatureTestObject(2,3);" +
|
||||||
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
||||||
assertEquals("testingcdefg", exec(
|
assertEquals("testingcdefg", exec(
|
||||||
"def x = 'testing';" +
|
"def x = 'testing';" +
|
||||||
"def y = 'abcdefg';" +
|
"def y = 'abcdefg';" +
|
||||||
"org.elasticsearch.painless.FeatureTest test = new org.elasticsearch.painless.FeatureTest(2,3);" +
|
"org.elasticsearch.painless.FeatureTestObject test = new org.elasticsearch.painless.FeatureTestObject(2,3);" +
|
||||||
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +149,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
||||||
assertEquals("testingcdefg", exec(
|
assertEquals("testingcdefg", exec(
|
||||||
"String x = 'testing';" +
|
"String x = 'testing';" +
|
||||||
"String y = 'abcdefg';" +
|
"String y = 'abcdefg';" +
|
||||||
"def test = new org.elasticsearch.painless.FeatureTest(2,3);" +
|
"def test = new org.elasticsearch.painless.FeatureTestObject(2,3);" +
|
||||||
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ public class FunctionRefTests extends ScriptTestCase {
|
||||||
assertEquals("testingcdefg", exec(
|
assertEquals("testingcdefg", exec(
|
||||||
"def x = 'testing';" +
|
"def x = 'testing';" +
|
||||||
"def y = 'abcdefg';" +
|
"def y = 'abcdefg';" +
|
||||||
"def test = new org.elasticsearch.painless.FeatureTest(2,3);" +
|
"def test = new org.elasticsearch.painless.FeatureTestObject(2,3);" +
|
||||||
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
"return test.twoFunctionsOfX(x::concat, y::substring);"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -333,15 +333,15 @@ public class GeneralCastTests extends ScriptTestCase {
|
||||||
assertEquals(1, exec("def y = 2.0; y.compareTo(1);"));
|
assertEquals(1, exec("def y = 2.0; y.compareTo(1);"));
|
||||||
assertEquals(1, exec("int x = 1; def y = 2.0; y.compareTo(x);"));
|
assertEquals(1, exec("int x = 1; def y = 2.0; y.compareTo(x);"));
|
||||||
assertEquals(-1, exec("Integer x = Integer.valueOf(3); def y = 2.0; y.compareTo(x);"));
|
assertEquals(-1, exec("Integer x = Integer.valueOf(3); def y = 2.0; y.compareTo(x);"));
|
||||||
assertEquals(2, exec("def f = new org.elasticsearch.painless.FeatureTest(); f.i = (byte)2; f.i"));
|
assertEquals(2, exec("def f = new org.elasticsearch.painless.FeatureTestObject(); f.i = (byte)2; f.i"));
|
||||||
assertEquals(4.0, exec(
|
assertEquals(4.0, exec(
|
||||||
"def x = new org.elasticsearch.painless.FeatureTest(); " +
|
"def x = new org.elasticsearch.painless.FeatureTestObject(); " +
|
||||||
"Byte i = Byte.valueOf(3); " +
|
"Byte i = Byte.valueOf(3); " +
|
||||||
"byte j = 1;" +
|
"byte j = 1;" +
|
||||||
"Short s = Short.valueOf(-2);" +
|
"Short s = Short.valueOf(-2);" +
|
||||||
"x.mixedAdd(j, i, (char)2, s)"
|
"x.mixedAdd(j, i, (char)2, s)"
|
||||||
));
|
));
|
||||||
assertNull(exec("def f = new org.elasticsearch.painless.FeatureTest(); f.i = null; f.i"));
|
assertNull(exec("def f = new org.elasticsearch.painless.FeatureTestObject(); f.i = null; f.i"));
|
||||||
expectScriptThrows(ClassCastException.class, () -> exec("def x = 2.0; def y = 1; y.compareTo(x);"));
|
expectScriptThrows(ClassCastException.class, () -> exec("def x = 2.0; def y = 1; y.compareTo(x);"));
|
||||||
expectScriptThrows(ClassCastException.class, () -> exec("float f = 1.0f; def y = 1; y.compareTo(f);"));
|
expectScriptThrows(ClassCastException.class, () -> exec("float f = 1.0f; def y = 1; y.compareTo(f);"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,7 +112,7 @@ public class LambdaTests extends ScriptTestCase {
|
||||||
|
|
||||||
public void testTwoLambdas() {
|
public void testTwoLambdas() {
|
||||||
assertEquals("testingcdefg", exec(
|
assertEquals("testingcdefg", exec(
|
||||||
"org.elasticsearch.painless.FeatureTest test = new org.elasticsearch.painless.FeatureTest(2,3);" +
|
"org.elasticsearch.painless.FeatureTestObject test = new org.elasticsearch.painless.FeatureTestObject(2,3);" +
|
||||||
"return test.twoFunctionsOfX(x -> 'testing'.concat(x), y -> 'abcdefg'.substring(y))"));
|
"return test.twoFunctionsOfX(x -> 'testing'.concat(x), y -> 'abcdefg'.substring(y))"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,14 +41,14 @@ public class OverloadTests extends ScriptTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testConstructor() {
|
public void testConstructor() {
|
||||||
assertEquals(true, exec("org.elasticsearch.painless.FeatureTest f = new org.elasticsearch.painless.FeatureTest();" +
|
assertEquals(true, exec("org.elasticsearch.painless.FeatureTestObject f = new org.elasticsearch.painless.FeatureTestObject();" +
|
||||||
"return f.x == 0 && f.y == 0;"));
|
"return f.x == 0 && f.y == 0;"));
|
||||||
assertEquals(true, exec("org.elasticsearch.painless.FeatureTest f = new org.elasticsearch.painless.FeatureTest(1, 2);" +
|
assertEquals(true, exec("org.elasticsearch.painless.FeatureTestObject f = new org.elasticsearch.painless.FeatureTestObject(1, 2);" +
|
||||||
"return f.x == 1 && f.y == 2;"));
|
"return f.x == 1 && f.y == 2;"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testStatic() {
|
public void testStatic() {
|
||||||
assertEquals(true, exec("return org.elasticsearch.painless.FeatureTest.overloadedStatic();"));
|
assertEquals(true, exec("return org.elasticsearch.painless.FeatureTestObject.overloadedStatic();"));
|
||||||
assertEquals(false, exec("return org.elasticsearch.painless.FeatureTest.overloadedStatic(false);"));
|
assertEquals(false, exec("return org.elasticsearch.painless.FeatureTestObject.overloadedStatic(false);"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
package org.elasticsearch.painless;
|
package org.elasticsearch.painless;
|
||||||
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.elasticsearch.common.io.PathUtils;
|
import org.elasticsearch.common.io.PathUtils;
|
||||||
import org.elasticsearch.core.internal.io.IOUtils;
|
import org.elasticsearch.core.internal.io.IOUtils;
|
||||||
import org.elasticsearch.painless.lookup.PainlessClass;
|
import org.elasticsearch.painless.lookup.PainlessClass;
|
||||||
|
|
|
@ -22,14 +22,14 @@ package org.elasticsearch.painless;
|
||||||
import junit.framework.AssertionFailedError;
|
import junit.framework.AssertionFailedError;
|
||||||
import org.elasticsearch.common.settings.Settings;
|
import org.elasticsearch.common.settings.Settings;
|
||||||
import org.elasticsearch.painless.antlr.Walker;
|
import org.elasticsearch.painless.antlr.Walker;
|
||||||
import org.elasticsearch.painless.lookup.PainlessLookup;
|
|
||||||
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
|
|
||||||
import org.elasticsearch.painless.spi.Whitelist;
|
import org.elasticsearch.painless.spi.Whitelist;
|
||||||
|
import org.elasticsearch.painless.spi.WhitelistLoader;
|
||||||
import org.elasticsearch.script.ScriptContext;
|
import org.elasticsearch.script.ScriptContext;
|
||||||
import org.elasticsearch.script.ScriptException;
|
import org.elasticsearch.script.ScriptException;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -45,8 +45,6 @@ import static org.hamcrest.Matchers.hasSize;
|
||||||
* Typically just asserts the output of {@code exec()}
|
* Typically just asserts the output of {@code exec()}
|
||||||
*/
|
*/
|
||||||
public abstract class ScriptTestCase extends ESTestCase {
|
public abstract class ScriptTestCase extends ESTestCase {
|
||||||
private static final PainlessLookup PAINLESS_LOOKUP = PainlessLookupBuilder.buildFromWhitelists(Whitelist.BASE_WHITELISTS);
|
|
||||||
|
|
||||||
protected PainlessScriptEngine scriptEngine;
|
protected PainlessScriptEngine scriptEngine;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
@ -66,7 +64,9 @@ public abstract class ScriptTestCase extends ESTestCase {
|
||||||
*/
|
*/
|
||||||
protected Map<ScriptContext<?>, List<Whitelist>> scriptContexts() {
|
protected Map<ScriptContext<?>, List<Whitelist>> scriptContexts() {
|
||||||
Map<ScriptContext<?>, List<Whitelist>> contexts = new HashMap<>();
|
Map<ScriptContext<?>, List<Whitelist>> contexts = new HashMap<>();
|
||||||
contexts.put(PainlessTestScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
List<Whitelist> whitelists = new ArrayList<>(Whitelist.BASE_WHITELISTS);
|
||||||
|
whitelists.add(WhitelistLoader.loadFromResourceFiles(Whitelist.class, "org.elasticsearch.painless.test"));
|
||||||
|
contexts.put(PainlessTestScript.CONTEXT, whitelists);
|
||||||
return contexts;
|
return contexts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,12 +91,13 @@ public abstract class ScriptTestCase extends ESTestCase {
|
||||||
public Object exec(String script, Map<String, Object> vars, Map<String,String> compileParams, boolean picky) {
|
public Object exec(String script, Map<String, Object> vars, Map<String,String> compileParams, boolean picky) {
|
||||||
// test for ambiguity errors before running the actual script if picky is true
|
// test for ambiguity errors before running the actual script if picky is true
|
||||||
if (picky) {
|
if (picky) {
|
||||||
ScriptClassInfo scriptClassInfo = new ScriptClassInfo(PAINLESS_LOOKUP, PainlessTestScript.class);
|
ScriptClassInfo scriptClassInfo =
|
||||||
|
new ScriptClassInfo(scriptEngine.getContextsToLookups().get(PainlessTestScript.CONTEXT), PainlessTestScript.class);
|
||||||
CompilerSettings pickySettings = new CompilerSettings();
|
CompilerSettings pickySettings = new CompilerSettings();
|
||||||
pickySettings.setPicky(true);
|
pickySettings.setPicky(true);
|
||||||
pickySettings.setRegexesEnabled(CompilerSettings.REGEX_ENABLED.get(scriptEngineSettings()));
|
pickySettings.setRegexesEnabled(CompilerSettings.REGEX_ENABLED.get(scriptEngineSettings()));
|
||||||
Walker.buildPainlessTree(
|
Walker.buildPainlessTree(scriptClassInfo, new MainMethodReserved(), getTestName(), script, pickySettings,
|
||||||
scriptClassInfo, new MainMethodReserved(), getTestName(), script, pickySettings, PAINLESS_LOOKUP, null);
|
scriptEngine.getContextsToLookups().get(PainlessTestScript.CONTEXT), null);
|
||||||
}
|
}
|
||||||
// test actual script execution
|
// test actual script execution
|
||||||
PainlessTestScript.Factory factory = scriptEngine.compile(null, script, PainlessTestScript.CONTEXT, compileParams);
|
PainlessTestScript.Factory factory = scriptEngine.compile(null, script, PainlessTestScript.CONTEXT, compileParams);
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
package org.elasticsearch.painless;
|
package org.elasticsearch.painless;
|
||||||
|
|
||||||
public class StaticTest {
|
public class StaticTestObject {
|
||||||
public static int staticAddIntsTest(int x, int y) {
|
public static int staticAddIntsTest(int x, int y) {
|
||||||
return x + y;
|
return x + y;
|
||||||
}
|
}
|
|
@ -20,12 +20,12 @@
|
||||||
package org.elasticsearch.painless.node;
|
package org.elasticsearch.painless.node;
|
||||||
|
|
||||||
import org.elasticsearch.painless.CompilerSettings;
|
import org.elasticsearch.painless.CompilerSettings;
|
||||||
import org.elasticsearch.painless.FeatureTest;
|
import org.elasticsearch.painless.FeatureTestObject;
|
||||||
import org.elasticsearch.painless.Locals.Variable;
|
import org.elasticsearch.painless.Locals.Variable;
|
||||||
import org.elasticsearch.painless.Location;
|
import org.elasticsearch.painless.Location;
|
||||||
import org.elasticsearch.painless.Operation;
|
import org.elasticsearch.painless.Operation;
|
||||||
import org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript;
|
|
||||||
import org.elasticsearch.painless.ScriptClassInfo;
|
import org.elasticsearch.painless.ScriptClassInfo;
|
||||||
|
import org.elasticsearch.painless.action.PainlessExecuteAction.PainlessTestScript;
|
||||||
import org.elasticsearch.painless.antlr.Walker;
|
import org.elasticsearch.painless.antlr.Walker;
|
||||||
import org.elasticsearch.painless.lookup.PainlessCast;
|
import org.elasticsearch.painless.lookup.PainlessCast;
|
||||||
import org.elasticsearch.painless.lookup.PainlessClass;
|
import org.elasticsearch.painless.lookup.PainlessClass;
|
||||||
|
@ -35,8 +35,10 @@ import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
|
||||||
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
|
import org.elasticsearch.painless.lookup.PainlessLookupUtility;
|
||||||
import org.elasticsearch.painless.lookup.PainlessMethod;
|
import org.elasticsearch.painless.lookup.PainlessMethod;
|
||||||
import org.elasticsearch.painless.spi.Whitelist;
|
import org.elasticsearch.painless.spi.Whitelist;
|
||||||
|
import org.elasticsearch.painless.spi.WhitelistLoader;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -49,7 +51,6 @@ import static org.elasticsearch.painless.node.SSource.MainMethodReserved;
|
||||||
* Tests {@link Object#toString} implementations on all extensions of {@link ANode}.
|
* Tests {@link Object#toString} implementations on all extensions of {@link ANode}.
|
||||||
*/
|
*/
|
||||||
public class NodeToStringTests extends ESTestCase {
|
public class NodeToStringTests extends ESTestCase {
|
||||||
private final PainlessLookup painlessLookup = PainlessLookupBuilder.buildFromWhitelists(Whitelist.BASE_WHITELISTS);
|
|
||||||
|
|
||||||
public void testEAssignment() {
|
public void testEAssignment() {
|
||||||
assertToString(
|
assertToString(
|
||||||
|
@ -379,10 +380,11 @@ public class NodeToStringTests extends ESTestCase {
|
||||||
+ "return a.length");
|
+ "return a.length");
|
||||||
assertToString(
|
assertToString(
|
||||||
"(SSource\n"
|
"(SSource\n"
|
||||||
+ " (SDeclBlock (SDeclaration org.elasticsearch.painless.FeatureTest a (ENewObj org.elasticsearch.painless.FeatureTest)))\n"
|
+ " (SDeclBlock (SDeclaration org.elasticsearch.painless.FeatureTestObject a"
|
||||||
|
+ " (ENewObj org.elasticsearch.painless.FeatureTestObject)))\n"
|
||||||
+ " (SExpression (EAssignment (PField (EVariable a) x) = (ENumeric 10)))\n"
|
+ " (SExpression (EAssignment (PField (EVariable a) x) = (ENumeric 10)))\n"
|
||||||
+ " (SReturn (PField (EVariable a) x)))",
|
+ " (SReturn (PField (EVariable a) x)))",
|
||||||
"org.elasticsearch.painless.FeatureTest a = new org.elasticsearch.painless.FeatureTest();\n"
|
"org.elasticsearch.painless.FeatureTestObject a = new org.elasticsearch.painless.FeatureTestObject();\n"
|
||||||
+ "a.x = 10;\n"
|
+ "a.x = 10;\n"
|
||||||
+ "return a.x");
|
+ "return a.x");
|
||||||
}
|
}
|
||||||
|
@ -497,10 +499,10 @@ public class NodeToStringTests extends ESTestCase {
|
||||||
|
|
||||||
public void testPSubShortcut() {
|
public void testPSubShortcut() {
|
||||||
Location l = new Location(getTestName(), 0);
|
Location l = new Location(getTestName(), 0);
|
||||||
PainlessClass s = painlessLookup.lookupPainlessClass(FeatureTest.class);
|
PainlessClass s = painlessLookup.lookupPainlessClass(FeatureTestObject.class);
|
||||||
PainlessMethod getter = s.methods.get(PainlessLookupUtility.buildPainlessMethodKey("getX", 0));
|
PainlessMethod getter = s.methods.get(PainlessLookupUtility.buildPainlessMethodKey("getX", 0));
|
||||||
PainlessMethod setter = s.methods.get(PainlessLookupUtility.buildPainlessMethodKey("setX", 1));
|
PainlessMethod setter = s.methods.get(PainlessLookupUtility.buildPainlessMethodKey("setX", 1));
|
||||||
PSubShortcut node = new PSubShortcut(l, "x", FeatureTest.class.getName(), getter, setter);
|
PSubShortcut node = new PSubShortcut(l, "x", FeatureTestObject.class.getName(), getter, setter);
|
||||||
node.prefix = new EVariable(l, "a");
|
node.prefix = new EVariable(l, "a");
|
||||||
assertEquals("(PSubShortcut (EVariable a) x)", node.toString());
|
assertEquals("(PSubShortcut (EVariable a) x)", node.toString());
|
||||||
assertEquals("(PSubNullSafeCallInvoke (PSubShortcut (EVariable a) x))",
|
assertEquals("(PSubNullSafeCallInvoke (PSubShortcut (EVariable a) x))",
|
||||||
|
@ -892,6 +894,14 @@ public class NodeToStringTests extends ESTestCase {
|
||||||
+ "}");
|
+ "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final PainlessLookup painlessLookup;
|
||||||
|
|
||||||
|
public NodeToStringTests() {
|
||||||
|
List<Whitelist> whitelists = new ArrayList<>(Whitelist.BASE_WHITELISTS);
|
||||||
|
whitelists.add(WhitelistLoader.loadFromResourceFiles(Whitelist.class, "org.elasticsearch.painless.test"));
|
||||||
|
painlessLookup = PainlessLookupBuilder.buildFromWhitelists(whitelists);
|
||||||
|
}
|
||||||
|
|
||||||
private void assertToString(String expected, String code) {
|
private void assertToString(String expected, String code) {
|
||||||
assertEquals(expected, walk(code).toString());
|
assertEquals(expected, walk(code).toString());
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,29 @@
|
||||||
class org.elasticsearch.painless.BindingsTests$BindingsTestScript {
|
class org.elasticsearch.painless.BindingsTests$BindingsTestScript {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class org.elasticsearch.painless.FeatureTestObject no_import {
|
||||||
|
int z
|
||||||
|
()
|
||||||
|
(int,int)
|
||||||
|
int getX()
|
||||||
|
int getY()
|
||||||
|
Integer getI()
|
||||||
|
void setX(int)
|
||||||
|
void setY(int)
|
||||||
|
void setI(Integer)
|
||||||
|
boolean overloadedStatic()
|
||||||
|
boolean overloadedStatic(boolean)
|
||||||
|
int staticNumberTest(Number)
|
||||||
|
Double mixedAdd(int, Byte, char, Float)
|
||||||
|
Object twoFunctionsOfX(Function,Function)
|
||||||
|
void listInput(List)
|
||||||
|
int org.elasticsearch.painless.FeatureTestAugmentationObject getTotal()
|
||||||
|
int org.elasticsearch.painless.FeatureTestAugmentationObject addToTotal(int)
|
||||||
|
}
|
||||||
|
|
||||||
static_import {
|
static_import {
|
||||||
|
int staticAddIntsTest(int, int) from_class org.elasticsearch.painless.StaticTestObject
|
||||||
|
float staticAddFloatsTest(float, float) from_class org.elasticsearch.painless.FeatureTestObject
|
||||||
int addWithState(int, int, int, double) bound_to org.elasticsearch.painless.BindingsTests$BindingTestClass
|
int addWithState(int, int, int, double) bound_to org.elasticsearch.painless.BindingsTests$BindingTestClass
|
||||||
int addThisWithState(BindingsTests.BindingsTestScript, int, int, int, double) bound_to org.elasticsearch.painless.BindingsTests$ThisBindingTestClass
|
int addThisWithState(BindingsTests.BindingsTestScript, int, int, int, double) bound_to org.elasticsearch.painless.BindingsTests$ThisBindingTestClass
|
||||||
int addEmptyThisWithState(BindingsTests.BindingsTestScript, int) bound_to org.elasticsearch.painless.BindingsTests$EmptyThisBindingTestClass
|
int addEmptyThisWithState(BindingsTests.BindingsTestScript, int) bound_to org.elasticsearch.painless.BindingsTests$EmptyThisBindingTestClass
|
||||||
|
|
Loading…
Reference in New Issue