You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/12/12 12:45:04 UTC
[16/47] tinkerpop git commit: TINKERPOP-1562 Added more tests for
plugins/customizers
TINKERPOP-1562 Added more tests for plugins/customizers
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/33460fc1
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/33460fc1
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/33460fc1
Branch: refs/heads/master
Commit: 33460fc159249a503a3ffa9439d0d8c3c72ef0cf
Parents: 03e931d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Nov 23 14:37:26 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Dec 2 06:28:51 2016 -0500
----------------------------------------------------------------------
.../CachedGremlinScriptEngineManager.java | 1 +
.../gremlin/jsr223/DefaultImportCustomizer.java | 2 -
.../gremlin/jsr223/LazyBindingsCustomizer.java | 2 -
.../SingleGremlinScriptEngineManager.java | 2 +-
.../jsr223/DefaultImportCustomizerTest.java | 76 ++++++++++++++++++++
.../jsr223/DefaultScriptCustomizerTest.java | 56 +++++++++++++++
.../jsr223/ScriptFileGremlinPluginTest.java | 61 ++++++++++++++++
.../jsr223/SingleScriptEngineManagerTest.java | 45 ++++++++++++
.../gremlin/jsr223/script-customizer-1.groovy | 3 +
.../gremlin/jsr223/script-customizer-2.groovy | 2 +
pom.xml | 3 +-
11 files changed, 247 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CachedGremlinScriptEngineManager.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CachedGremlinScriptEngineManager.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CachedGremlinScriptEngineManager.java
index 9839b1b..5798e1c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CachedGremlinScriptEngineManager.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CachedGremlinScriptEngineManager.java
@@ -92,6 +92,7 @@ public class CachedGremlinScriptEngineManager extends DefaultGremlinScriptEngine
}
private void registerLookUpInfo(final GremlinScriptEngine engine, final String shortName) {
+ if (null == engine) throw new IllegalArgumentException(String.format("%s is not an available GremlinScriptEngine", shortName));
cache.putIfAbsent(shortName, engine);
engine.getFactory().getExtensions().forEach(ext -> extensionToName.putIfAbsent(ext, shortName));
engine.getFactory().getMimeTypes().forEach(mime -> mimeToName.putIfAbsent(mime, shortName));
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
index fa0965d..3642f97 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
@@ -18,8 +18,6 @@
*/
package org.apache.tinkerpop.gremlin.jsr223;
-import org.apache.tinkerpop.gremlin.util.CoreImports;
-
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/LazyBindingsCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/LazyBindingsCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/LazyBindingsCustomizer.java
index 4117ae5..01ae662 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/LazyBindingsCustomizer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/LazyBindingsCustomizer.java
@@ -18,8 +18,6 @@
*/
package org.apache.tinkerpop.gremlin.jsr223;
-import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer;
-
import javax.script.Bindings;
import java.util.function.Supplier;
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/SingleGremlinScriptEngineManager.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/SingleGremlinScriptEngineManager.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/SingleGremlinScriptEngineManager.java
index 9474368..f9022dc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/SingleGremlinScriptEngineManager.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/SingleGremlinScriptEngineManager.java
@@ -23,7 +23,7 @@ package org.apache.tinkerpop.gremlin.jsr223;
*
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
-public class SingleGremlinScriptEngineManager {
+public final class SingleGremlinScriptEngineManager {
private static final GremlinScriptEngineManager cached = new CachedGremlinScriptEngineManager();
private SingleGremlinScriptEngineManager() {}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizerTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizerTest.java
new file mode 100644
index 0000000..c010aa5
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizerTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.jsr223;
+
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.junit.Test;
+
+import java.lang.reflect.Method;
+import java.time.DayOfWeek;
+import java.util.Arrays;
+import java.util.Collections;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsCollectionContaining.hasItems;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class DefaultImportCustomizerTest {
+ @Test
+ public void shouldReturnAssignedImports() throws Exception {
+ final Method abs = Math.class.getMethod("abs", double.class);
+ final Enum dayOfWeekEnum = DayOfWeek.SATURDAY;
+ final Enum tEnum = T.id;
+ final ImportCustomizer imports = DefaultImportCustomizer.build()
+ .addClassImports(java.awt.Color.class, java.awt.AlphaComposite.class)
+ .addMethodImports(abs)
+ .addEnumImports(dayOfWeekEnum, tEnum).create();
+
+ assertEquals(2, imports.getClassImports().size());
+ assertThat(imports.getClassImports(), hasItems(java.awt.Color.class, java.awt.AlphaComposite.class));
+
+ assertEquals(1, imports.getMethodImports().size());
+ assertThat(imports.getMethodImports(), hasItems(abs));
+
+ assertEquals(2, imports.getEnumImports().size());
+ assertThat(imports.getEnumImports(), hasItems(dayOfWeekEnum, tEnum));
+ }
+
+ @Test
+ public void shouldReturnAssignedImportsWhenBuiltViaCollections() throws Exception {
+ final Method abs = Math.class.getMethod("abs", double.class);
+ final Enum dayOfWeekEnum = DayOfWeek.SATURDAY;
+ final Enum tEnum = T.id;
+ final ImportCustomizer imports = DefaultImportCustomizer.build()
+ .addClassImports(Arrays.asList(java.awt.Color.class, java.awt.AlphaComposite.class))
+ .addMethodImports(Collections.singletonList(abs))
+ .addEnumImports(Arrays.asList(dayOfWeekEnum, tEnum)).create();
+
+ assertEquals(2, imports.getClassImports().size());
+ assertThat(imports.getClassImports(), hasItems(java.awt.Color.class, java.awt.AlphaComposite.class));
+
+ assertEquals(1, imports.getMethodImports().size());
+ assertThat(imports.getMethodImports(), hasItems(abs));
+
+ assertEquals(2, imports.getEnumImports().size());
+ assertThat(imports.getEnumImports(), hasItems(dayOfWeekEnum, tEnum));
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizerTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizerTest.java
new file mode 100644
index 0000000..3e4da13
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizerTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.jsr223;
+
+import org.apache.tinkerpop.gremlin.TestHelper;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class DefaultScriptCustomizerTest {
+
+ @Test
+ public void shouldOpenViaPropertiesFileConfig() throws IOException {
+ final File scriptFile1 = TestHelper.generateTempFileFromResource(DefaultScriptCustomizerTest.class, "script-customizer-1.groovy", ".groovy");
+ final File scriptFile2 = TestHelper.generateTempFileFromResource(DefaultScriptCustomizerTest.class, "script-customizer-2.groovy", ".groovy");
+ final Set<File> files = new HashSet<>();
+ files.add(scriptFile1);
+ files.add(scriptFile2);
+ final ScriptCustomizer scripts = new DefaultScriptCustomizer(files);
+
+ final Collection<List<String>> linesInFiles = scripts.getScripts();
+ final String scriptCombined = linesInFiles.stream().flatMap(Collection::stream).map(s -> s + System.lineSeparator()).reduce("", String::concat);
+ assertEquals("x = 1 + 1" + System.lineSeparator() +
+ "y = 10 * x" + System.lineSeparator() +
+ "z = 1 + x + y" + System.lineSeparator() +
+ "l = g.V(z).out()" + System.lineSeparator() +
+ " .group().by('name')" + System.lineSeparator(), scriptCombined);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPluginTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPluginTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPluginTest.java
new file mode 100644
index 0000000..81cf9e6
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPluginTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.jsr223;
+
+import org.apache.tinkerpop.gremlin.TestHelper;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class ScriptFileGremlinPluginTest {
+ @Test
+ public void shouldOpenViaPropertiesFileConfig() throws IOException {
+ final File scriptFile1 = TestHelper.generateTempFileFromResource(DefaultScriptCustomizerTest.class, "script-customizer-1.groovy", ".groovy");
+ final File scriptFile2 = TestHelper.generateTempFileFromResource(DefaultScriptCustomizerTest.class, "script-customizer-2.groovy", ".groovy");
+ final Set<String> files = new HashSet<>();
+ files.add(scriptFile1.getAbsolutePath());
+ files.add(scriptFile2.getAbsolutePath());
+ final GremlinPlugin plugin = ScriptFileGremlinPlugin.build().files(files).create();
+
+ assertThat(plugin.getCustomizers().isPresent(), is(true));
+ assertThat(plugin.getCustomizers().get()[0], instanceOf(ScriptCustomizer.class));
+ final ScriptCustomizer customizer = (ScriptCustomizer) plugin.getCustomizers().get()[0];
+ final Collection<List<String>> linesInFiles = customizer.getScripts();
+ final String scriptCombined = linesInFiles.stream().flatMap(Collection::stream).map(s -> s + System.lineSeparator()).reduce("", String::concat);
+ assertEquals("x = 1 + 1" + System.lineSeparator() +
+ "y = 10 * x" + System.lineSeparator() +
+ "z = 1 + x + y" + System.lineSeparator() +
+ "l = g.V(z).out()" + System.lineSeparator() +
+ " .group().by('name')" + System.lineSeparator(), scriptCombined);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/SingleScriptEngineManagerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/SingleScriptEngineManagerTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/SingleScriptEngineManagerTest.java
new file mode 100644
index 0000000..6765c94
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/SingleScriptEngineManagerTest.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.jsr223;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertSame;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class SingleScriptEngineManagerTest {
+ private static final GremlinScriptEngineManager mgr = SingleGremlinScriptEngineManager.instance();
+
+ @Test
+ public void shouldGetSameInstance() {
+ assertSame(mgr, SingleGremlinScriptEngineManager.instance());
+ assertSame(mgr, SingleGremlinScriptEngineManager.instance());
+ assertSame(mgr, SingleGremlinScriptEngineManager.instance());
+ assertSame(mgr, SingleGremlinScriptEngineManager.instance());
+ assertSame(mgr, SingleGremlinScriptEngineManager.instance());
+ assertSame(mgr, SingleGremlinScriptEngineManager.getInstance());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldNotGetGremlinScriptEngineAsItIsNotRegistered() {
+ mgr.getEngineByName("gremlin-groovy");
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/33460fc1/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-1.groovy
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-1.groovy b/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-1.groovy
new file mode 100644
index 0000000..c2cc784
--- /dev/null
+++ b/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/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/33460fc1/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-2.groovy
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-2.groovy b/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/script-customizer-2.groovy
new file mode 100644
index 0000000..1a4f9a9
--- /dev/null
+++ b/gremlin-core/src/test/resources/org/apache/tinkerpop/gremlin/jsr223/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/33460fc1/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e4d1ba7..0bff1e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -285,9 +285,10 @@ limitations under the License.
<exclude>**/*.xml</exclude>
<exclude>**/*.ldjson</exclude>
<exclude>**/goal.txt</exclude>
- <exclude>**/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/script/*.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/jsr223/script-customizer-*.groovy</exclude>
+ <exclude>**/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/script/*.txt</exclude>
<exclude>**/src/main/ext/**</exclude>
<exclude>**/src/main/static/**</exclude>
<exclude>**/_bsp/**</exclude>