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 2018/05/19 11:17:59 UTC

[1/8] tinkerpop git commit: TINKERPOP-1962 GroovyTranslator handles empty maps properly now. [Forced Update!]

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1968 39bab57fd -> 97417be7a (forced update)


TINKERPOP-1962 GroovyTranslator handles empty maps properly now.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4e8b4cff
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4e8b4cff
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4e8b4cff

Branch: refs/heads/TINKERPOP-1968
Commit: 4e8b4cff058298d0cb43be1402a14d77f22a53ac
Parents: 288b455
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 9 09:16:45 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sun May 13 11:24:02 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                  |  1 +
 .../gremlin/groovy/jsr223/GroovyTranslatorTest.java | 16 +++++++++++++---
 .../gremlin/groovy/jsr223/GroovyTranslator.java     |  6 +++++-
 3 files changed, 19 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4e8b4cff/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 41d83c4..c7717d7 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-10]]
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
+* Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 
 [[release-3-2-9]]
 === TinkerPop 3.2.9 (Release Date: May 8, 2018)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4e8b4cff/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
index 08451a4..56f9699 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
@@ -38,9 +38,11 @@ import javax.script.Bindings;
 import javax.script.SimpleBindings;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.function.Function;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -119,12 +121,20 @@ public class GroovyTranslatorTest extends AbstractGremlinTest {
     @Test
     @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
     public void shouldHandleMaps() {
-        GraphTraversalSource g = graph.traversal();
-        String script = GroovyTranslator.of("g").translate(g.V().id().is(new LinkedHashMap() {{
+        final GraphTraversalSource g = graph.traversal();
+        final String script = GroovyTranslator.of("g").translate(g.V().id().is(new LinkedHashMap<Object,Object>() {{
             put(3, "32");
             put(Arrays.asList(1, 2, 3.1d), 4);
         }}).asAdmin().getBytecode());
-        assertEquals(script, "g.V().id().is([((int) 3):(\"32\"),([(int) 1, (int) 2, 3.1d]):((int) 4)])");
+        assertEquals("g.V().id().is([((int) 3):(\"32\"),([(int) 1, (int) 2, 3.1d]):((int) 4)])", script);
+    }
+
+    @Test
+    public void shouldHandleEmptyMaps() {
+        final Function identity = new Lambda.OneArgLambda("it.get()", "gremlin-groovy");
+        final GraphTraversalSource g = graph.traversal();
+        final String script = GroovyTranslator.of("g").translate(g.inject(Collections.emptyMap()).map(identity).asAdmin().getBytecode());
+        assertEquals("g.inject([]).map({it.get()})", script);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4e8b4cff/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
index b6410ec..6e86ce9 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
@@ -137,7 +137,11 @@ public final class GroovyTranslator implements Translator.ScriptTranslator {
                         append(convertToString(entry.getValue())).
                         append("),");
             }
-            map.deleteCharAt(map.length() - 1);
+
+            // only need to remove this last bit if entries were added
+            if (!((Map<?, ?>) object).isEmpty())
+                map.deleteCharAt(map.length() - 1);
+
             return map.append("]").toString();
         } else if (object instanceof Long)
             return object + "L";


[5/8] tinkerpop git commit: TINKERPOP-1968 Configured all the match() tests for GLV

Posted by sp...@apache.org.
TINKERPOP-1968 Configured all the match() tests for GLV

These were ignored because grateful dead wasn't an available graph, buuuuut it's been available for a while now so i'm not sure why those weren't setup.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d97f93df
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d97f93df
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d97f93df

Branch: refs/heads/TINKERPOP-1968
Commit: d97f93df27d54217e391629ada3a9a046c757593
Parents: 555ffd9
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 16:17:11 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat May 19 07:17:45 2018 -0400

----------------------------------------------------------------------
 .../ModernGraphTypeInformation.cs               |   3 +-
 gremlin-test/features/map/Match.feature         | 134 ++++++++++++++
 gremlin-test/features/map/Order.feature         | 173 +++++++++++++++++++
 gremlin-test/features/map/Properties.feature    |  14 ++
 .../gremlin/process/FeatureCoverageTest.java    |  16 --
 5 files changed, 323 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d97f93df/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
index 327a50a..7489b44 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
@@ -39,7 +39,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
             {"lang", typeof(string)},
             {"weight", typeof(float)},
             {"foo", typeof(object)}, // used when for invalid property key lookups
-            {"friendWeight", typeof(float)}  // used in an AddVertex.feature test
+            {"friendWeight", typeof(float)},  // used in an AddVertex.feature test
+            {"performances", typeof(int)} // grateful dead graph
         };
         
         /// <summary>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d97f93df/gremlin-test/features/map/Match.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Match.feature b/gremlin-test/features/map/Match.feature
index 55dffcf..73afd71 100644
--- a/gremlin-test/features/map/Match.feature
+++ b/gremlin-test/features/map/Match.feature
@@ -393,3 +393,137 @@ Feature: Step - match()
       | d[0].l |
       | d[0].l |
 
+  Scenario: g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").in("sungBy").as("b"),
+                  __.as("a").in("writtenBy").as("c"),
+                  __.as("b").out("writtenBy").as("d"),
+                  __.as("c").out("sungBy").as("d"),
+                  __.as("d").has("name", "Garcia"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[CANT COME DOWN]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[THE ONLY TIME IS NOW]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+
+  Scenario: g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").has("song", "name", "HERE COMES SUNSHINE"),
+                  __.as("a").map(__.inE("followedBy").values("weight").mean()).as("b"),
+                  __.as("a").inE("followedBy").as("c"),
+                  __.as("c").filter(__.values("weight").where(P.gte("b"))).outV().as("d")).
+            select("d").by("name")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | THE MUSIC NEVER STOPPED |
+      | PROMISED LAND           |
+      | PLAYING IN THE BAND     |
+      | CASEY JONES             |
+      | BIG RIVER               |
+      | EL PASO                 |
+      | LIBERTY                 |
+      | LOOKS LIKE RAIN         |
+
+  Scenario: g_V_matchXa_0sungBy_b__a_0sungBy_c__b_writtenBy_d__c_writtenBy_e__d_hasXname_George_HarisonX__e_hasXname_Bob_MarleyXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").in("sungBy").as("b"),
+                  __.as("a").in("sungBy").as("c"),
+                  __.as("b").out("writtenBy").as("d"),
+                  __.as("c").out("writtenBy").as("e"),
+                  __.as("d").has("name", "George_Harrison"),
+                  __.as("e").has("name", "Bob_Marley"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[I WANT TO TELL YOU]","c":"v[STIR IT UP]","d":"v[George_Harrison]","e":"v[Bob_Marley]"}] |
+
+  Scenario: g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__a_0sungBy_bX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").has("name", "Garcia"),
+                  __.as("a").in("writtenBy").as("b"),
+                  __.as("a").in("sungBy").as("b"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]"}] |
+
+  Scenario: g_V_hasLabelXsongsX_matchXa_name_b__a_performances_cX_selectXb_cX_count
+    Given the grateful graph
+    And the traversal of
+      """
+       g.V().hasLabel("song").match(
+                    __.as("a").values("name").as("b"),
+                    __.as("a").values("performances").as("c")).select("b", "c").count()
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | d[584].l |
+
+  Scenario: g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").out("followedBy").count().is(P.gt(10)).as("b"),
+                  __.as("a").in("followedBy").count().is(P.gt(10)).as("b")).count()
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | d[6].l |
+
+  Scenario: g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").in("sungBy").as("b"),
+                  __.as("a").in("writtenBy").as("c"),
+                  __.as("b").out("writtenBy").as("d")).
+            where(__.as("c").out("sungBy").as("d")).
+            where(__.as("d").has("name", "Garcia"))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CREAM PUFF WAR]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CREAM PUFF WAR]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[CRYPTICAL ENVELOPMENT]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[CANT COME DOWN]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+      | m[{"a":"v[Grateful_Dead]","b":"v[THE ONLY TIME IS NOW]","c":"v[DOWN SO LONG]","d":"v[Garcia]"}] |
+
+  Scenario: g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().match(__.as("a").has("name", "Garcia"),
+                  __.as("a").in("writtenBy").as("b"),
+                  __.as("b").out("followedBy").as("c"),
+                  __.as("c").out("writtenBy").as("d"),
+                  __.where("d", P.neq("a")))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[DRUMS]","d":"v[Grateful_Dead]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[THE OTHER ONE]","d":"v[Weir]"}] |
+      | m[{"a":"v[Garcia]","b":"v[CRYPTICAL ENVELOPMENT]","c":"v[WHARF RAT]","d":"v[Hunter]"}] |
+

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d97f93df/gremlin-test/features/map/Order.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Order.feature b/gremlin-test/features/map/Order.feature
index 6dd8ac4..d800812 100644
--- a/gremlin-test/features/map/Order.feature
+++ b/gremlin-test/features/map/Order.feature
@@ -323,3 +323,176 @@ Feature: Step - order()
       | result |
       | m[{"3":"d[87].i","2":"d[58].i","1":"d[29].i","4":"d[29].i"}] |
 
+  Scenario: g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_incrX
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().has("song", "name", "OH BOY").out("followedBy").out("followedBy").order().by("performances").by("songType", Order.decr)
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | v[THE BOXER] |
+      | v[BARBRY ALLEN] |
+      | v[OLLIN ARRAGEED] |
+      | v[GOOD TIME BLUES] |
+      | v[TOM THUMB BLUES] |
+      | v[GIMME SOME LOVIN] |
+      | v[SATISFACTION] |
+      | v[MAYBE YOU KNOW HOW I FEEL] |
+      | v[SPACE] |
+      | v[THIS COULD BE THE LAST TIME] |
+      | v[CHANTING BY THE GYOTO MONKS] |
+      | v[SILENT WAY JAM] |
+      | v[STRONGER THAN DIRT] |
+      | v[MOJO] |
+      | v[FUNICULI FUNICULA] |
+      | v[QUINN THE ESKIMO] |
+      | v[LUCY IN THE SKY] |
+      | v[LOVE THE ONE YOURE WITH] |
+      | v[CHINESE BONES] |
+      | v[OH BOY] |
+      | v[BLACK QUEEN] |
+      | v[BLUES FOR ALLAH] |
+      | v[IF I HAD THE WORLD TO GIVE] |
+      | v[HEY JUDE] |
+      | v[WILLIE AND THE HAND JIVE] |
+      | v[ITS ALL TOO MUCH] |
+      | v[WHY DONT WE DO IT IN THE ROAD] |
+      | v[UNBROKEN CHAIN] |
+      | v[DONT NEED LOVE] |
+      | v[NOBODYS FAULT BUT MINE] |
+      | v[HEAVEN HELP THE FOOL] |
+      | v[BLOW AWAY] |
+      | v[JAM] |
+      | v[SUNSHINE DAYDREAM] |
+      | v[I WILL TAKE YOU HOME] |
+      | v[SAMBA IN THE RAIN] |
+      | v[ON THE ROAD AGAIN] |
+      | v[SPANISH JAM] |
+      | v[EASY TO LOVE YOU] |
+      | v[DEATH DONT HAVE NO MERCY] |
+      | v[SPOONFUL] |
+      | v[CAUTION] |
+      | v[THE RACE IS ON] |
+      | v[SMOKESTACK LIGHTNING] |
+      | v[COMES A TIME] |
+      | v[STANDING ON THE MOON] |
+      | v[KNOCKING ON HEAVENS DOOR] |
+      | v[PICASSO MOON] |
+      | v[FOOLISH HEART] |
+      | v[WAY TO GO HOME] |
+      | v[THE ELEVEN] |
+      | v[VICTIM OR THE CRIME] |
+      | v[PASSENGER] |
+      | v[PASSENGER] |
+      | v[MY BROTHER ESAU] |
+      | v[HELP ON THE WAY] |
+      | v[LAZY LIGHTNING] |
+      | v[CHINA DOLL] |
+      | v[ME AND BOBBY MCGEE] |
+      | v[ALL ALONG THE WATCHTOWER] |
+      | v[CRYPTICAL ENVELOPMENT] |
+      | v[ALABAMA GETAWAY] |
+      | v[CRAZY FINGERS] |
+      | v[CRAZY FINGERS] |
+      | v[WHEN I PAINT MY MASTERPIECE] |
+      | v[LOST SAILOR] |
+      | v[LOST SAILOR] |
+      | v[BLACK THROATED WIND] |
+      | v[IT MUST HAVE BEEN THE ROSES] |
+      | v[IT MUST HAVE BEEN THE ROSES] |
+      | v[BOX OF RAIN] |
+      | v[SHAKEDOWN STREET] |
+      | v[SHAKEDOWN STREET] |
+      | v[IKO IKO] |
+      | v[IKO IKO] |
+      | v[FEEL LIKE A STRANGER] |
+      | v[TOUCH OF GREY] |
+      | v[TOUCH OF GREY] |
+      | v[BROKEDOWN PALACE] |
+      | v[HELL IN A BUCKET] |
+      | v[DARK STAR] |
+      | v[DARK STAR] |
+      | v[FRANKLINS TOWER] |
+      | v[SAINT OF CIRCUMSTANCE] |
+      | v[SAINT OF CIRCUMSTANCE] |
+      | v[THE MUSIC NEVER STOPPED] |
+      | v[COLD RAIN AND SNOW] |
+      | v[FIRE ON THE MOUNTAIN] |
+      | v[MORNING DEW] |
+      | v[THE WHEEL] |
+      | v[THROWING STONES] |
+      | v[I NEED A MIRACLE] |
+      | v[I NEED A MIRACLE] |
+      | v[ALTHEA] |
+      | v[LITTLE RED ROOSTER] |
+      | v[LET IT GROW] |
+      | v[LET IT GROW] |
+      | v[GOING DOWN THE ROAD FEELING BAD] |
+      | v[BIRDSONG] |
+      | v[TERRAPIN STATION] |
+      | v[TERRAPIN STATION] |
+      | v[MAMA TRIED] |
+      | v[FRIEND OF THE DEVIL] |
+      | v[FRIEND OF THE DEVIL] |
+      | v[SCARLET BEGONIAS] |
+      | v[SCARLET BEGONIAS] |
+      | v[BEAT IT ON DOWN THE LINE] |
+      | v[HES GONE] |
+      | v[STELLA BLUE] |
+      | v[UNCLE JOHNS BAND] |
+      | v[UNCLE JOHNS BAND] |
+      | v[CASSIDY] |
+      | v[ONE MORE SATURDAY NIGHT] |
+      | v[BLACK PETER] |
+      | v[BROWN EYED WOMEN] |
+      | v[SUGAREE] |
+      | v[SAMSON AND DELILAH] |
+      | v[SAMSON AND DELILAH] |
+      | v[EYES OF THE WORLD] |
+      | v[EYES OF THE WORLD] |
+      | v[EL PASO] |
+      | v[ESTIMATED PROPHET] |
+      | v[WHARF RAT] |
+      | v[BERTHA] |
+      | v[BIG RIVER] |
+      | v[LOOKS LIKE RAIN] |
+      | v[AROUND AND AROUND] |
+      | v[PROMISED LAND] |
+      | v[GOOD LOVING] |
+      | v[MEXICALI BLUES] |
+      | v[NEW MINGLEWOOD BLUES] |
+      | v[JACK STRAW] |
+      | v[JACK STRAW] |
+      | v[TRUCKING] |
+      | v[TRUCKING] |
+      | v[NOT FADE AWAY] |
+      | v[CHINA CAT SUNFLOWER] |
+      | v[CHINA CAT SUNFLOWER] |
+      | v[PLAYING IN THE BAND] |
+      | v[PLAYING IN THE BAND] |
+      | v[THE OTHER ONE] |
+      | v[SUGAR MAGNOLIA] |
+      | v[SUGAR MAGNOLIA] |
+      | v[ME AND MY UNCLE] |
+
+  Scenario: g_V_hasLabelXsongX_order_byXperfomances_decrX_byXnameX_rangeX110_120X_name
+    Given the grateful graph
+    And the traversal of
+      """
+      g.V().hasLabel("song").order().by("performances", Order.decr).by("name").range(110, 120).values("name")
+      """
+    When iterated to list
+    Then the result should be ordered
+      | result |
+      | WANG DANG DOODLE |
+      | THE ELEVEN |
+      | WAY TO GO HOME |
+      | FOOLISH HEART |
+      | GIMME SOME LOVING |
+      | DUPREES DIAMOND BLUES |
+      | CORRINA |
+      | PICASSO MOON |
+      | KNOCKING ON HEAVENS DOOR |
+      | MEMPHIS BLUES |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d97f93df/gremlin-test/features/map/Properties.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Properties.feature b/gremlin-test/features/map/Properties.feature
index 3c926fa..5e61615 100644
--- a/gremlin-test/features/map/Properties.feature
+++ b/gremlin-test/features/map/Properties.feature
@@ -17,6 +17,20 @@
 
 Feature: Step - properties()
 
+  Scenario: g_V_hasXageX_propertiesXnameX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().has("age").properties("name").value()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | marko |
+      | vadas |
+      | josh  |
+      | peter |
+
   Scenario: g_V_hasXageX_propertiesXname_ageX_value
     Given the modern graph
     And the traversal of

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d97f93df/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 00391bf..670cae9 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -68,9 +68,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SackTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectTest;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import java.io.BufferedReader;
@@ -107,19 +105,6 @@ public class FeatureCoverageTest {
             // GLV suite doesn't support property identifiers and related assertions
             "g_V_hasXageX_properties_hasXid_nameIdX_value",
             "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value",
-            "g_V_hasXageX_propertiesXnameX",
-            // grateful dead graph not supported in GLV suite
-            "g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX",
-            "g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX",
-            "g_V_matchXa_0sungBy_b__a_0sungBy_c__b_writtenBy_d__c_writtenBy_e__d_hasXname_George_HarisonX__e_hasXname_Bob_MarleyXX",
-            "g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__a_0sungBy_bX",
-            "g_V_hasLabelXsongsX_matchXa_name_b__a_performances_cX_selectXb_cX_count",
-            "g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX",
-            "g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX",
-            "get_g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count",
-            "g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count",
-            "g_V_hasXsong_name_OHBOYX_outXfollowedByX_outXfollowedByX_order_byXperformancesX_byXsongType_incrX",
-            "g_V_hasLabelXsongX_order_byXperfomances_decrX_byXnameX_rangeX110_120X_name",
             // Pop tests not organized right for GLVs
             "g_V_valueMap_selectXpop_aX",
             "g_V_selectXa_bX",
@@ -135,7 +120,6 @@ public class FeatureCoverageTest {
             "g_withSackX2X_V_sackXdivX_byXconstantX3_0XX_sack");
 
     @Test
-    // @Ignore("As it stands we won't have all of these tests migrated initially so there is no point to running this in full - it can be flipped on later")
     public void shouldImplementAllProcessTestsAsFeatures() throws Exception {
 
         // TEMPORARY while test framework is under development - all tests should ultimately be included


[3/8] tinkerpop git commit: TINKERPOP-1968 Make Pop tests more GLV friendly

Posted by sp...@apache.org.
TINKERPOP-1968 Make Pop tests more GLV friendly

The java/groovy tests were nicer before, but they don't translate to GLV tests well. Had to change them to get them off the ignore list.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/97417be7
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/97417be7
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/97417be7

Branch: refs/heads/TINKERPOP-1968
Commit: 97417be7a16b07d1e96bf0ee73a90d9f8be45781
Parents: 9f3f9bf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sat May 19 07:16:09 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat May 19 07:17:45 2018 -0400

----------------------------------------------------------------------
 .../traversal/step/map/GroovySelectTest.groovy  |  80 +++++-
 gremlin-test/features/map/Select.feature        | 146 ++++++++++-
 .../process/traversal/step/map/SelectTest.java  | 245 ++++++++++++++++---
 .../gremlin/process/FeatureCoverageTest.java    |   5 -
 4 files changed, 419 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97417be7/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
index 89fc691..1ae322d 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
@@ -172,27 +172,83 @@ public abstract class GroovySelectTest {
         // TINKERPOP-619: select should not throw
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) {
-            final String root = "g.V."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a')" : "select(${pop}, 'a')"))
+        public Traversal<Vertex, Object> get_g_V_selectXaX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a')")
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) {
-            final String root = "g.V."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a', 'b')" : "select(${pop}, 'a', 'b')"))
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a', 'b')")
         }
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) {
-            final String root = "g.V.valueMap."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a')" : "select(${pop}, 'a')"))
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXaX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select('a')")
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) {
-            final String root = "g.V.valueMap."
-            new ScriptTraversal<>(g, "gremlin-groovy", root + (null == pop ? "select('a', 'b')" : "select(${pop}, 'a', 'b')"))
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select('a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXfirst_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.first, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.first, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.first, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.first, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXlast_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.last, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.last, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.last, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.last, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXall_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.all, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select(Pop.all, 'a', 'b')")
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.all, 'a')")
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.valueMap().select(Pop.all, 'a', 'b')")
         }
 
         // when labels don't exist

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97417be7/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature
index 35d9322..023b2a4 100644
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@ -514,4 +514,148 @@ Feature: Step - select()
     Then the result should be unordered
       | result |
       | d[2].l |
-      | d[2].l |
\ No newline at end of file
+      | d[2].l |
+
+  Scenario: g_V_selectXaX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select("a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXa_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select("a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXaX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select("a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXa_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select("a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXfirst_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.first, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXfirst_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.first, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXfirst_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.first, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXfirst_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.first, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXlast_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.last, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXlast_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.last, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXlast_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.last, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXlast_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.last, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXall_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.all, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_selectXall_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().select(Pop.all, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXall_aX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.all, "a")
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_V_valueMap_selectXall_a_bX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().valueMap().select(Pop.all, "a","b")
+      """
+    When iterated to list
+    Then the result should be empty
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97417be7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
index c0486d0..ddbd036 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Pop;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
@@ -109,13 +108,37 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     // TINKERPOP-619: select should not throw
 
-    public abstract Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop);
+    public abstract Traversal<Vertex, Object> get_g_V_selectXaX();
 
-    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop);
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX();
 
-    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop);
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXaX();
 
-    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop);
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_selectXfirst_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_selectXlast_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_selectXall_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX();
+
+    public abstract Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX();
+
+    public abstract Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX();
 
     public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXaX_repeatXout_asXaXX_timesX2X_selectXfirst_aX(final Object v1Id);
 
@@ -502,41 +525,129 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_selectXaX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Object> traversal = get_g_V_selectXaX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXaX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_selectXa_bX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXa_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXaX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXaX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXa_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXa_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXfirst_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXfirst_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXfirst_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXfirst_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXfirst_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXfirst_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXfirst_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXfirst_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXlast_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXlast_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXlast_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXlast_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXlast_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXlast_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_valueMap_selectXlast_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXlast_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXall_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_selectXall_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_selectXall_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_selectXall_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_valueMap_selectXpop_aX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXpop_aX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+    public void g_V_valueMap_selectXall_aX() {
+        final Traversal<Vertex, Object> traversal = get_g_V_valueMap_selectXall_aX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_valueMap_selectXpop_a_bX() {
-        POPS.forEach(pop -> {
-            final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXpop_a_bX(pop);
-            printTraversalForm(traversal);
-            assertEquals(Collections.emptyList(), traversal.toList());
-        });
+    public void g_V_valueMap_selectXall_a_bX() {
+        final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_valueMap_selectXall_a_bX();
+        printTraversalForm(traversal);
+        assertEquals(Collections.emptyList(), traversal.toList());
     }
 
     // when labels don't exist
@@ -788,27 +899,83 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
         // TINKERPOP-619: select should not throw
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_selectXaX(final Pop pop) {
-            final GraphTraversal<Vertex, Vertex> root = g.V();
-            return null == pop ? root.select("a") : root.select(pop, "a");
+        public Traversal<Vertex, Object> get_g_V_selectXaX() {
+            return g.V().select("a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX() {
+            return g.V().select("a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXaX() {
+            return g.V().valueMap().select("a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXa_bX() {
+            return g.V().valueMap().select("a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXfirst_aX() {
+            return g.V().select(Pop.first, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXfirst_a_bX() {
+            return g.V().select(Pop.first, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXfirst_aX() {
+            return g.V().valueMap().select(Pop.first, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXfirst_a_bX() {
+            return g.V().valueMap().select(Pop.first, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXlast_aX() {
+            return g.V().select(Pop.last, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXlast_a_bX() {
+            return g.V().select(Pop.last, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXlast_aX() {
+            return g.V().valueMap().select(Pop.last, "a");
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXlast_a_bX() {
+            return g.V().valueMap().select(Pop.last, "a", "b");
+        }
+
+        @Override
+        public Traversal<Vertex, Object> get_g_V_selectXall_aX() {
+            return g.V().select(Pop.all, "a");
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXa_bX(final Pop pop) {
-            final GraphTraversal<Vertex, Vertex> root = g.V();
-            return null == pop ? root.select("a", "b") : root.select(pop, "a", "b");
+        public Traversal<Vertex, Map<String, Object>> get_g_V_selectXall_a_bX() {
+            return g.V().select(Pop.all, "a", "b");
         }
 
         @Override
-        public Traversal<Vertex, Object> get_g_V_valueMap_selectXpop_aX(final Pop pop) {
-            final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap();
-            return null == pop ? root.select("a") : root.select(pop, "a");
+        public Traversal<Vertex, Object> get_g_V_valueMap_selectXall_aX() {
+            return g.V().valueMap().select(Pop.all, "a");
         }
 
         @Override
-        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXpop_a_bX(final Pop pop) {
-            final GraphTraversal<Vertex, Map<String, Object>> root = g.V().valueMap();
-            return null == pop ? root.select("a", "b") : root.select(pop, "a", "b");
+        public Traversal<Vertex, Map<String, Object>> get_g_V_valueMap_selectXall_a_bX() {
+            return g.V().valueMap().select(Pop.all, "a", "b");
         }
 
         // when labels don't exist

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97417be7/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 670cae9..5c2d8ed 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -105,11 +105,6 @@ public class FeatureCoverageTest {
             // GLV suite doesn't support property identifiers and related assertions
             "g_V_hasXageX_properties_hasXid_nameIdX_value",
             "g_V_hasXageX_properties_hasXid_nameIdAsStringX_value",
-            // Pop tests not organized right for GLVs
-            "g_V_valueMap_selectXpop_aX",
-            "g_V_selectXa_bX",
-            "g_V_valueMap_selectXpop_a_bX",
-            "g_V_selectXaX",
             // assertion doesn't seem to want to work right for embedded lists
             "g_V_asXa_bX_out_asXcX_path_selectXkeysX",
             // ugh - BigInteger?


[7/8] tinkerpop git commit: TINKERPOP-1968 Simplified gremlin server test configuration

Posted by sp...@apache.org.
TINKERPOP-1968 Simplified gremlin server test configuration

There was a fair bit of duplicated configuration for Gremlin Server testing - streamlined that to a single gremlin-server-integration.yaml file and script initializer. Tests had to become more specific as to the graphs that they were executing against as a result.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9c6756c1
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9c6756c1
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9c6756c1

Branch: refs/heads/TINKERPOP-1968
Commit: 9c6756c12c1ea8f90acbf14f476670a4bbfae312
Parents: 23a4e06
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 14:38:04 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat May 19 07:17:45 2018 -0400

----------------------------------------------------------------------
 gremlin-dotnet/test/pom.xml                     |  2 +-
 gremlin-javascript/pom.xml                      |  2 +-
 .../test/integration/remote-connection-tests.js |  2 +-
 .../test/integration/traversal-test.js          |  2 +-
 gremlin-python/pom.xml                          |  2 +-
 .../src/main/jython/tests/conftest.py           |  6 +-
 .../src/main/jython/tests/driver/test_client.py | 14 ++---
 .../driver/test_driver_remote_connection.py     |  4 +-
 .../test_driver_remote_connection_threaded.py   |  4 +-
 gremlin-server/scripts/generate-all.groovy      | 63 --------------------
 gremlin-server/src/assembly/standalone.xml      |  3 -
 .../driver/remote/RemoteGraphProvider.java      |  2 +-
 .../server/GremlinResultSetIntegrateTest.java   | 34 +++++------
 .../server/GremlinServerHttpIntegrateTest.java  | 18 ++----
 .../gremlin/server/ServerTestHelper.java        |  7 ++-
 .../server/util/DefaultGraphManagerTest.java    | 32 +++++++---
 .../remote/gremlin-server-integration.yaml      | 56 -----------------
 .../server/gremlin-server-integration.yaml      | 11 +++-
 .../src/test/scripts/generate-all.groovy        | 31 +++++++++-
 .../src/test/scripts/neo4j-empty.properties     | 33 ++++++++++
 20 files changed, 139 insertions(+), 189 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-dotnet/test/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/pom.xml b/gremlin-dotnet/test/pom.xml
index db1f8ad..f8d3118 100644
--- a/gremlin-dotnet/test/pom.xml
+++ b/gremlin-dotnet/test/pom.xml
@@ -143,7 +143,7 @@ limitations under the License.
                                         </property>
                                         <property>
                                             <name>settingsFile</name>
-                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value>
+                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
                                         </property>
                                         <property>
                                             <name>executionName</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-javascript/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-javascript/pom.xml b/gremlin-javascript/pom.xml
index 4736576..e0a1a4c 100644
--- a/gremlin-javascript/pom.xml
+++ b/gremlin-javascript/pom.xml
@@ -114,7 +114,7 @@ limitations under the License.
                                 </property>
                                 <property>
                                     <name>settingsFile</name>
-                                    <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value>
+                                    <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
                                 </property>
                                 <property>
                                     <name>executionName</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
index 9e115be..afc0e58 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/remote-connection-tests.js
@@ -31,7 +31,7 @@ let connection;
 
 describe('DriverRemoteConnection', function () {
   before(function () {
-    connection = helper.getConnection();
+    connection = helper.getConnection('gmodern');
     return connection.open();
   });
   after(function () {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
index 01dde62..920d998 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
@@ -33,7 +33,7 @@ let connection;
 
 describe('Traversal', function () {
   before(function () {
-    connection = helper.getConnection();
+    connection = helper.getConnection('gmodern');
     return connection.open();
   });
   after(function () {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index a2ab516..13c3454 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -507,7 +507,7 @@ limitations under the License.
                                         </property>
                                         <property>
                                             <name>settingsFile</name>
-                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value>
+                                            <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml</value>
                                         </property>
                                         <property>
                                             <name>executionName</name>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-python/src/main/jython/tests/conftest.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/conftest.py b/gremlin-python/src/main/jython/tests/conftest.py
index 2cd4282..96ded16 100644
--- a/gremlin-python/src/main/jython/tests/conftest.py
+++ b/gremlin-python/src/main/jython/tests/conftest.py
@@ -38,7 +38,7 @@ def connection(request):
     executor = concurrent.futures.ThreadPoolExecutor(5)
     pool = queue.Queue()
     try:
-        conn = Connection('ws://localhost:45940/gremlin', 'g', protocol,
+        conn = Connection('ws://localhost:45940/gremlin', 'gmodern', protocol,
                           lambda: TornadoTransport(), executor, pool)
     except OSError:
         executor.shutdown()
@@ -53,7 +53,7 @@ def connection(request):
 @pytest.fixture
 def client(request):
     try:
-        client = Client('ws://localhost:45940/gremlin', 'g')
+        client = Client('ws://localhost:45940/gremlin', 'gmodern')
     except OSError:
         pytest.skip('Gremlin Server is not running')
     else:
@@ -65,7 +65,7 @@ def client(request):
 @pytest.fixture
 def remote_connection(request):
     try:
-        remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'g')
+        remote_conn = DriverRemoteConnection('ws://localhost:45940/gremlin', 'gmodern')
     except OSError:
         pytest.skip('Gremlin Server is not running')
     else:

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-python/src/main/jython/tests/driver/test_client.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_client.py b/gremlin-python/src/main/jython/tests/driver/test_client.py
index f7b01ce..595aba0 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_client.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_client.py
@@ -28,7 +28,7 @@ __author__ = 'David M. Brown (davebshow@gmail.com)'
 def test_connection(connection):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     results_set = connection.write(message).result()
     future = results_set.all()
     results = future.result()
@@ -51,7 +51,7 @@ def test_client_eval_traversal(client):
 def test_client_bytecode(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     result_set = client.submit(message)
     assert len(result_set.all().result()) == 6
 
@@ -59,7 +59,7 @@ def test_client_bytecode(client):
 def test_iterate_result_set(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     result_set = client.submit(message)
     results = []
     for result in result_set:
@@ -70,7 +70,7 @@ def test_iterate_result_set(client):
 def test_client_async(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     future = client.submitAsync(message)
     result_set = future.result()
     assert len(result_set.all().result()) == 6
@@ -78,10 +78,10 @@ def test_client_async(client):
 
 def test_connection_share(client):
     # Overwrite fixture with pool_size=1 client
-    client = Client('ws://localhost:45940/gremlin', 'g', pool_size=1)
+    client = Client('ws://localhost:45940/gremlin', 'gmodern', pool_size=1)
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     future = client.submitAsync(message)
     future2 = client.submitAsync(message)
 
@@ -97,7 +97,7 @@ def test_connection_share(client):
 def test_multi_conn_pool(client):
     g = Graph().traversal()
     t = g.V()
-    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode})
+    message = RequestMessage('traversal', 'bytecode', {'gremlin': t.bytecode, 'aliases': {'g': 'gmodern'}})
     future = client.submitAsync(message)
     future2 = client.submitAsync(message)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
index 1071493..cd9101e 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection.py
@@ -37,7 +37,7 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 class TestDriverRemoteConnection(object):
     def test_traversals(self, remote_connection):
         statics.load_statics(globals())
-        assert "remoteconnection[ws://localhost:45940/gremlin,g]" == str(remote_connection)
+        assert "remoteconnection[ws://localhost:45940/gremlin,gmodern]" == str(remote_connection)
         g = Graph().traversal().withRemote(remote_connection)
 
         assert long(6) == g.V().count().toList()[0]
@@ -233,7 +233,7 @@ def test_in_tornado_app(remote_connection):
     @gen.coroutine
     def go():
         conn = DriverRemoteConnection(
-            'ws://localhost:45940/gremlin', 'g', pool_size=4)
+            'ws://localhost:45940/gremlin', 'gmodern', pool_size=4)
         g = Graph().traversal().withRemote(conn)
         yield gen.sleep(0)
         assert len(g.V().toList()) == 6

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
index dffd442..49db930 100644
--- a/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
+++ b/gremlin-python/src/main/jython/tests/driver/test_driver_remote_connection_threaded.py
@@ -41,6 +41,7 @@ def test_conns_in_threads(remote_connection):
     child.join()
     child2.join()
 
+
 def test_conn_in_threads(remote_connection):
     q = queue.Queue()
     child = Thread(target=_executor, args=(q, remote_connection))
@@ -53,13 +54,14 @@ def test_conn_in_threads(remote_connection):
     child.join()
     child2.join()
 
+
 def _executor(q, conn):
     close = False
     if not conn:
         # This isn't a fixture so close manually
         close = True
         conn = DriverRemoteConnection(
-            'ws://localhost:45940/gremlin', 'g', pool_size=4)
+            'ws://localhost:45940/gremlin', 'gmodern', pool_size=4)
     try:
         g = Graph().traversal().withRemote(conn)
         future = g.V().promise()

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/scripts/generate-all.groovy
----------------------------------------------------------------------
diff --git a/gremlin-server/scripts/generate-all.groovy b/gremlin-server/scripts/generate-all.groovy
deleted file mode 100644
index 66b1cb4..0000000
--- a/gremlin-server/scripts/generate-all.groovy
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-
-// an init script that returns a Map allows explicit setting of global bindings.
-def globals = [:]
-
-// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook.
-// Note that the name of the key in the "global" map is unimportant.
-globals << [hook : [
-  onStartUp: { ctx ->
-    TinkerFactory.generateClassic(classic)
-    TinkerFactory.generateModern(modern)
-    TinkerFactory.generateTheCrew(crew)
-    grateful.io(gryo()).readGraph('../data/grateful-dead.kryo')
-    TinkerFactory.generateKitchenSink(sink)
-
-    // a wild bit of trickery here. the process tests use an INTEGER id manager when LoadGraphWith is used. this
-    // closure provides a way to to manually override the various id managers for TinkerGraph - the graph on which
-    // all of these remote tests are executed - so that the tests will pass nicely. an alternative might have been
-    // to have a special test TinkerGraph config for setting up the id manager properly, but based on how we do
-    // things now, that test config would have been mixed in with release artifacts and there would have been ugly
-    // exclusions to make packaging work properly.
-    allowSetOfIdManager = { graph, idManagerFieldName ->
-        java.lang.reflect.Field idManagerField = graph.class.getDeclaredField(idManagerFieldName)
-        idManagerField.setAccessible(true)
-        java.lang.reflect.Field modifiersField = java.lang.reflect.Field.class.getDeclaredField("modifiers")
-        modifiersField.setAccessible(true)
-        modifiersField.setInt(idManagerField, modifiersField.getModifiers() & ~java.lang.reflect.Modifier.FINAL)
-
-        idManagerField.set(graph, TinkerGraph.DefaultIdManager.INTEGER)
-    }
-
-    [classic, modern, crew, sink].each{
-      allowSetOfIdManager(it, "vertexIdManager")
-      allowSetOfIdManager(it, "edgeIdManager")
-      allowSetOfIdManager(it, "vertexPropertyIdManager")
-    }
-  }
-] as LifeCycleHook]
-
-// add default TraversalSource instances for each graph instance
-globals << [gclassic : classic.traversal()]
-globals << [gmodern : modern.traversal()]
-globals << [gcrew : crew.traversal()]
-globals << [ggraph : graph.traversal()]
-globals << [ggrateful : grateful.traversal()]
-globals << [gsink : sink.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/assembly/standalone.xml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/assembly/standalone.xml b/gremlin-server/src/assembly/standalone.xml
index cbb862e..f6a3641 100644
--- a/gremlin-server/src/assembly/standalone.xml
+++ b/gremlin-server/src/assembly/standalone.xml
@@ -38,9 +38,6 @@ limitations under the License.
         <fileSet>
             <directory>scripts</directory>
             <outputDirectory>/scripts</outputDirectory>
-            <excludes>
-                <exclude>generate-all.groovy</exclude>
-            </excludes>
         </fileSet>
         <fileSet>
             <directory>../target/docs/htmlsingle</directory>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
index 2c81078..8a1413a 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/driver/remote/RemoteGraphProvider.java
@@ -122,7 +122,7 @@ public class RemoteGraphProvider extends AbstractGraphProvider implements AutoCl
     }
 
     public static void startServer() throws Exception {
-        final InputStream stream = RemoteGraphProvider.class.getResourceAsStream("gremlin-server-integration.yaml");
+        final InputStream stream = GremlinServer.class.getResourceAsStream("gremlin-server-integration.yaml");
         final Settings settings = Settings.read(stream);
         ServerTestHelper.rewritePathsInGremlinServerSettings(settings);
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
index d890b85..81d51df 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinResultSetIntegrateTest.java
@@ -69,12 +69,6 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     private Cluster cluster;
     private Client client;
 
-    @Override
-    public Settings overrideSettings(final Settings settings) {
-        settings.scriptEngines.get("gremlin-groovy").scripts = Collections.singletonList("scripts/generate-modern.groovy");
-        return settings;
-    }
-
     @Before
     public void beforeTest() {
         final MessageSerializer serializer = new GryoMessageSerializerV1d0();
@@ -96,7 +90,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     public void shouldHandleVertexResultFromTraversalBulked() throws Exception {
         final Graph graph = TinkerGraph.open();
         final GraphTraversalSource g = graph.traversal();
-        final Client aliased = client.alias("g");
+        final Client aliased = client.alias("gmodern");
         final ResultSet resultSetUnrolled = aliased.submit(g.V().both().barrier().both().barrier());
         final List<Result> results = resultSetUnrolled.all().get();
 
@@ -106,25 +100,25 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Test
     public void shouldHandleNullResult() throws Exception {
-        final ResultSet results = client.submit("g.V().drop().iterate();null");
+        final ResultSet results = client.submit("gmodern.V().drop().iterate();null");
         assertNull(results.all().get().get(0).getObject());
     }
 
     @Test
     public void shouldHandleVoidResult() throws Exception {
-        final ResultSet results = client.submit("g.V().drop().iterate()");
+        final ResultSet results = client.submit("gmodern.V().drop().iterate()");
         assertEquals(0, results.all().get().size());
     }
 
     @Test
     public void shouldHandleEmptyResult() throws Exception {
-        final ResultSet results = client.submit("g.V(100,1000,1000)");
+        final ResultSet results = client.submit("gmodern.V(100,1000,1000)");
         assertEquals(0, results.all().get().size());
     }
 
     @Test
     public void shouldHandleVertexResult() throws Exception {
-        final ResultSet results = client.submit("g.V(1).next()");
+        final ResultSet results = client.submit("gmodern.V(1).next()");
         final Vertex v = results.all().get().get(0).getVertex();
         assertThat(v, instanceOf(DetachedVertex.class));
 
@@ -143,46 +137,46 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
     public void shouldHandleVertexResultWithLiteSerialization() throws Exception {
         final Cluster cluster = TestClientFactory.build().serializer(Serializers.GRYO_LITE_V1D0).create();
         final Client clientLite = cluster.connect();
-        final ResultSet results = clientLite.submit("g.V(1).next()");
+        final ResultSet results = clientLite.submit("gmodern.V(1).next()");
         final Vertex v = results.all().get().get(0).getVertex();
         assertThat(v, instanceOf(ReferenceVertex.class));
 
-        assertEquals(1L, v.id());
+        assertEquals(1, v.id());
         assertEquals("person", v.label());
         assertEquals(0, IteratorUtils.count(v.properties()));
     }
 
     @Test
     public void shouldHandleVertexPropertyResult() throws Exception {
-        final ResultSet results = client.submit("g.V().properties('name').next()");
+        final ResultSet results = client.submit("gmodern.V().properties('name').next()");
         final VertexProperty<String> v = results.all().get().get(0).getVertexProperty();
         assertThat(v, instanceOf(DetachedVertexProperty.class));
     }
 
     @Test
     public void shouldHandleEdgeResult() throws Exception {
-        final ResultSet results = client.submit("g.E().next()");
+        final ResultSet results = client.submit("gmodern.E().next()");
         final Edge e = results.all().get().get(0).getEdge();
         assertThat(e, instanceOf(DetachedEdge.class));
     }
 
     @Test
     public void shouldHandlePropertyResult() throws Exception {
-        final ResultSet results = client.submit("g.E().properties('weight').next()");
+        final ResultSet results = client.submit("gmodern.E().properties('weight').next()");
         final Property<Double> p = results.all().get().get(0).getProperty();
         assertThat(p, instanceOf(DetachedProperty.class));
     }
 
     @Test
     public void shouldHandlePathResult() throws Exception {
-        final ResultSet results = client.submit("g.V().out().path()");
+        final ResultSet results = client.submit("gmodern.V().out().path()");
         final Path p = results.all().get().get(0).getPath();
         assertThat(p, instanceOf(DetachedPath.class));
     }
 
     @Test
     public void shouldHandleTinkerGraphResult() throws Exception {
-        final ResultSet results = client.submit("graph");
+        final ResultSet results = client.submit("modern");
         final Graph graph = results.all().get().get(0).get(TinkerGraph.class);
 
         // test is "lossy for id" because TinkerGraph is configured by default to use the ANY id manager
@@ -193,7 +187,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Test
     public void shouldHandleMapIteratedResult() throws Exception {
-        final ResultSet results = client.submit("g.V().groupCount().by(bothE().count())");
+        final ResultSet results = client.submit("gmodern.V().groupCount().by(bothE().count())");
         final List<Result> resultList = results.all().get();
         final Map m = resultList.get(0).get(HashMap.class);
         assertEquals(2, m.size());
@@ -203,7 +197,7 @@ public class GremlinResultSetIntegrateTest extends AbstractGremlinServerIntegrat
 
     @Test
     public void shouldHandleMapObjectResult() throws Exception {
-        final ResultSet results = client.submit("g.V().groupCount().by(bothE().count()).next()");
+        final ResultSet results = client.submit("gmodern.V().groupCount().by(bothE().count()).next()");
         final List<Result> resultList = results.all().get();
         assertEquals(2, resultList.size());
         final Map.Entry firstEntry = resultList.get(0).get(HashMap.Entry.class);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
index df7b734..1375521 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerHttpIntegrateTest.java
@@ -70,12 +70,6 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
             case "should413OnPostWithResultTooLarge":
                 settings.maxContentLength = 31;
                 break;
-            case "should200OnGETWithGremlinQueryStringArgumentWithIteratorResult":
-            case "should200OnPOSTWithGremlinJsonEndcodedBodyWithIteratorResult":
-            case "should200OnPOSTWithGremlinJsonEndcodedBodyWithIteratorResultAndAliases":
-            case "should200OnGETWithGremlinQueryStringArgumentWithIteratorResultAndAliases":
-                settings.scriptEngines.get("gremlin-groovy").scripts = Collections.singletonList("scripts/generate-classic.groovy");
-                break;
             case "should200OnPOSTTransactionalGraph":
                 deleteDirectory(new File("/tmp/neo4j"));
                 settings.graphs.put("graph", "conf/neo4j-empty.properties");
@@ -354,7 +348,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
     @Test
     public void should200OnGETWithGremlinQueryStringArgumentWithIteratorResult() throws Exception {
         final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=g.V()"));
+        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=gclassic.V()"));
 
         try (final CloseableHttpResponse response = httpclient.execute(httpget)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -369,7 +363,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
     public void should200OnGETWithGremlinQueryStringArgumentWithIteratorResultAndAliases() throws Exception {
         // we can remove this first test when rebindings are completely removed
         final CloseableHttpClient httpclientLegacy = HttpClients.createDefault();
-        final HttpGet httpgetLegacy = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&rebindings.g1=g"));
+        final HttpGet httpgetLegacy = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&rebindings.g1=gclassic"));
 
         try (final CloseableHttpResponse response = httpclientLegacy.execute(httpgetLegacy)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -380,7 +374,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         }
 
         final CloseableHttpClient httpclient = HttpClients.createDefault();
-        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&aliases.g1=g"));
+        final HttpGet httpget = new HttpGet(TestClientFactory.createURLString("?gremlin=g1.V()&aliases.g1=gclassic"));
 
         try (final CloseableHttpResponse response = httpclient.execute(httpget)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -573,7 +567,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         final CloseableHttpClient httpclient = HttpClients.createDefault();
         final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
         httppost.addHeader("Content-Type", "application/json");
-        httppost.setEntity(new StringEntity("{\"gremlin\":\"g.V()\"}", Consts.UTF_8));
+        httppost.setEntity(new StringEntity("{\"gremlin\":\"gclassic.V()\"}", Consts.UTF_8));
 
         try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -613,7 +607,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         final CloseableHttpClient httpclientLegacy = HttpClients.createDefault();
         final HttpPost httppostLegacy = new HttpPost(TestClientFactory.createURLString());
         httppostLegacy.addHeader("Content-Type", "application/json");
-        httppostLegacy.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"rebindings\":{\"g1\":\"g\"}}", Consts.UTF_8));
+        httppostLegacy.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"rebindings\":{\"g1\":\"gclassic\"}}", Consts.UTF_8));
 
         try (final CloseableHttpResponse response = httpclientLegacy.execute(httppostLegacy)) {
             assertEquals(200, response.getStatusLine().getStatusCode());
@@ -626,7 +620,7 @@ public class GremlinServerHttpIntegrateTest extends AbstractGremlinServerIntegra
         final CloseableHttpClient httpclient = HttpClients.createDefault();
         final HttpPost httppost = new HttpPost(TestClientFactory.createURLString());
         httppost.addHeader("Content-Type", "application/json");
-        httppost.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"aliases\":{\"g1\":\"g\"}}", Consts.UTF_8));
+        httppost.setEntity(new StringEntity("{\"gremlin\":\"g1.V()\",\"aliases\":{\"g1\":\"gclassic\"}}", Consts.UTF_8));
 
         try (final CloseableHttpResponse response = httpclient.execute(httppost)) {
             assertEquals(200, response.getStatusLine().getStatusCode());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
index e846673..41352a4 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/ServerTestHelper.java
@@ -33,16 +33,17 @@ public class ServerTestHelper {
      */
     public static void rewritePathsInGremlinServerSettings(final Settings overridenSettings) {
         final String buildDir = System.getProperty("build.dir");
-        final String homeDir = buildDir.substring(0, buildDir.indexOf("gremlin-server") + "gremlin-server".length());
+        final String homeDir = buildDir.substring(0, buildDir.indexOf("gremlin-server") + "gremlin-server".length()) +
+                File.separator + "src" + File.separator + "test" + File.separator +"scripts";
 
         overridenSettings.scriptEngines.get("gremlin-groovy").scripts = overridenSettings.scriptEngines
                 .get("gremlin-groovy").scripts.stream()
-                .map(s -> new File(s).isAbsolute() ? s : homeDir + File.separator + s)
+                .map(s -> new File(s).isAbsolute() ? s : homeDir + s.substring(s.lastIndexOf(File.separator)))
                 .collect(Collectors.toList());
 
         overridenSettings.graphs = overridenSettings.graphs.entrySet().stream()
                 .map(kv -> {
-                    kv.setValue(homeDir + File.separator + kv.getValue());
+                    kv.setValue(homeDir + kv.getValue().substring(kv.getValue().lastIndexOf(File.separator)));
                     return kv;
                 }).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
index 0841ffa..6c0e8b0 100644
--- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
+++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/util/DefaultGraphManagerTest.java
@@ -47,9 +47,14 @@ public class DefaultGraphManagerTest {
         final Set<String> graphNames = graphManager.getGraphNames();
 
         assertNotNull(graphNames);
-        assertEquals(1, graphNames.size());
-
-        assertEquals(graphNames.toArray()[0], "graph");
+        assertEquals(6, graphNames.size());
+
+        assertThat(graphNames.contains("graph"), is(true));
+        assertThat(graphNames.contains("classic"), is(true));
+        assertThat(graphNames.contains("modern"), is(true));
+        assertThat(graphNames.contains("crew"), is(true));
+        assertThat(graphNames.contains("sink"), is(true));
+        assertThat(graphNames.contains("grateful"), is(true));
         assertThat(graphManager.getGraph("graph"), instanceOf(TinkerGraph.class));
     }
 
@@ -60,9 +65,14 @@ public class DefaultGraphManagerTest {
         final Bindings bindings = graphManager.getAsBindings();
 
         assertNotNull(bindings);
-        assertEquals(1, bindings.size());
-        assertThat(bindings.get("graph"), instanceOf(TinkerGraph.class));
+        assertEquals(6, bindings.size());
         assertThat(bindings.containsKey("graph"), is(true));
+        assertThat(bindings.containsKey("classic"), is(true));
+        assertThat(bindings.containsKey("modern"), is(true));
+        assertThat(bindings.containsKey("crew"), is(true));
+        assertThat(bindings.containsKey("sink"), is(true));
+        assertThat(bindings.containsKey("grateful"), is(true));
+        assertThat(bindings.get("graph"), instanceOf(TinkerGraph.class));
     }
 
     @Test
@@ -84,8 +94,14 @@ public class DefaultGraphManagerTest {
 
         final Set<String> graphNames = graphManager.getGraphNames();
         assertNotNull(graphNames);
-        assertEquals(2, graphNames.size());
+        assertEquals(7, graphNames.size());
         assertThat(graphNames.contains("newGraph"), is(true));
+        assertThat(graphNames.contains("graph"), is(true));
+        assertThat(graphNames.contains("classic"), is(true));
+        assertThat(graphNames.contains("modern"), is(true));
+        assertThat(graphNames.contains("crew"), is(true));
+        assertThat(graphNames.contains("sink"), is(true));
+        assertThat(graphNames.contains("grateful"), is(true));
         assertThat(graphManager.getGraph("newGraph"), instanceOf(TinkerGraph.class));
     }
 
@@ -97,14 +113,14 @@ public class DefaultGraphManagerTest {
         graphManager.putGraph("newGraph", graph);
         final Set<String> graphNames = graphManager.getGraphNames();
         assertNotNull(graphNames);
-        assertEquals(2, graphNames.size());
+        assertEquals(7, graphNames.size());
         assertThat(graphNames.contains("newGraph"), is(true));
         assertThat(graphManager.getGraph("newGraph"), instanceOf(TinkerGraph.class));
 
         graphManager.removeGraph("newGraph");
 
         final Set<String> graphNames2 = graphManager.getGraphNames();
-        assertEquals(1, graphNames2.size());
+        assertEquals(6, graphNames2.size());
         assertThat(graphNames2.contains("newGraph"), is(false));
     }
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
deleted file mode 100644
index 7b388aa..0000000
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-# 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.
-
-host: localhost
-port: 45940
-scriptEvaluationTimeout: 30000
-graphs: {
-  graph: conf/tinkergraph-empty.properties,
-  classic: conf/tinkergraph-empty.properties,
-  modern: conf/tinkergraph-empty.properties,
-  crew: conf/tinkergraph-empty.properties,
-  grateful: conf/tinkergraph-empty.properties,
-  sink: conf/tinkergraph-empty.properties}
-plugins:
-  - tinkerpop.tinkergraph
-scriptEngines: {
-  gremlin-groovy: {
-    imports: [java.lang.Math],
-    staticImports: [java.lang.Math.PI],
-    scripts: [scripts/generate-all.groovy]}}
-serializers:
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true}}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }}
-  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}
-processors:
-  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
-metrics: {
-  slf4jReporter: {enabled: true, interval: 180000}}
-strictTransactionManagement: false
-idleConnectionTimeout: 0
-keepAliveInterval: 0
-maxInitialLineLength: 4096
-maxHeaderSize: 8192
-maxChunkSize: 8192
-maxContentLength: 65536
-maxAccumulationBufferComponents: 1024
-resultIterationBatchSize: 64
-writeBufferHighWaterMark: 32768
-writeBufferHighWaterMark: 65536

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
index 3b28020..dcb5299 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml
@@ -19,14 +19,19 @@ host: localhost
 port: 45940
 scriptEvaluationTimeout: 30000
 graphs: {
-  graph: conf/tinkergraph-empty.properties}
+  graph: conf/tinkergraph-empty.properties,
+  classic: conf/tinkergraph-empty.properties,
+  modern: conf/tinkergraph-empty.properties,
+  crew: conf/tinkergraph-empty.properties,
+  grateful: conf/tinkergraph-empty.properties,
+  sink: conf/tinkergraph-empty.properties}
 plugins:
   - tinkerpop.tinkergraph
 scriptEngines: {
   gremlin-groovy: {
     imports: [java.lang.Math],
     staticImports: [java.lang.Math.PI],
-    scripts: [scripts/empty-sample.groovy]}}
+    scripts: [scripts/generate-all.groovy]}}
 serializers:
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
   - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0], custom: [groovy.json.JsonBuilder;org.apache.tinkerpop.gremlin.driver.ser.JsonBuilderGryoSerializer]}}
@@ -48,4 +53,4 @@ maxContentLength: 65536
 maxAccumulationBufferComponents: 1024
 resultIterationBatchSize: 64
 writeBufferLowWaterMark: 32768
-writeBufferHighWaterMark: 65536
+writeBufferHighWaterMark: 65536
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/scripts/generate-all.groovy
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/scripts/generate-all.groovy b/gremlin-server/src/test/scripts/generate-all.groovy
index 108ca5d..ee65bb4 100644
--- a/gremlin-server/src/test/scripts/generate-all.groovy
+++ b/gremlin-server/src/test/scripts/generate-all.groovy
@@ -17,6 +17,11 @@
  * under the License.
  */
 
+// An example of an initialization script that can be configured to run in Gremlin Server.
+// Functions defined here will go into global cache and will not be removed from there
+// unless there is a reset of the ScriptEngine.
+def addItUp(x, y) { x + y }
+
 // an init script that returns a Map allows explicit setting of global bindings.
 def globals = [:]
 
@@ -27,16 +32,38 @@ globals << [hook : [
     TinkerFactory.generateClassic(classic)
     TinkerFactory.generateModern(modern)
     TinkerFactory.generateTheCrew(crew)
+    TinkerFactory.generateGratefulDead(grateful)
     TinkerFactory.generateKitchenSink(sink)
-    grateful.io(gryo()).readGraph('data/grateful-dead.kryo')
+
+    // a wild bit of trickery here. the process tests use an INTEGER id manager when LoadGraphWith is used. this
+    // closure provides a way to to manually override the various id managers for TinkerGraph - the graph on which
+    // all of these remote tests are executed - so that the tests will pass nicely. an alternative might have been
+    // to have a special test TinkerGraph config for setting up the id manager properly, but based on how we do
+    // things now, that test config would have been mixed in with release artifacts and there would have been ugly
+    // exclusions to make packaging work properly.
+    allowSetOfIdManager = { graph, idManagerFieldName ->
+        java.lang.reflect.Field idManagerField = graph.class.getDeclaredField(idManagerFieldName)
+        idManagerField.setAccessible(true)
+        java.lang.reflect.Field modifiersField = java.lang.reflect.Field.class.getDeclaredField("modifiers")
+        modifiersField.setAccessible(true)
+        modifiersField.setInt(idManagerField, modifiersField.getModifiers() & ~java.lang.reflect.Modifier.FINAL)
+
+        idManagerField.set(graph, TinkerGraph.DefaultIdManager.INTEGER)
+    }
+
+    [classic, modern, crew, sink, grateful].each{
+      allowSetOfIdManager(it, "vertexIdManager")
+      allowSetOfIdManager(it, "edgeIdManager")
+      allowSetOfIdManager(it, "vertexPropertyIdManager")
+    }
   }
 ] as LifeCycleHook]
 
 // add default TraversalSource instances for each graph instance
 globals << [gclassic : classic.traversal()]
 globals << [gmodern : modern.traversal()]
+globals << [g : graph.traversal()]
 globals << [gcrew : crew.traversal()]
 globals << [ggraph : graph.traversal()]
-globals << [g : modern.traversal()]
 globals << [ggrateful : grateful.traversal()]
 globals << [gsink : sink.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9c6756c1/gremlin-server/src/test/scripts/neo4j-empty.properties
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/scripts/neo4j-empty.properties b/gremlin-server/src/test/scripts/neo4j-empty.properties
new file mode 100644
index 0000000..0ea551b
--- /dev/null
+++ b/gremlin-server/src/test/scripts/neo4j-empty.properties
@@ -0,0 +1,33 @@
+# 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.
+
+# This is a sample configuration file for Neo4j.  Note that
+# TinkerPop does not include Neo4j dependencies in its
+# distributions.  To use this file, please ensure that Neo4j
+# dependencies are installed into Gremlin Server's path
+# with:
+#
+# gremlin-server.sh -i org.apache.tinkerpop neo4j-gremlin 3.y.z
+#
+# Note that unless under a commercial agreement with Neo Technology,
+# Neo4j is licensed AGPL.
+
+
+gremlin.graph=org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph
+gremlin.neo4j.directory=/tmp/neo4j
+gremlin.neo4j.conf.node_auto_indexing=true
+gremlin.neo4j.conf.relationship_auto_indexing=true
\ No newline at end of file


[8/8] tinkerpop git commit: TINKERPOP-1968 Minor change to loading Grateful from TinkerFactory

Posted by sp...@apache.org.
TINKERPOP-1968 Minor change to loading Grateful from TinkerFactory

Decided to load it from a resources in tinkergraph-gremlin. Seemed to better than relying on the local file system.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9f3f9bf2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9f3f9bf2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9f3f9bf2

Branch: refs/heads/TINKERPOP-1968
Commit: 9f3f9bf2c41fd6c285ce254fddd05582e8790e93
Parents: d97f93d
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 18:39:39 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat May 19 07:17:45 2018 -0400

----------------------------------------------------------------------
 .../the-gremlin-console/index.asciidoc          |   5 ++-
 .../upgrade/release-3.2.x-incubating.asciidoc   |   8 +++++
 tinkergraph-gremlin/pom.xml                     |  19 +++++++++++
 .../tinkergraph/structure/TinkerFactory.java    |  32 ++++---------------
 .../tinkergraph/structure/grateful-dead.kryo    | Bin 0 -> 332226 bytes
 5 files changed, 36 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9f3f9bf2/docs/src/tutorials/the-gremlin-console/index.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/tutorials/the-gremlin-console/index.asciidoc b/docs/src/tutorials/the-gremlin-console/index.asciidoc
index da8bac3..cc090d9 100644
--- a/docs/src/tutorials/the-gremlin-console/index.asciidoc
+++ b/docs/src/tutorials/the-gremlin-console/index.asciidoc
@@ -117,9 +117,8 @@ However, if you find that a larger graph might be helpful, there is another opti
 
 [gremlin-groovy]
 ----
-graph = TinkerGraph.open()
-graph.io(gryo()).readGraph('data/grateful-dead.kryo')
-graph
+graph = TinkerFactory.createGratefulDead()
+g = graph.traversal()
 ----
 
 The Grateful Dead graph ships with the Gremlin Console and the data can be found in several formats (along with the

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9f3f9bf2/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/upgrade/release-3.2.x-incubating.asciidoc b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
index 112ce22..ccdf51a 100644
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@ -27,6 +27,14 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 Please see the link:https://github.com/apache/tinkerpop/blob/3.2.10/CHANGELOG.asciidoc#release-3-2-10[changelog] for a complete list of all the modifications that are part of this release.
 
+=== Upgrading for Users
+
+==== TinkerFactory.createGratefulDead()
+
+The Grateful Dead dataset has been with TinkerPop since the early days of 1.x. It has always been available as a
+packaged dataset that needed to be loaded through the various IO options available, while other toy graphs had the
+benefit of `TinkerFactory` to help get them bootstrapped. For 3.2.10, Grateful Dead is now more conveniently loaded
+via that same method as the other toy graphs with `TinkerFactory.createGratefulDead()`.
 
 == TinkerPop 3.2.9
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9f3f9bf2/tinkergraph-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/pom.xml b/tinkergraph-gremlin/pom.xml
index 1ff0aa0..1432ac5 100644
--- a/tinkergraph-gremlin/pom.xml
+++ b/tinkergraph-gremlin/pom.xml
@@ -127,6 +127,25 @@ limitations under the License.
                                 </configuration>
                             </execution>
                             <execution>
+                                <id>copy-gratefuldead-to-tinkergraph-resources</id>
+                                <phase>prepare-package</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure</outputDirectory>
+                                    <resources>
+                                        <resource>
+                                            <directory>${io.tmp.dir}</directory>
+                                            <filtering>false</filtering>
+                                            <includes>
+                                                <exclude>grateful-dead.kryo</exclude>
+                                            </includes>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                            <execution>
                                 <id>copy-gio-from-tmp-to-resources</id>
                                 <phase>prepare-package</phase>
                                 <goals>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9f3f9bf2/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
index 3a47f17..6c0f1b2 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
@@ -24,11 +24,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
 
 import java.io.File;
+import java.io.InputStream;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 
 import static org.apache.tinkerpop.gremlin.structure.io.IoCore.gryo;
@@ -193,12 +192,7 @@ public final class TinkerFactory {
 
     /**
      * Creates the "grateful dead" graph which is a larger graph than most of the toy graphs but has real-world
-     * structure and application and is therefore useful for demonstrating more complex traversals. Unlike the
-     * other graphs, this creation process relies on a local data files for creation. Specifically, it requires
-     * {@code grateful-dead.kryo} to be present. It will check the following common directories in the listed order
-     * to try to load this graph: {@code ./}, {@code data/}, {@code ../data/} as these are the common places to find
-     * this file from normal TinkerPop packaging. If the file cannot be found in those directories an
-     * {@code IllegalStateException}.
+     * structure and application and is therefore useful for demonstrating more complex traversals.
      */
     public static TinkerGraph createGratefulDead() {
         final TinkerGraph g = getTinkerGraphWithNumberManager();
@@ -210,24 +204,12 @@ public final class TinkerFactory {
      * Generate the graph in {@link #createGratefulDead()} into an existing graph.
      */
     public static void generateGratefulDead(final TinkerGraph graph) {
-        final String fileName = "grateful-dead.kryo";
-        final List<String> files = Arrays.asList(fileName,
-                "data/" + fileName,
-                ".." + File.separator + "data" + File.separator + fileName);
-
-        for (String fn : files) {
-            final File f = new File(fn);
-            if (f.exists()) {
-                try {
-                    graph.io(gryo()).readGraph(fn);
-                } catch (Exception ex) {
-                    throw new IllegalStateException(ex);
-                }
-            }
+        final InputStream stream = TinkerFactory.class.getResourceAsStream("grateful-dead.kryo");
+        try {
+            graph.io(gryo()).reader().create().readGraph(stream, graph);
+        } catch (Exception ex) {
+            throw new IllegalStateException(ex);
         }
-
-        if (!graph.vertices().hasNext())
-            throw new IllegalStateException("grateful-dead.kryo cannot be found");
     }
 
     private static TinkerGraph getTinkerGraphWithNumberManager() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9f3f9bf2/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo b/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo
new file mode 100644
index 0000000..57fa587
Binary files /dev/null and b/tinkergraph-gremlin/src/main/resources/org/apache/tinkerpop/gremlin/tinkergraph/structure/grateful-dead.kryo differ


[2/8] tinkerpop git commit: Merge branch 'TINKERPOP-1962' into tp32

Posted by sp...@apache.org.
Merge branch 'TINKERPOP-1962' into tp32

Conflicts:
	CHANGELOG.asciidoc


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e3983733
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e3983733
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e3983733

Branch: refs/heads/TINKERPOP-1968
Commit: e39837330235bf9598077707234c25ad29e77742
Parents: ae562c1 4e8b4cf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 18:49:30 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri May 18 18:49:30 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                  |  2 +-
 .../gremlin/groovy/jsr223/GroovyTranslatorTest.java | 16 +++++++++++++---
 .../gremlin/groovy/jsr223/GroovyTranslator.java     |  6 +++++-
 3 files changed, 19 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e3983733/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index b407288,c7717d7..b286dcb
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -23,8 -23,7 +23,8 @@@ image::https://raw.githubusercontent.co
  [[release-3-2-10]]
  === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
  
 +* Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
- 
+ * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
  
  [[release-3-2-9]]
  === TinkerPop 3.2.9 (Release Date: May 8, 2018)


[6/8] tinkerpop git commit: TINKERPOP-1968 Enabled GLV tests for self loops

Posted by sp...@apache.org.
TINKERPOP-1968 Enabled GLV tests for self loops


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/555ffd9d
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/555ffd9d
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/555ffd9d

Branch: refs/heads/TINKERPOP-1968
Commit: 555ffd9de096ca891124e32b6bd7109bda5b46df
Parents: 9c6756c
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 14:39:53 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat May 19 07:17:45 2018 -0400

----------------------------------------------------------------------
 .../traversal/step/map/GroovyVertexTest.groovy  |  8 +++---
 gremlin-test/features/map/Vertex.feature        | 26 ++++++++++++++++++-
 .../process/traversal/step/map/VertexTest.java  | 27 ++++++++++----------
 .../gremlin/process/FeatureCoverageTest.java    |  3 ---
 4 files changed, 42 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/555ffd9d/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
index ff6275d..cd43ad0 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyVertexTest.groovy
@@ -185,13 +185,13 @@ public abstract class GroovyVertexTest {
         }
 
         @Override
-        public Traversal<Vertex, Edge> get_g_V_bothEXselfX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().bothE('self')")
+        public Traversal<Vertex, Edge> get_g_V_hasLabelXloopsX_bothEXselfX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().hasLabel('loops').bothE('self')")
         }
 
         @Override
-        public Traversal<Vertex, Vertex> get_g_V_bothXselfX() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().both('self')")
+        public Traversal<Vertex, Vertex> get_g_V_hasLabelXloopsX_bothXselfX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V().hasLabel('loops').both('self')")
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/555ffd9d/gremlin-test/features/map/Vertex.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Vertex.feature b/gremlin-test/features/map/Vertex.feature
index 569fb6f..8642693 100644
--- a/gremlin-test/features/map/Vertex.feature
+++ b/gremlin-test/features/map/Vertex.feature
@@ -472,4 +472,28 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
       | ripple |
       | ripple |
       | ripple |
-      | ripple |
\ No newline at end of file
+      | ripple |
+
+  Scenario: g_V_hasLabelXloopsX_bothEXselfX
+    Given the sink graph
+    And the traversal of
+    """
+    g.V().hasLabel("loops").bothE("self")
+    """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | e[loop-self->loop] |
+      | e[loop-self->loop] |
+
+  Scenario: g_V_hasLabelXloopsX_bothXselfX
+    Given the sink graph
+    And the traversal of
+    """
+    g.V().hasLabel("loops").both("self")
+    """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[loop] |
+      | v[loop] |

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/555ffd9d/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
index 8a57535..7908952 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/VertexTest.java
@@ -41,6 +41,7 @@ import java.util.Map;
 import java.util.Set;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.SINK;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -113,9 +114,9 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, String> get_g_V_hasLabelXpersonX_V_hasLabelXsoftwareX_name();
 
-    public abstract Traversal<Vertex, Edge> get_g_V_bothEXselfX();
+    public abstract Traversal<Vertex, Edge> get_g_V_hasLabelXloopsX_bothEXselfX();
 
-    public abstract Traversal<Vertex, Vertex> get_g_V_bothXselfX();
+    public abstract Traversal<Vertex, Vertex> get_g_V_hasLabelXloopsX_bothXselfX();
 
     // GRAPH VERTEX/EDGE
 
@@ -575,10 +576,9 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
     }
 
     @Test
-    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
-    public void g_V_bothEXselfX() {
-        g.addV().as("a").addE("self").to("a").iterate();
-        final Traversal<Vertex, Edge> traversal = get_g_V_bothEXselfX();
+    @LoadGraphWith(SINK)
+    public void g_V_hasLabelXloopsX_bothEXselfX() {
+        final Traversal<Vertex, Edge> traversal = get_g_V_hasLabelXloopsX_bothEXselfX();
         printTraversalForm(traversal);
 
         List<Edge> edges = traversal.toList();
@@ -587,10 +587,9 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
     }
 
     @Test
-    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
-    public void g_V_bothXselfX() {
-        g.addV().as("a").addE("self").to("a").iterate();
-        final Traversal<Vertex, Vertex> traversal = get_g_V_bothXselfX();
+    @LoadGraphWith(SINK)
+    public void g_V_hasLabelXloopsX_bothXselfX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_hasLabelXloopsX_bothXselfX();
         printTraversalForm(traversal);
 
         List<Vertex> vertices = traversal.toList();
@@ -751,13 +750,13 @@ public abstract class VertexTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, Edge> get_g_V_bothEXselfX() {
-            return g.V().bothE("self");
+        public Traversal<Vertex, Edge> get_g_V_hasLabelXloopsX_bothEXselfX() {
+            return g.V().hasLabel("loops").bothE("self");
         }
 
         @Override
-        public Traversal<Vertex, Vertex> get_g_V_bothXselfX() {
-            return g.V().both("self");
+        public Traversal<Vertex, Vertex> get_g_V_hasLabelXloopsX_bothXselfX() {
+            return g.V().hasLabel("loops").both("self");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/555ffd9d/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
index 28c6d77..00391bf 100644
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -127,9 +127,6 @@ public class FeatureCoverageTest {
             "g_V_selectXaX",
             // assertion doesn't seem to want to work right for embedded lists
             "g_V_asXa_bX_out_asXcX_path_selectXkeysX",
-            // probably need TINKERPOP-1877
-            "g_V_bothEXselfX",
-            "g_V_bothXselfX",
             // ugh - BigInteger?
             "g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
             // ugh - clone


[4/8] tinkerpop git commit: TINKERPOP-1968 Added edge ids to sink and grateful generator

Posted by sp...@apache.org.
TINKERPOP-1968 Added edge ids to sink and grateful generator

Edge ids should have always been statically defined - not sure how/why that was missed. Also added grateful dead dataset to TinkerFactory to make that easier to programmatically setup.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/23a4e069
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/23a4e069
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/23a4e069

Branch: refs/heads/TINKERPOP-1968
Commit: 23a4e069b1d100153afb38000fbc25b11b823706
Parents: e398373
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri May 18 14:34:44 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat May 19 07:17:45 2018 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 data/tinkerpop-sink-typed.json                  |   6 +-
 data/tinkerpop-sink-v2d0-typed.json             |   6 +-
 data/tinkerpop-sink-v2d0.json                   |   6 +-
 data/tinkerpop-sink.json                        |   6 +-
 data/tinkerpop-sink.kryo                        | Bin 234 -> 240 bytes
 .../io/graphson/tinkerpop-sink-typed.json       |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0-typed.json  |   6 +-
 .../io/graphson/tinkerpop-sink-v2d0.json        |   6 +-
 .../structure/io/graphson/tinkerpop-sink.json   |   6 +-
 .../structure/io/gryo/tinkerpop-sink.kryo       | Bin 234 -> 240 bytes
 .../tinkergraph/structure/TinkerFactory.java    |  82 ++++++++++++++++++-
 12 files changed, 104 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index b286dcb..5a08535 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 === TinkerPop 3.2.10 (Release Date: NOT OFFICIALLY RELEASED YET)
 
 * Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
+* Added `createGratefulDead()`to `TinkerFactory` to help make it easier to try to instantiate that toy graph.
 * Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
 
 [[release-3-2-9]]

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/data/tinkerpop-sink-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink-typed.json b/data/tinkerpop-sink-typed.json
index 2e83384..9f16788 100644
--- a/data/tinkerpop-sink-typed.json
+++ b/data/tinkerpop-sink-typed.json
@@ -1,3 +1,3 @@
-{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"inV":2001},{"@class":"java.util.HashMap","id":5,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"a"}]]}}
-{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"b"}]]}}
-{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}
+{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2003,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"inV":2001},{"@class":"java.util.HashMap","id":2003,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":"a"}]]}}
+{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"b"}]]}}
+{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/data/tinkerpop-sink-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink-v2d0-typed.json b/data/tinkerpop-sink-v2d0-typed.json
index 7a27853..906d74a 100644
--- a/data/tinkerpop-sink-v2d0-typed.json
+++ b/data/tinkerpop-sink-v2d0-typed.json
@@ -1,3 +1,3 @@
-{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
-{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
-{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
+{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
+{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
+{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/data/tinkerpop-sink-v2d0.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink-v2d0.json b/data/tinkerpop-sink-v2d0.json
index 420e089..4d4811f 100644
--- a/data/tinkerpop-sink-v2d0.json
+++ b/data/tinkerpop-sink-v2d0.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/data/tinkerpop-sink.json
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink.json b/data/tinkerpop-sink.json
index 420e089..4d4811f 100644
--- a/data/tinkerpop-sink.json
+++ b/data/tinkerpop-sink.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/data/tinkerpop-sink.kryo
----------------------------------------------------------------------
diff --git a/data/tinkerpop-sink.kryo b/data/tinkerpop-sink.kryo
index ae68674..8db5f4f 100644
Binary files a/data/tinkerpop-sink.kryo and b/data/tinkerpop-sink.kryo differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
index 2e83384..9f16788 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-typed.json
@@ -1,3 +1,3 @@
-{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":5,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"inV":2001},{"@class":"java.util.HashMap","id":5,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"a"}]]}}
-{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":4,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",3],"value":"b"}]]}}
-{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}
+{"@class":"java.util.HashMap","id":2000,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2003,"outV":2000}]]},"outE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"inV":2001},{"@class":"java.util.HashMap","id":2003,"inV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",1],"value":"a"}]]}}
+{"@class":"java.util.HashMap","id":2001,"label":"message","inE":{"@class":"java.util.HashMap","link":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":2002,"outV":2000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",2],"value":"b"}]]}}
+{"@class":"java.util.HashMap","id":1000,"label":"loops","inE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"outV":1000}]]},"outE":{"@class":"java.util.HashMap","self":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":1001,"inV":1000}]]},"properties":{"@class":"java.util.HashMap","name":["java.util.ArrayList",[{"@class":"java.util.HashMap","id":["java.lang.Long",0],"value":"loop"}]]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
index 7a27853..906d74a 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0-typed.json
@@ -1,3 +1,3 @@
-{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":5},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":4},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":5},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"a"}]}}
-{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":4},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":3},"value":"b"}]}}
-{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}
+{"id":{"@type":"g:Int32","@value":2000},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2003},"outV":{"@type":"g:Int32","@value":2000}}]},"outE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"inV":{"@type":"g:Int32","@value":2001}},{"id":{"@type":"g:Int32","@value":2003},"inV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":1},"value":"a"}]}}
+{"id":{"@type":"g:Int32","@value":2001},"label":"message","inE":{"link":[{"id":{"@type":"g:Int32","@value":2002},"outV":{"@type":"g:Int32","@value":2000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":2},"value":"b"}]}}
+{"id":{"@type":"g:Int32","@value":1000},"label":"loops","inE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"outV":{"@type":"g:Int32","@value":1000}}]},"outE":{"self":[{"id":{"@type":"g:Int32","@value":1001},"inV":{"@type":"g:Int32","@value":1000}}]},"properties":{"name":[{"id":{"@type":"g:Int64","@value":0},"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
index 420e089..4d4811f 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink-v2d0.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
index 420e089..4d4811f 100644
--- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
+++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/graphson/tinkerpop-sink.json
@@ -1,3 +1,3 @@
-{"id":2000,"label":"message","inE":{"link":[{"id":5,"outV":2000}]},"outE":{"link":[{"id":4,"inV":2001},{"id":5,"inV":2000}]},"properties":{"name":[{"id":2,"value":"a"}]}}
-{"id":2001,"label":"message","inE":{"link":[{"id":4,"outV":2000}]},"properties":{"name":[{"id":3,"value":"b"}]}}
-{"id":1000,"label":"loops","inE":{"self":[{"id":1,"outV":1000}]},"outE":{"self":[{"id":1,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}
+{"id":2000,"label":"message","inE":{"link":[{"id":2003,"outV":2000}]},"outE":{"link":[{"id":2002,"inV":2001},{"id":2003,"inV":2000}]},"properties":{"name":[{"id":1,"value":"a"}]}}
+{"id":2001,"label":"message","inE":{"link":[{"id":2002,"outV":2000}]},"properties":{"name":[{"id":2,"value":"b"}]}}
+{"id":1000,"label":"loops","inE":{"self":[{"id":1001,"outV":1000}]},"outE":{"self":[{"id":1001,"inV":1000}]},"properties":{"name":[{"id":0,"value":"loop"}]}}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo
index ae68674..8db5f4f 100644
Binary files a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo and b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/structure/io/gryo/tinkerpop-sink.kryo differ

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/23a4e069/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
index ef1ee7f..3a47f17 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerFactory.java
@@ -24,8 +24,18 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSo
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.io.gryo.GryoIo;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.apache.tinkerpop.gremlin.structure.io.IoCore.gryo;
 
 /**
+ * Helps create a variety of different toy graphs for testing and learning purposes.
+ *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -33,6 +43,9 @@ public final class TinkerFactory {
 
     private TinkerFactory() {}
 
+    /**
+     * Create the "classic" graph which was the original toy graph from TinkerPop 2.x.
+     */
     public static TinkerGraph createClassic() {
         final Configuration conf = new BaseConfiguration();
         conf.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_ID_MANAGER, TinkerGraph.DefaultIdManager.INTEGER.name());
@@ -43,6 +56,9 @@ public final class TinkerFactory {
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createClassic()} into an existing graph.
+     */
     public static void generateClassic(final TinkerGraph g) {
         final Vertex marko = g.addVertex(T.id, 1, "name", "marko", "age", 29);
         final Vertex vadas = g.addVertex(T.id, 2, "name", "vadas", "age", 27);
@@ -58,12 +74,19 @@ public final class TinkerFactory {
         peter.addEdge("created", lop, T.id, 12, "weight", 0.2f);
     }
 
+    /**
+     * Create the "modern" graph which has the same structure as the "classic" graph from TinkerPop 2.x but includes
+     * 3.x features like vertex labels.
+     */
     public static TinkerGraph createModern() {
         final TinkerGraph g = getTinkerGraphWithNumberManager();
         generateModern(g);
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createModern()} into an existing graph.
+     */
     public static void generateModern(final TinkerGraph g) {
         final Vertex marko = g.addVertex(T.id, 1, T.label, "person", "name", "marko", "age", 29);
         final Vertex vadas = g.addVertex(T.id, 2, T.label, "person", "name", "vadas", "age", 27);
@@ -79,6 +102,10 @@ public final class TinkerFactory {
         peter.addEdge("created", lop, T.id, 12, "weight", 0.2d);
     }
 
+    /**
+     * Create the "the crew" graph which is a TinkerPop 3.x toy graph showcasing many 3.x features like meta-properties,
+     * multi-properties and graph variables.
+     */
     public static TinkerGraph createTheCrew() {
         final Configuration conf = getNumberIdManagerConfiguration();
         conf.setProperty(TinkerGraph.GREMLIN_TINKERGRAPH_DEFAULT_VERTEX_PROPERTY_CARDINALITY, VertexProperty.Cardinality.list.name());
@@ -87,6 +114,9 @@ public final class TinkerFactory {
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createTheCrew()} into an existing graph.
+     */
     public static void generateTheCrew(final TinkerGraph g) {
         final Vertex marko = g.addVertex(T.id, 1, T.label, "person", "name", "marko");
         final Vertex stephen = g.addVertex(T.id, 7, T.label, "person", "name", "stephen");
@@ -137,21 +167,67 @@ public final class TinkerFactory {
         g.variables().set("comment", "this graph was created to provide examples and test coverage for tinkerpop3 api advances");
     }
 
+    /**
+     * Creates the "kitchen sink" graph which is a collection of structures (e.g. self-loops) that aren't represented
+     * in other graphs and are useful for various testing scenarios.
+     */
     public static TinkerGraph createKitchenSink() {
         final TinkerGraph g = getTinkerGraphWithNumberManager();
         generateKitchenSink(g);
         return g;
     }
 
+    /**
+     * Generate the graph in {@link #createKitchenSink()} into an existing graph.
+     */
     public static void generateKitchenSink(final TinkerGraph graph) {
         final GraphTraversalSource g = graph.traversal();
         g.addV("loops").property(T.id, 1000).property("name", "loop").as("me").
-          addE("self").to("me").
+          addE("self").to("me").property(T.id, 1001).
           iterate();
         g.addV("message").property(T.id, 2000).property("name", "a").as("a").
           addV("message").property(T.id, 2001).property("name", "b").as("b").
-          addE("link").from("a").to("b").
-          addE("link").from("a").to("a").iterate();
+          addE("link").from("a").to("b").property(T.id, 2002).
+          addE("link").from("a").to("a").property(T.id, 2003).iterate();
+    }
+
+    /**
+     * Creates the "grateful dead" graph which is a larger graph than most of the toy graphs but has real-world
+     * structure and application and is therefore useful for demonstrating more complex traversals. Unlike the
+     * other graphs, this creation process relies on a local data files for creation. Specifically, it requires
+     * {@code grateful-dead.kryo} to be present. It will check the following common directories in the listed order
+     * to try to load this graph: {@code ./}, {@code data/}, {@code ../data/} as these are the common places to find
+     * this file from normal TinkerPop packaging. If the file cannot be found in those directories an
+     * {@code IllegalStateException}.
+     */
+    public static TinkerGraph createGratefulDead() {
+        final TinkerGraph g = getTinkerGraphWithNumberManager();
+        generateGratefulDead(g);
+        return g;
+    }
+
+    /**
+     * Generate the graph in {@link #createGratefulDead()} into an existing graph.
+     */
+    public static void generateGratefulDead(final TinkerGraph graph) {
+        final String fileName = "grateful-dead.kryo";
+        final List<String> files = Arrays.asList(fileName,
+                "data/" + fileName,
+                ".." + File.separator + "data" + File.separator + fileName);
+
+        for (String fn : files) {
+            final File f = new File(fn);
+            if (f.exists()) {
+                try {
+                    graph.io(gryo()).readGraph(fn);
+                } catch (Exception ex) {
+                    throw new IllegalStateException(ex);
+                }
+            }
+        }
+
+        if (!graph.vertices().hasNext())
+            throw new IllegalStateException("grateful-dead.kryo cannot be found");
     }
 
     private static TinkerGraph getTinkerGraphWithNumberManager() {