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/30 09:20:07 UTC

[23/33] tinkerpop git commit: Parse maps, lists and sets

Parse maps, lists and sets


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

Branch: refs/heads/TINKERPOP-1827
Commit: 4b86d19d0b6bb644784eb84717e7dc46b8f3f178
Parents: 17d6876
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Tue Nov 7 10:51:25 2017 +0100
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Thu Nov 30 10:00:09 2017 +0100

----------------------------------------------------------------------
 .../Gherkin/CommonSteps.cs                      | 15 ++++++-----
 .../ModernGraphTypeInformation.cs               |  1 +
 .../Gherkin/TraversalEvaluation/Token.cs        |  2 +-
 .../TraversalEvaluationTests.cs                 |  8 ++++--
 .../TraversalEvaluation/TraversalParser.cs      | 27 ++++++++++++--------
 5 files changed, 33 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b86d19d/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 8b27567..4a4d18e 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
@@ -31,6 +31,8 @@ using Gremlin.Net.IntegrationTest.Gherkin.Attributes;
 using Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation;
 using Gremlin.Net.Process.Traversal;
 using Gremlin.Net.Structure;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
 using Xunit;
 
 namespace Gremlin.Net.IntegrationTest.Gherkin
@@ -162,19 +164,20 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
             return result;
         }
 
-        private static IDictionary ToMap(string arg)
+        private static IDictionary ToMap(string stringMap)
         {
-            throw new NotImplementedException();
+            var jsonMap = JObject.Parse(stringMap);
+            return (IDictionary) jsonMap.ToObject<IDictionary<string, object>>();
         }
 
-        private static ICollection ToSet(string arg)
+        private static ISet<object> ToSet(string stringSet)
         {
-            throw new NotImplementedException();
+            return new HashSet<object>(ToList(stringSet));
         }
 
-        private static IList ToList(string arg)
+        private static IList<object> ToList(string stringList)
         {
-            throw new NotImplementedException();
+            return stringList.Split(',').Select(ParseValue).ToArray();
         }
 
         private static Vertex ToVertex(string name)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b86d19d/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 7e2bee1..10d316d 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
@@ -57,6 +57,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                     }
                     return typeof(object);
                 case nameof(GraphTraversal<object,object>.ValueMap):
+                case nameof(GraphTraversal<object,object>.Select):
                     // Use IDictionary<string, object> for value maps
                     return typeof(object);
                 case nameof(GraphTraversal<object,object>.Limit):

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b86d19d/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/Token.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/Token.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/Token.cs
index e0acf4b..67c2af1 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/Token.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/Token.cs
@@ -68,7 +68,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
             
         public Token(string name, IList<ITokenParameter> parameters = null)
         {
-            Name = name;
+            Name = name.Trim();
             Parameters = parameters ?? EmptyParameters;
         }
             

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b86d19d/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 aaca93f..ade895c 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalEvaluationTests.cs
@@ -60,7 +60,10 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                         new TraversalPredicateParameter(
                             new[] { new Token("P"), new Token("gt", LiteralParameter.Create(27)) }) })}),
                 Tuple.Create("g.V().count(Scope.local)", 
-                    new[] { new Token("count", new TraversalEnumParameter("Scope.local"))})
+                    new[] { new Token("count", new TraversalEnumParameter("Scope.local"))}),
+                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")}),
             };
             foreach (var item in items)
             {
@@ -82,7 +85,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                 Tuple.Create("g.V().where(__.in(\"created\").count().is(1)).values(\"name\")", 3),
                 Tuple.Create("g.V().count(Scope.local)", 2),
                 Tuple.Create("g.V().values(\"age\").is(P.lte(30))", 3),
-                Tuple.Create("g.V().optional(__.out().optional(__.out())).path().limit(1)", 4)
+                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)
             };
             var g = new Graph().Traversal();
             foreach (var tuple in traversalTexts)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b86d19d/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 b5efb8d..1f17ec8 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/TraversalParser.cs
@@ -124,8 +124,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
             foreach (var method in ordered)
             {
                 lastMethod = method;
-                var parameters = method.GetParameters();
-                if (tokenParameters.Count < parameters.Length)
+                var methodParameters = method.GetParameters();
+                var requiredParameters = methodParameters.Length;
+                if (requiredParameters > 0 && IsParamsArray(methodParameters.Last()))
+                {
+                    // Params array can be not provided
+                    requiredParameters--;
+                }
+                if (tokenParameters.Count < requiredParameters)
                 {
                     continue;
                 }
@@ -133,13 +139,13 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                 var exactMatches = 0;
                 for (var i = 0; i < tokenParameters.Count; i++)
                 {
-                    if (parameters.Length <= i)
+                    if (methodParameters.Length <= i)
                     {
                         // The method contains less parameters (and no params array) than provided
                         matched = false;
                         break;
                     }
-                    var methodParameter = parameters[i];
+                    var methodParameter = methodParameters[i];
                     var tokenParameterType = tokenParameters[i].GetParameterType();
                     // Match either the same parameter type
                     matched = methodParameter.ParameterType == tokenParameterType;
@@ -324,14 +330,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
                         parameters.Add(param);
                         break;
                     }
-                    case ',' when text[i+1] != ' ':
-                    case ' ' when text[i+1] != ' ' && text[i+1] != ')':
+                    case ',' when text[i+1] != ' ' && parsing == ParsingPart.StartParameters:
+                    case ' ' when text[i+1] != ' ' && text[i+1] != ')' && parsing == ParsingPart.StartParameters:
                     {
-                        if (parsing != ParsingPart.StartParameters)
-                        {
-                            throw new InvalidOperationException(
-                                "Can not parse space or comma chars outside parameters");
-                        }
                         i++;
                         var param = ParseParameter(text, ref i);
                         if (param == null)
@@ -370,6 +371,10 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
         private static ITokenParameter ParseParameter(string text, ref int i)
         {
             var firstChar = text[i];
+            while (char.IsWhiteSpace(firstChar))
+            {
+                firstChar = text[++i];
+            }
             if (firstChar == ')')
             {
                 return null;