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:23 UTC
[48/50] tinkerpop git commit: Support Ignore exceptions
Support Ignore exceptions
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ed9cf5d5
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ed9cf5d5
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ed9cf5d5
Branch: refs/heads/TINKERPOP-1827
Commit: ed9cf5d50130997c7a295924939353c2201f2ec5
Parents: ae54f28
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Fri Nov 17 12:59:46 2017 +0100
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Thu Nov 23 09:08:08 2017 +0100
----------------------------------------------------------------------
.../Gherkin/CommonSteps.cs | 8 +-
.../Gherkin/GherkinTestRunner.cs | 83 +++++++++++++-------
.../Gherkin/IgnoreException.cs | 55 +++++++++++++
.../ModernGraphTypeInformation.cs | 9 +++
4 files changed, 127 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ed9cf5d5/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 1c2c8fa..4b99fd8 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/CommonSteps.cs
@@ -58,7 +58,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{@"p\[(.+)\]", ToPath},
{@"l\[(.+)\]", ToList},
{@"s\[(.+)\]", ToSet},
- {@"m\[(.+)\]", ToMap}
+ {@"m\[(.+)\]", ToMap},
+ {@"c\[(.+)\]", ToLambda}
}.ToDictionary(kv => new Regex("^" + kv.Key + "$", RegexOptions.Compiled), kv => kv.Value);
[Given("the (\\w+) graph")]
@@ -198,6 +199,11 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
return jsonMap.ToDictionary(kv => kv.Key, kv => ParseMapValue(kv.Value, graphName));
}
+ private static object ToLambda(string stringLambda, string graphName)
+ {
+ throw new IgnoreException(IgnoreReason.LambdaNotSupported);
+ }
+
private static object ParseMapValue(JToken value, string graphName)
{
if (value.Type == JTokenType.Array)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ed9cf5d5/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 5527705..b03211c 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/GherkinTestRunner.cs
@@ -40,8 +40,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{
public class GherkinTestRunner
{
- private readonly ITestOutputHelper _output;
-
private static class Keywords
{
public const string Given = "GIVEN";
@@ -64,6 +62,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{ StepBlock.When, typeof(WhenAttribute) },
{ StepBlock.Then, typeof(ThenAttribute) }
};
+
+ private readonly ITestOutputHelper _output;
public GherkinTestRunner(ITestOutputHelper output)
{
@@ -73,7 +73,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
[Fact]
public void RunGherkinBasedTests()
{
- Console.WriteLine("Starting Gherkin-based tests");
+ WriteOutput("Starting Gherkin-based tests");
var stepDefinitionTypes = GetStepDefinitionTypes();
var results = new List<ResultFeature>();
foreach (var feature in GetFeatures())
@@ -104,6 +104,8 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
if (result != null)
{
failedSteps.Add(step, result);
+ // Stop processing scenario
+ break;
}
}
}
@@ -115,35 +117,26 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
private void WriteOutput(string line)
{
+#if DEBUG
_output.WriteLine(line);
+#else
+ Console.WriteLine(line);
+#endif
}
private void OutputResults(List<ResultFeature> results)
{
- var totalScenarios = results.Sum(f => f.Scenarios.Count);
- var totalFailedScenarios = results.Sum(f => f.Scenarios.Count(s => s.Value.Count > 0));
- Console.WriteLine("Gherkin tests summary");
- Console.WriteLine($"Total scenarios: {totalScenarios}. " +
- $"Passed: {totalScenarios-totalFailedScenarios}. Failed: {totalFailedScenarios}.");
- if (totalFailedScenarios == 0)
- {
- return;
- }
+ WriteOutput("Gherkin tests result");
var identifier = 0;
- var failures = new List<Exception>();
+ var failures = new List<Tuple<string, Exception>>();
+ var totalScenarios = 0;
+ var totalFailed = 0;
+ var totalIgnored = 0;
foreach (var resultFeature in results)
{
- var failedScenarios = resultFeature.Scenarios.Where(s => s.Value.Count > 0).ToArray();
- if (failedScenarios.Length > 0)
- {
- WriteOutput($"Feature: {resultFeature.Feature.Name}");
- }
- else
- {
- continue;
- }
- foreach (var resultScenario in failedScenarios)
+ foreach (var resultScenario in resultFeature.Scenarios)
{
+ totalScenarios++;
WriteOutput($" Scenario: {resultScenario.Key.Name}");
foreach (var step in resultScenario.Key.Steps)
{
@@ -154,16 +147,44 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
}
else
{
- WriteOutput($" {++identifier}) {step.Keyword} {step.Text} (failed)");
- failures.Add(failure);
+ if (failure is IgnoreException)
+ {
+ totalIgnored++;
+ WriteOutput($" {++identifier}) {step.Keyword} {step.Text} (ignored)");
+ }
+ else
+ {
+ totalFailed++;
+ WriteOutput($" {++identifier}) {step.Keyword} {step.Text} (failed)");
+ }
+ failures.Add(Tuple.Create(resultScenario.Key.Name, failure));
}
}
}
}
- WriteOutput("Failures:");
+ if (totalFailed > 0)
+ {
+ WriteOutput("Failures" + (totalIgnored > 0 ? " and skipped scenarios" : "") + ":");
+ }
+ else if (totalIgnored > 0)
+ {
+ WriteOutput("Skipped scenarios:");
+ }
for (var index = 0; index < failures.Count; index++)
{
- WriteOutput($"{index+1}) {failures[index]}");
+ var failure = failures[index];
+ var message = failure.Item2 is IgnoreException
+ ? ": " + failure.Item2.Message
+ : ": Failed\n" + failure.Item2;
+ WriteOutput($"{index+1}) {failure.Item1}{message}");
+ }
+ WriteOutput("-----------------");
+ WriteOutput($"Total scenarios: {totalScenarios}." +
+ $" Passed: {totalScenarios-totalFailed-totalIgnored}." +
+ $" Failed: {totalFailed}. Skipped: {totalIgnored}.");
+ if (totalFailed == 0)
+ {
+ return;
}
throw new Exception($"Gherkin test failed, see summary above for more detail");
}
@@ -332,6 +353,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
"/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",
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Project.feature",
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Path.feature",
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Map.feature",
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Match.feature",
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Max.feature",
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/map/Mean.feature",
+
+ "/Users/jorge/workspace/tinkerpop/gremlin-test/features/sideEffect/Sack.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/ed9cf5d5/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
new file mode 100644
index 0000000..ae236c7
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/IgnoreException.cs
@@ -0,0 +1,55 @@
+#region License
+
+/*
+ * 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.
+ */
+
+#endregion
+
+using System;
+
+namespace Gremlin.Net.IntegrationTest.Gherkin
+{
+ /// <summary>
+ /// Represents a test exception that should be ignored, given a reason (ie: feature not supported in the .NET GLV)
+ /// </summary>
+ public class IgnoreException : Exception
+ {
+ public IgnoreException(IgnoreReason reason) : base(GetMessage(reason))
+ {
+
+ }
+
+ private static string GetMessage(IgnoreReason reason)
+ {
+ string reasonSuffix = null;
+ switch (reason)
+ {
+ case IgnoreReason.LambdaNotSupported:
+ reasonSuffix = " because lambdas are not supported in Gremlin.NET";
+ break;
+ }
+ return $"Scenario ignored" + reasonSuffix;
+ }
+ }
+
+ public enum IgnoreReason
+ {
+ LambdaNotSupported
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ed9cf5d5/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 f96b9bf..abc3f2b 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/TraversalEvaluation/ModernGraphTypeInformation.cs
@@ -64,6 +64,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
case nameof(GraphTraversal<object,object>.Optional):
case nameof(GraphTraversal<object,object>.Sum):
case nameof(GraphTraversal<object,object>.Coalesce):
+ case nameof(GraphTraversal<object,object>.Match):
// Maintain the same type
return method.DeclaringType.GetGenericArguments()[1];
case nameof(GraphTraversal<object,object>.ValueMap):
@@ -73,6 +74,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin.TraversalEvaluation
case nameof(GraphTraversal<object,object>.Unfold):
case nameof(GraphTraversal<object,object>.Choose):
case nameof(GraphTraversal<object,object>.Union):
+ case nameof(GraphTraversal<object,object>.Project):
+ case nameof(GraphTraversal<object,object>.Sack):
+ case nameof(GraphTraversal<object,object>.Map):
+ case nameof(GraphTraversal<object,object>.Max):
+ case nameof(GraphTraversal<object,object>.Min):
+ case nameof(GraphTraversal<object,object>.Mean):
+ case nameof(GraphTraversal<object,object>.Cap):
+ case nameof(GraphTraversal<object,object>.Constant):
// default to object for this methods
return typeof(object);
}