You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by jo...@apache.org on 2017/11/23 08:16:21 UTC

[46/50] tinkerpop git commit: Parser fixes and unordered comparison

Parser fixes and unordered comparison


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

Branch: refs/heads/TINKERPOP-1827
Commit: ae54f28fd59eaf1ce893048689f147d43c170182
Parents: 13dd808
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Thu Nov 16 18:20:54 2017 +0100
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Thu Nov 23 09:08:08 2017 +0100

----------------------------------------------------------------------
 .../Gherkin/CommonSteps.cs                      | 32 +++++++++++++++++---
 .../Gherkin/GherkinTestRunner.cs                |  6 ++--
 .../ModernGraphTypeInformation.cs               | 18 ++++++-----
 .../TraversalEvaluationTests.cs                 | 14 +++++++--
 .../TraversalEvaluation/TraversalParser.cs      |  1 +
 5 files changed, 54 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae54f28f/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
index 1ccf01d..1c2c8fa 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
@@ -151,9 +151,12 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
                     }
                     else
                     {
-                        var expectedArray = expected.OrderBy(x => x).ToArray();
-                        var resultArray = _result.OrderBy(x => x).ToArray();
-                        Assert.Equal(expectedArray, resultArray);
+                        var expectedArray = expected.ToArray();
+                        foreach (var resultItem in _result)
+                        {
+                            Assert.Contains(resultItem, expectedArray);
+                        }
+                        Assert.Equal(expectedArray.Length, _result.Length);
                     }
                     break;
                 default:
@@ -191,8 +194,27 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
 
         private static IDictionary ToMap(string stringMap, string graphName)
         {
-            var jsonMap = JObject.Parse(stringMap);
-            return (IDictionary) jsonMap.ToObject<IDictionary<string, object>>();
+            IDictionary<string, JToken> jsonMap = JObject.Parse(stringMap);
+            return jsonMap.ToDictionary(kv => kv.Key, kv => ParseMapValue(kv.Value, graphName));
+        }
+
+        private static object ParseMapValue(JToken value, string graphName)
+        {
+            if (value.Type == JTokenType.Array)
+            {
+                return value.Select(v => ParseMapValue(v, graphName)).ToArray();
+            }
+            var objValue = value.ToObject<object>();
+            if (objValue is long longValue)
+            {
+                // JSON Numeric values converted to int64 by default
+                return Convert.ToInt32(longValue);
+            }
+            if (objValue is string stringValue)
+            {
+                return ParseValue(stringValue, graphName);
+            }
+            return objValue;
         }
 
         private static ISet<object> ToSet(string stringSet, string graphName)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae54f28f/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
index fdee536..5527705 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
@@ -22,7 +22,6 @@
 #endregion
 
 using System;
-using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
@@ -329,7 +328,10 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
             {
                 "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Sum.feature",
 //                "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Coalesce.feature",
-                "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/AddEdge.feature"
+                "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/AddEdge.feature",
+                "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/AddVertex.feature",
+                "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/ValueMap.feature",
+                "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Select.feature",
             };
 //            var files = new [] {"/Users/jorge/workspace/temp/count.feature"};
 //            var files = Directory.GetFiles(path, "*.feature", SearchOption.AllDirectories);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae54f28f/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 a467519..f96b9bf 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
@@ -41,12 +41,13 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
         };
         
         /// <summary>
-        /// Gets the type argument information based on the modern graph.
+        /// Gets the type argument information based on the modern graph information.
         /// </summary>s
         public static Type GetTypeArguments(MethodInfo method, object[] parameterValues, int genericTypeIndex)
         {
             switch (method.Name)
             {
+                case nameof(GraphTraversal<object,object>.Properties):
                 case nameof(GraphTraversal<object,object>.Values) when parameterValues.Length == 1:
                     // The parameter contains the element property names
                     var properties = ((IEnumerable) parameterValues[parameterValues.Length - 1]).Cast<string>();
@@ -59,18 +60,21 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                 case nameof(GraphTraversal<object,object>.Group) when genericTypeIndex == 0:
                     // Use IDictionary<string, object> for Group
                     return typeof(string);
-                case nameof(GraphTraversal<object,object>.ValueMap):
-                case nameof(GraphTraversal<object,object>.Select):
-                case nameof(GraphTraversal<object,object>.Group):
-                case nameof(GraphTraversal<object,object>.Unfold):
-                    // default to object for this methods
-                    return typeof(object);
                 case nameof(GraphTraversal<object,object>.Limit):
                 case nameof(GraphTraversal<object,object>.Optional):
                 case nameof(GraphTraversal<object,object>.Sum):
                 case nameof(GraphTraversal<object,object>.Coalesce):
                     // Maintain the same type
                     return method.DeclaringType.GetGenericArguments()[1];
+                case nameof(GraphTraversal<object,object>.ValueMap):
+                case nameof(GraphTraversal<object,object>.Select):
+                case nameof(GraphTraversal<object,object>.Group):
+                case nameof(GraphTraversal<object,object>.GroupCount):
+                case nameof(GraphTraversal<object,object>.Unfold):
+                case nameof(GraphTraversal<object,object>.Choose):
+                case nameof(GraphTraversal<object,object>.Union):
+                    // default to object for this methods
+                    return typeof(object);
             }
             return null;
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae54f28f/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs
index a2dd888..3907dd2 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs
@@ -23,10 +23,8 @@
 
 using System;
 using System.Linq;
-using Gremlin.Net.Process.Traversal;
 using Gremlin.Net.Structure;
 using Xunit;
-using Xunit.Abstractions;
 
 namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
 {
@@ -64,6 +62,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                 Tuple.Create("g.V().\n  count()", new[] { new Token("count")}),
                 Tuple.Create("g.V().\n has ( \"a\" ) \n.  \ncount()",
                     new[] {new Token("has", new StringParameter("a")), new Token("count")}),
+                Tuple.Create("g.V().choose(__.outE(),__.as(\"a\"))", new []
+                {
+                    new Token("choose", new ITokenParameter[] { 
+                        new StaticTraversalParameter(new[] {new Token("__"), new Token("outE")}, "__.outE()"),
+                        new StaticTraversalParameter(
+                            new[] {new Token("__"), new Token("as", new StringParameter("a"))}, "__.as(\"a\")")
+                    })
+                })
             };
             foreach (var item in items)
             {
@@ -88,7 +94,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                 Tuple.Create("g.V().optional(__.out().optional(__.out())).path().limit(1)", 4),
                 Tuple.Create("g.V(1).as(\"a\").out(\"knows\").as(\"b\").\n  select(\"a\", \"b\").by(\"name\")", 6),
                 Tuple.Create(
-                    "g.V().hasLabel(\"software\").group().by(\"name\").by(__.bothE().values(\"weight\").sum())", 5)
+                    "g.V().hasLabel(\"software\").group().by(\"name\").by(__.bothE().values(\"weight\").sum())", 5),
+                Tuple.Create("g.V().choose(__.outE().count().is(0L),__.as(\"a\"),__.as(\"b\"))" +
+                                  "\n.choose(__.select(\"a\"),__.select(\"a\"),__.select(\"b\"))", 3)
             };
             var g = new Graph().Traversal();
             foreach (var tuple in traversalTexts)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ae54f28f/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs
index d557c49..66aae70 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs
@@ -346,6 +346,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                         parameters.Add(param);
                         break;
                     }
+                    case ',' when parsing != ParsingPart.StartParameters:
                     case ')' when parsing != ParsingPart.StartParameters:
                         // The current nested object already ended
                         if (parsing == ParsingPart.Name)