|
@@ -28,6 +28,8 @@ import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
+import static org.hamcrest.Matchers.equalTo;
|
|
|
+
|
|
|
public class FactoryTests extends ScriptTestCase {
|
|
|
|
|
|
@Override
|
|
@@ -40,6 +42,7 @@ public class FactoryTests extends ScriptTestCase {
|
|
|
contexts.put(TemplateScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
|
contexts.put(VoidReturnTestScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
|
contexts.put(FactoryTestConverterScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
|
+ contexts.put(DocFieldsTestScript.CONTEXT, Whitelist.BASE_WHITELISTS);
|
|
|
|
|
|
return contexts;
|
|
|
}
|
|
@@ -183,6 +186,8 @@ public class FactoryTests extends ScriptTestCase {
|
|
|
FactoryTestScript script = factory.newInstance(Collections.singletonMap("test", 2));
|
|
|
assertEquals(4, script.execute(2));
|
|
|
assertEquals(5, script.execute(3));
|
|
|
+ // The factory interface doesn't define `docFields` so we don't generate it.
|
|
|
+ expectThrows(NoSuchMethodException.class, () -> factory.getClass().getMethod("docFields"));
|
|
|
script = factory.newInstance(Collections.singletonMap("test", 3));
|
|
|
assertEquals(5, script.execute(2));
|
|
|
assertEquals(2, script.execute(-1));
|
|
@@ -369,4 +374,31 @@ public class FactoryTests extends ScriptTestCase {
|
|
|
FactoryTestConverterScript.CONTEXT, Collections.emptyMap()));
|
|
|
assertEquals(cce.getMessage(), "Cannot cast from [boolean] to [long[]].");
|
|
|
}
|
|
|
+
|
|
|
+ public abstract static class DocFieldsTestScript {
|
|
|
+ public static final ScriptContext<DocFieldsTestScript.Factory> CONTEXT = new ScriptContext<>(
|
|
|
+ "test",
|
|
|
+ DocFieldsTestScript.Factory.class
|
|
|
+ );
|
|
|
+
|
|
|
+ public interface Factory {
|
|
|
+ DocFieldsTestScript newInstance();
|
|
|
+
|
|
|
+ List<String> docFields();
|
|
|
+ }
|
|
|
+
|
|
|
+ public static final String[] PARAMETERS = new String[] {};
|
|
|
+
|
|
|
+ public abstract String execute();
|
|
|
+
|
|
|
+ public final Map<String, String> getDoc() {
|
|
|
+ return Map.of("cat", "meow", "dog", "woof");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testDocFields() {
|
|
|
+ DocFieldsTestScript.Factory f = scriptEngine.compile("test", "doc['cat'] + doc['dog']", DocFieldsTestScript.CONTEXT, Map.of());
|
|
|
+ assertThat(f.docFields(), equalTo(List.of("cat", "dog")));
|
|
|
+ assertThat(f.newInstance().execute(), equalTo("meowwoof"));
|
|
|
+ }
|
|
|
}
|