TINKERPOP-1562 Added more tests for the GremlnPluginAdapter
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/35c8fcd6 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/35c8fcd6 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/35c8fcd6 Branch: refs/heads/master Commit: 35c8fcd651cf0f4788eb4e0435ed7fa966304d5c Parents: 33460fc Author: Stephen Mallette <sp...@genoprime.com> Authored: Wed Nov 23 15:36:13 2016 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Fri Dec 2 06:28:51 2016 -0500 ---------------------------------------------------------------------- .../groovy/plugin/GremlinPluginAdapterTest.java | 70 ++++++++++++++++++++ .../groovy/plugin/script-customizer-1.groovy | 3 + .../groovy/plugin/script-customizer-2.groovy | 2 + pom.xml | 1 + 4 files changed, 76 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/35c8fcd6/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java ---------------------------------------------------------------------- diff --git a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java index dd582b1..c3ade04 100644 --- a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java +++ b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java @@ -18,12 +18,28 @@ */ package org.apache.tinkerpop.gremlin.console.groovy.plugin; +import org.apache.tinkerpop.gremlin.TestHelper; import org.apache.tinkerpop.gremlin.console.plugin.PluggedIn; +import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer; +import org.apache.tinkerpop.gremlin.jsr223.Customizer; +import org.apache.tinkerpop.gremlin.jsr223.DefaultBindingsCustomizer; +import org.apache.tinkerpop.gremlin.jsr223.DefaultScriptCustomizer; +import org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin; import org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin; +import org.apache.tinkerpop.gremlin.jsr223.ScriptCustomizer; +import org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin; import org.junit.Test; +import javax.script.Bindings; +import javax.script.SimpleBindings; +import java.io.File; import java.time.DayOfWeek; import java.time.temporal.TemporalAccessor; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.Set; import static org.hamcrest.MatcherAssert.assertThat; @@ -57,4 +73,58 @@ public class GremlinPluginAdapterTest { assertThat(imports, hasItems("import static " + DayOfWeek.class.getCanonicalName() + ".from")); assertThat(imports, hasItems("import static " + DayOfWeek.class.getCanonicalName() + ".values")); } + + @Test + public void shouldAdaptForScriptCustomizer() throws Exception { + final File scriptFile1 = TestHelper.generateTempFileFromResource(GremlinPluginAdapterTest.class, "script-customizer-1.groovy", ".groovy"); + final File scriptFile2 = TestHelper.generateTempFileFromResource(GremlinPluginAdapterTest.class, "script-customizer-2.groovy", ".groovy"); + final Set<String> files = new HashSet<>(); + files.add(scriptFile1.getAbsolutePath()); + files.add(scriptFile2.getAbsolutePath()); + final ScriptFileGremlinPlugin plugin = ScriptFileGremlinPlugin.build().files(files).create(); + final PluggedIn.GremlinPluginAdapter adapter = new PluggedIn.GremlinPluginAdapter(plugin, null, null); + + assertEquals(plugin.getName(), adapter.getName()); + + final List<String> evals = new ArrayList<>(); + final SpyPluginAcceptor spy = new SpyPluginAcceptor(evals::add); + adapter.pluginTo(spy); + + assertEquals("x = 1 + 1\n" + + "y = 10 * x\n" + + "z = 1 + x + y", evals.get(0)); + assertEquals("l = g.V(z).out()\n" + + " .group().by('name')", evals.get(1)); + } + + @Test + public void shouldAdaptForBindingsCustomizer() throws Exception { + final Bindings bindings = new SimpleBindings(); + bindings.put("x", 1); + bindings.put("y", "yes"); + bindings.put("z", true); + final BindingsCustomizer bindingsCustomizer = new DefaultBindingsCustomizer(bindings); + final GremlinPlugin plugin = new GremlinPlugin() { + @Override + public String getName() { + return "anon-bindings"; + } + + @Override + public Optional<Customizer[]> getCustomizers(final String scriptEngineName) { + return Optional.of(new Customizer[]{bindingsCustomizer}); + } + }; + final PluggedIn.GremlinPluginAdapter adapter = new PluggedIn.GremlinPluginAdapter(plugin, null, null); + + assertEquals(plugin.getName(), adapter.getName()); + + final SpyPluginAcceptor spy = new SpyPluginAcceptor(); + adapter.pluginTo(spy); + + final Map<String,Object> bindingsFromSpy = spy.getBindings(); + assertEquals(1, bindingsFromSpy.get("x")); + assertEquals("yes", bindingsFromSpy.get("y")); + assertEquals(true, bindingsFromSpy.get("z")); + } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/35c8fcd6/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-1.groovy ---------------------------------------------------------------------- diff --git a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-1.groovy b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-1.groovy new file mode 100644 index 0000000..c2cc784 --- /dev/null +++ b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-1.groovy @@ -0,0 +1,3 @@ +x = 1 + 1 +y = 10 * x +z = 1 + x + y \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/35c8fcd6/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-2.groovy ---------------------------------------------------------------------- diff --git a/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-2.groovy b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-2.groovy new file mode 100644 index 0000000..1a4f9a9 --- /dev/null +++ b/gremlin-console/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-2.groovy @@ -0,0 +1,2 @@ +l = g.V(z).out() + .group().by('name') \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/35c8fcd6/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 0bff1e7..37c7c7e 100644 --- a/pom.xml +++ b/pom.xml @@ -287,6 +287,7 @@ limitations under the License. <exclude>**/goal.txt</exclude> <exclude>**/src/main/resources/META-INF/services/**</exclude> <exclude>**/src/test/resources/META-INF/services/**</exclude> + <exclude>**/src/test/resources/org/apache/tinkerpop/gremlin/console/groovy/plugin/script-customizer-*.groovy</exclude> <exclude>**/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-*.groovy</exclude> <exclude>**/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/script/*.txt</exclude> <exclude>**/src/main/ext/**</exclude>