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/4fbfb99a
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4fbfb99a
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4fbfb99a

Branch: refs/heads/tp32
Commit: 4fbfb99a5eb0ccbccca9ca8878d2ba9f2ee11c03
Parents: bfb9df3
Author: Jorge Bay Gondra <jorgebaygon...@gmail.com>
Authored: Thu Nov 16 18:20:54 2017 +0100
Committer: Jorge Bay Gondra <jorgebaygon...@gmail.com>
Committed: Thu Nov 30 10:00:09 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/4fbfb99a/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/4fbfb99a/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/4fbfb99a/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/4fbfb99a/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/4fbfb99a/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)

Reply via email to