|
@@ -20,24 +20,23 @@
|
|
package org.elasticsearch.painless;
|
|
package org.elasticsearch.painless;
|
|
|
|
|
|
import junit.framework.AssertionFailedError;
|
|
import junit.framework.AssertionFailedError;
|
|
-import org.apache.lucene.search.Scorable;
|
|
|
|
-import org.elasticsearch.common.lucene.ScorerAware;
|
|
|
|
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.PainlessLookup;
|
|
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
|
|
import org.elasticsearch.painless.lookup.PainlessLookupBuilder;
|
|
import org.elasticsearch.painless.spi.Whitelist;
|
|
import org.elasticsearch.painless.spi.Whitelist;
|
|
-import org.elasticsearch.script.ExecutableScript;
|
|
|
|
import org.elasticsearch.script.ScriptContext;
|
|
import org.elasticsearch.script.ScriptContext;
|
|
import org.elasticsearch.script.ScriptException;
|
|
import org.elasticsearch.script.ScriptException;
|
|
import org.elasticsearch.script.SearchScript;
|
|
import org.elasticsearch.script.SearchScript;
|
|
import org.elasticsearch.test.ESTestCase;
|
|
import org.elasticsearch.test.ESTestCase;
|
|
import org.junit.Before;
|
|
import org.junit.Before;
|
|
|
|
|
|
|
|
+import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
+import static org.elasticsearch.painless.PainlessExecuteAction.PainlessTestScript;
|
|
import static org.elasticsearch.painless.node.SSource.MainMethodReserved;
|
|
import static org.elasticsearch.painless.node.SSource.MainMethodReserved;
|
|
import static org.hamcrest.Matchers.hasSize;
|
|
import static org.hamcrest.Matchers.hasSize;
|
|
|
|
|
|
@@ -69,7 +68,7 @@ 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(SearchScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
contexts.put(SearchScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
- contexts.put(ExecutableScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
|
|
|
|
+ contexts.put(PainlessTestScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
return contexts;
|
|
return contexts;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -87,11 +86,11 @@ public abstract class ScriptTestCase extends ESTestCase {
|
|
public Object exec(String script, Map<String, Object> vars, boolean picky) {
|
|
public Object exec(String script, Map<String, Object> vars, boolean picky) {
|
|
Map<String,String> compilerSettings = new HashMap<>();
|
|
Map<String,String> compilerSettings = new HashMap<>();
|
|
compilerSettings.put(CompilerSettings.INITIAL_CALL_SITE_DEPTH, random().nextBoolean() ? "0" : "10");
|
|
compilerSettings.put(CompilerSettings.INITIAL_CALL_SITE_DEPTH, random().nextBoolean() ? "0" : "10");
|
|
- return exec(script, vars, compilerSettings, null, picky);
|
|
|
|
|
|
+ return exec(script, vars, compilerSettings, picky);
|
|
}
|
|
}
|
|
|
|
|
|
/** Compiles and returns the result of {@code script} with access to {@code vars} and compile-time parameters */
|
|
/** Compiles and returns the result of {@code script} with access to {@code vars} and compile-time parameters */
|
|
- public Object exec(String script, Map<String, Object> vars, Map<String,String> compileParams, Scorable scorer, 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, GenericElasticsearchScript.class);
|
|
ScriptClassInfo scriptClassInfo = new ScriptClassInfo(PAINLESS_LOOKUP, GenericElasticsearchScript.class);
|
|
@@ -99,15 +98,12 @@ public abstract class ScriptTestCase extends ESTestCase {
|
|
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, PAINLESS_LOOKUP, null);
|
|
|
|
|
|
+ scriptClassInfo, new MainMethodReserved(), getTestName(), script, pickySettings, PAINLESS_LOOKUP, null);
|
|
}
|
|
}
|
|
// test actual script execution
|
|
// test actual script execution
|
|
- ExecutableScript.Factory factory = scriptEngine.compile(null, script, ExecutableScript.CONTEXT, compileParams);
|
|
|
|
- ExecutableScript executableScript = factory.newInstance(vars);
|
|
|
|
- if (scorer != null) {
|
|
|
|
- ((ScorerAware)executableScript).setScorer(scorer);
|
|
|
|
- }
|
|
|
|
- return executableScript.run();
|
|
|
|
|
|
+ PainlessTestScript.Factory factory = scriptEngine.compile(null, script, PainlessTestScript.CONTEXT, compileParams);
|
|
|
|
+ PainlessTestScript testScript = factory.newInstance(vars == null ? Collections.emptyMap() : vars);
|
|
|
|
+ return testScript.execute();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|