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 2017/07/18 13:08:49 UTC
[12/50] [abbrv] tinkerpop git commit: Reorganize Gremlin-DotNet
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversalStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversalStrategy.cs b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversalStrategy.cs
deleted file mode 100644
index d643440..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversalStrategy.cs
+++ /dev/null
@@ -1,50 +0,0 @@
-#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.Collections.Generic;
-using System.Threading.Tasks;
-using Gremlin.Net.Process.Traversal;
-
-namespace Gremlin.Net.Process.UnitTest.Traversal
-{
- public class TestTraversalStrategy : ITraversalStrategy
- {
- private readonly IEnumerable<Traverser> _traversers;
-
- public TestTraversalStrategy(IEnumerable<Traverser> traversersToAddOnApplication)
- {
- _traversers = traversersToAddOnApplication;
- }
-
- public void Apply(ITraversal traversal)
- {
- traversal.Traversers = _traversers;
- }
-
- public Task ApplyAsync(ITraversal traversal)
- {
- traversal.Traversers = _traversers;
- return Task.CompletedTask;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraversalTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraversalTests.cs b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraversalTests.cs
deleted file mode 100644
index a823a5d..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraversalTests.cs
+++ /dev/null
@@ -1,177 +0,0 @@
-#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;
-using System.Collections.Generic;
-using System.Linq;
-using Gremlin.Net.Process.Traversal;
-using Moq;
-using Xunit;
-
-namespace Gremlin.Net.Process.UnitTest.Traversal
-{
- public class TraversalTests
- {
- [Theory]
- [InlineData(1)]
- [InlineData("test")]
- public void ShouldReturnAvailableTraverserObjWhenNextIsCalled(object traverserObj)
- {
- var traversal = new TestTraversal(new List<object> {traverserObj});
-
- var actualObj = traversal.Next();
-
- Assert.Equal(traverserObj, actualObj);
- }
-
- [Theory]
- [InlineData(3)]
- [InlineData(10)]
- public void ShouldReturnCorrectNrOfResultObjsWhenNextIsCalledWithAmountArgument(int nrOfResults)
- {
- var objs = new List<object>(20);
- for (var i = 0; i < 20; i++)
- objs.Add(i);
- var traversal = new TestTraversal(objs);
-
- var traversedObjs = traversal.Next(nrOfResults);
-
- var traversedObjsList = traversedObjs.ToList();
- Assert.Equal(nrOfResults, traversedObjsList.Count);
- for (var i = 0; i < nrOfResults; i++)
- Assert.Equal(objs[i], traversedObjsList[i]);
- }
-
- private List<object> UnfoldBulks(IReadOnlyList<object> objs, IReadOnlyList<long> bulks)
- {
- var unfoldedObjs = new List<object>();
- for (var traverserIdx = 0; traverserIdx < objs.Count; traverserIdx++)
- for (var currentBulkObjIdx = 0; currentBulkObjIdx < bulks[traverserIdx]; currentBulkObjIdx++)
- unfoldedObjs.Add(objs[traverserIdx]);
- return unfoldedObjs;
- }
-
- [Fact]
- public void ShouldDrainAllTraversersWhenIterateIsCalled()
- {
- var someObjs = new List<object> {1, 2, 3};
- var traversal = new TestTraversal(someObjs);
-
- var drainedTraversal = traversal.Iterate();
-
- Assert.Null(drainedTraversal.Next());
- }
-
- [Fact]
- public void ShouldReturnNullWhenNextIsCalledAndNoTraverserIsAvailable()
- {
- var expectedFirstObj = 1;
- var traversal = new TestTraversal(new List<object> {expectedFirstObj});
-
- var actualFirstObj = traversal.Next();
- var actualSecondObj = traversal.Next();
-
- Assert.Equal(expectedFirstObj, actualFirstObj);
- Assert.Null(actualSecondObj);
- }
-
- [Fact]
- public void ShouldReturnTraversalsTraverserWhenNextTraverserIsCalled()
- {
- var someObjs = new List<object> {1, 2, 3};
- var traversal = new TestTraversal(someObjs);
-
- var traverser = traversal.NextTraverser();
-
- Assert.Equal(traversal.Traversers.First(), traverser);
- }
-
- [Fact]
- public void ShouldThrowNotSupportedExceptionWhenResetIsCalled()
- {
- var someObjs = new List<object> {1, 2, 3};
- var traversal = new TestTraversal(someObjs);
-
- Assert.Throws<NotSupportedException>(() => traversal.Reset());
- }
-
- [Fact]
- public void ShouldReturnAllTraverserObjsWhenToListIsCalled()
- {
- var expectedObjs = new List<object> {1, 2, 3};
- var traversal = new TestTraversal(expectedObjs);
-
- var traversedObjs = traversal.ToList();
-
- Assert.Equal(expectedObjs, traversedObjs);
- }
-
- [Fact]
- public void ShouldReturnAllTraverserObjWithoutDuplicatesWhenToSetIsCalled()
- {
- var traverserObjs = new List<object> {1, 1, 2, 3};
- var traversal = new TestTraversal(traverserObjs);
-
- var traversedObjSet = traversal.ToSet();
-
- Assert.Equal(3, traversedObjSet.Count);
- Assert.Equal(new HashSet<object>(traverserObjs), traversedObjSet);
- }
-
- [Fact]
- public void ShouldApplyStrategiesWhenNextIsCalledAndNoTraversersPresent()
- {
- const int expectedObj = 531;
- var testStrategy = new TestTraversalStrategy(new List<Traverser> {new Traverser(expectedObj)});
- var testTraversal = new TestTraversal(new List<ITraversalStrategy> {testStrategy});
-
- var actualObj = testTraversal.Next();
-
- Assert.Equal(expectedObj, actualObj);
- }
-
- [Fact]
- public void ShouldBeUnfoldTraverserBulksWhenToListIsCalled()
- {
- var objs = new List<object> {1, 2, 3};
- var bulks = new List<long> {3, 2, 1};
- var traversal = new TestTraversal(objs, bulks);
-
- var traversedObjs = traversal.ToList();
-
- var expectedObjs = UnfoldBulks(objs, bulks);
- Assert.Equal(expectedObjs, traversedObjs);
- }
-
- [Fact]
- public void ShouldDisposeSideEffectsWhenDisposeIsCalled()
- {
- var sideEffectsMock = new Mock<ITraversalSideEffects>();
- var traversal = new TestTraversal(new List<object>()) {SideEffects = sideEffectsMock.Object};
-
- traversal.Dispose();
-
- sideEffectsMock.Verify(m => m.Dispose());
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraverserTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraverserTests.cs b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraverserTests.cs
deleted file mode 100644
index 4f6d2b5..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TraverserTests.cs
+++ /dev/null
@@ -1,75 +0,0 @@
-#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 Gremlin.Net.Process.Traversal;
-using Xunit;
-
-namespace Gremlin.Net.Process.UnitTest.Traversal
-{
- public class TraverserTests
- {
- [Fact]
- public void ShouldReturnFalseForEqualsWhereOtherIsNull()
- {
- var traverser = new Traverser("anObject");
-
- var areEqual = traverser.Equals(null);
-
- Assert.False(areEqual);
- }
-
- [Fact]
- public void ShouldReturnTrueForEqualsWithSameObjectAndDifferentBulk()
- {
- var firstTraverser = new Traverser("anObject", 1234);
- var secondTraverser = new Traverser("anObject", 9876);
-
- var areEqual = firstTraverser.Equals(secondTraverser);
-
- Assert.True(areEqual);
- }
-
- [Fact]
- public void ShouldReturnTrueForEqualsObjectWithSameObjectAndDifferentBulk()
- {
- var firstTraverser = new Traverser("anObject", 1234);
- object secondTraverser = new Traverser("anObject", 9876);
-
- var areEqual = firstTraverser.Equals(secondTraverser);
-
- Assert.True(areEqual);
- }
-
- [Fact]
- public void ShouldReturnEqualHashcodesForTraversersWithSameObjectAndDifferentBulk()
- {
- var firstTraverser = new Traverser("anObject", 1234);
- var secondTraverser = new Traverser("anObject", 9876);
-
- var firstHashCode = firstTraverser.GetHashCode();
- var secondHashCode = secondTraverser.GetHashCode();
-
- Assert.Equal(firstHashCode, secondHashCode);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Gremlin.Net.UnitTest.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Gremlin.Net.UnitTest.csproj b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Gremlin.Net.UnitTest.csproj
index 3d2da0d..6cf88ac 100644
--- a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Gremlin.Net.UnitTest.csproj
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Gremlin.Net.UnitTest.csproj
@@ -13,7 +13,6 @@
</PropertyGroup>
<ItemGroup>
- <ProjectReference Include="..\..\src\Gremlin.Net.Process\Gremlin.Net.Process.csproj" />
<ProjectReference Include="..\..\src\Gremlin.Net\Gremlin.Net.csproj" />
</ItemGroup>
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/BytecodeTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/BytecodeTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/BytecodeTests.cs
new file mode 100644
index 0000000..da77223
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/BytecodeTests.cs
@@ -0,0 +1,44 @@
+#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 Gremlin.Net.Process.Traversal;
+using Xunit;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class BytecodeTests
+ {
+ [Fact]
+ public void ShouldUseBingings()
+ {
+ var bytecode = new Bytecode();
+ var bindings = new Bindings();
+
+ bytecode.AddStep("hasLabel", bindings.Of("label", "testLabel"));
+
+ var arg = bytecode.StepInstructions[0].Arguments[0];
+ var binding = arg as Binding;
+ Assert.Equal(new Binding("label", "testLabel"), binding);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GraphTraversalSourceTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GraphTraversalSourceTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GraphTraversalSourceTests.cs
new file mode 100644
index 0000000..1ce1ec0
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/GraphTraversalSourceTests.cs
@@ -0,0 +1,68 @@
+#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 Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class GraphTraversalSourceTests
+ {
+ [Fact]
+ public void ShouldBeIndependentFromReturnedGraphTraversalModififyingBytecode()
+ {
+ var graph = new Graph();
+ var g = graph.Traversal();
+
+ g.V().Has("someKey", "someValue").Drop();
+
+ Assert.Equal(0, g.Bytecode.StepInstructions.Count);
+ Assert.Equal(0, g.Bytecode.SourceInstructions.Count);
+ }
+
+ [Fact]
+ public void ShouldBeIndependentFromReturnedGraphTraversalSourceModififyingBytecode()
+ {
+ var graph = new Graph();
+ var g1 = graph.Traversal();
+
+ var g2 = g1.WithSideEffect("someSideEffectKey", "someSideEffectValue");
+
+ Assert.Equal(0, g1.Bytecode.SourceInstructions.Count);
+ Assert.Equal(0, g1.Bytecode.StepInstructions.Count);
+ Assert.Equal(1, g2.Bytecode.SourceInstructions.Count);
+ }
+
+ [Fact]
+ public void ShouldBeIndependentFromReturnedGraphTraversalSourceModififyingTraversalStrategies()
+ {
+ var graph = new Graph();
+ var gLocal = graph.Traversal();
+
+ var gRemote = gLocal.WithRemote(null);
+
+ Assert.Equal(0, gLocal.TraversalStrategies.Count);
+ Assert.Equal(1, gRemote.TraversalStrategies.Count);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/PredicateTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/PredicateTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/PredicateTests.cs
new file mode 100644
index 0000000..59af681
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/PredicateTests.cs
@@ -0,0 +1,50 @@
+#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 Gremlin.Net.Process.Traversal;
+using Xunit;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class PredicateTests
+ {
+ [Fact]
+ public void ShouldKeepOrderForNestedPredicate()
+ {
+ Assert.Equal("and(eq(a),lt(b))", P.Eq("a").And(P.Lt("b")).ToString());
+ }
+
+ [Fact]
+ public void ShouldKeepOrderForDoubleNestedPredicate()
+ {
+ Assert.Equal("and(or(lt(b),gt(c)),neq(d))", P.Lt("b").Or(P.Gt("c")).And(P.Neq("d")).ToString());
+ }
+
+ [Fact]
+ public void ShouldKeepOrderForTripleNestedPredicate()
+ {
+ Assert.Equal("and(or(lt(b),gt(c)),or(neq(d),gte(e)))",
+ P.Lt("b").Or(P.Gt("c")).And(P.Neq("d").Or(P.Gte("e"))).ToString());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/Strategy/StrategyTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/Strategy/StrategyTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/Strategy/StrategyTests.cs
new file mode 100644
index 0000000..47adb29
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/Strategy/StrategyTests.cs
@@ -0,0 +1,109 @@
+#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 Gremlin.Net.Process.Traversal.Strategy;
+using Gremlin.Net.Process.Traversal.Strategy.Optimization;
+using Gremlin.Net.Process.Traversal.Strategy.Verification;
+using Xunit;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal.Strategy
+{
+ public class StrategyTests
+ {
+ [Fact]
+ public void ShouldReturnFalseForEqualsOfStrategiesWithDifferentStrategyNames()
+ {
+ var firstStrategy = new TestStrategy("aConfigKey", "aConfigValue");
+ var secondStrategy = new IncidentToAdjacentStrategy();
+
+ var areEqual = firstStrategy.Equals(secondStrategy);
+
+ Assert.False(areEqual);
+ }
+
+ [Fact]
+ public void ShouldReturnTrueForEqualsOfStrategiesWithEqualNamesButDifferentConfigurations()
+ {
+ var firstStrategy = new TestStrategy("aConfigKey", "aConfigValue");
+ var secondStrategy = new TestStrategy("anotherKey", "anotherValue");
+
+ var areEqual = firstStrategy.Equals(secondStrategy);
+
+ Assert.True(areEqual);
+ }
+
+ [Fact]
+ public void ShouldReturnDifferentHashcodesForStrategiesWithDifferentNames()
+ {
+ var firstStrategy = new TestStrategy();
+ var secondStrategy = new ReadOnlyStrategy();
+
+ var firstHashCode = firstStrategy.GetHashCode();
+ var secondHashCode = secondStrategy.GetHashCode();
+
+ Assert.NotEqual(firstHashCode, secondHashCode);
+ }
+
+ [Fact]
+ public void ShouldReturnEqualHashcodesForStrategiesWithEqualNamesButDifferentConfigurations()
+ {
+ var firstStrategy = new TestStrategy("aConfigKey", "aConfigValue");
+ var secondStrategy = new TestStrategy("anotherKey", "anotherValue");
+
+ var firstHashCode = firstStrategy.GetHashCode();
+ var secondHashCode = secondStrategy.GetHashCode();
+
+ Assert.Equal(firstHashCode, secondHashCode);
+ }
+
+ [Fact]
+ public void ShouldReturnClassNameForStrategyNameProperty()
+ {
+ var testStrategy = new TestStrategy();
+
+ Assert.Equal("TestStrategy", testStrategy.StrategyName);
+ }
+
+ [Fact]
+ public void ShouldReturnStrategyNameWhenForToString()
+ {
+ var testStrategy = new TestStrategy();
+
+ var strategyStr = testStrategy.ToString();
+
+ Assert.Equal("TestStrategy", strategyStr);
+ }
+ }
+
+ internal class TestStrategy : AbstractTraversalStrategy
+ {
+ public TestStrategy()
+ {
+ }
+
+ public TestStrategy(string configKey, dynamic configValue)
+ {
+ Configuration[configKey] = configValue;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversal.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversal.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversal.cs
new file mode 100644
index 0000000..4be6823
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversal.cs
@@ -0,0 +1,51 @@
+#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.Collections.Generic;
+using System.Linq;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class TestTraversal : DefaultTraversal
+ {
+ public TestTraversal(List<object> traverserObjs)
+ {
+ var traversers = new List<Traverser>(traverserObjs.Count);
+ traverserObjs.ForEach(o => traversers.Add(new Traverser(o)));
+ Traversers = traversers;
+ }
+
+ public TestTraversal(IReadOnlyList<object> traverserObjs, IReadOnlyList<long> traverserBulks)
+ {
+ var traversers = new List<Traverser>(traverserObjs.Count);
+ traversers.AddRange(traverserObjs.Select((t, i) => new Traverser(t, traverserBulks[i])));
+ Traversers = traversers;
+ }
+
+ public TestTraversal(IList<ITraversalStrategy> traversalStrategies)
+ {
+ TraversalStrategies = traversalStrategies;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversalStrategy.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversalStrategy.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversalStrategy.cs
new file mode 100644
index 0000000..111469c
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TestTraversalStrategy.cs
@@ -0,0 +1,50 @@
+#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.Collections.Generic;
+using System.Threading.Tasks;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class TestTraversalStrategy : ITraversalStrategy
+ {
+ private readonly IEnumerable<Traverser> _traversers;
+
+ public TestTraversalStrategy(IEnumerable<Traverser> traversersToAddOnApplication)
+ {
+ _traversers = traversersToAddOnApplication;
+ }
+
+ public void Apply(ITraversal traversal)
+ {
+ traversal.Traversers = _traversers;
+ }
+
+ public Task ApplyAsync(ITraversal traversal)
+ {
+ traversal.Traversers = _traversers;
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
new file mode 100644
index 0000000..f32b567
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
@@ -0,0 +1,177 @@
+#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;
+using System.Collections.Generic;
+using System.Linq;
+using Moq;
+using Xunit;
+using Gremlin.Net.Process.Traversal;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class TraversalTests
+ {
+ [Theory]
+ [InlineData(1)]
+ [InlineData("test")]
+ public void ShouldReturnAvailableTraverserObjWhenNextIsCalled(object traverserObj)
+ {
+ var traversal = new TestTraversal(new List<object> {traverserObj});
+
+ var actualObj = traversal.Next();
+
+ Assert.Equal(traverserObj, actualObj);
+ }
+
+ [Theory]
+ [InlineData(3)]
+ [InlineData(10)]
+ public void ShouldReturnCorrectNrOfResultObjsWhenNextIsCalledWithAmountArgument(int nrOfResults)
+ {
+ var objs = new List<object>(20);
+ for (var i = 0; i < 20; i++)
+ objs.Add(i);
+ var traversal = new TestTraversal(objs);
+
+ var traversedObjs = traversal.Next(nrOfResults);
+
+ var traversedObjsList = traversedObjs.ToList();
+ Assert.Equal(nrOfResults, traversedObjsList.Count);
+ for (var i = 0; i < nrOfResults; i++)
+ Assert.Equal(objs[i], traversedObjsList[i]);
+ }
+
+ private List<object> UnfoldBulks(IReadOnlyList<object> objs, IReadOnlyList<long> bulks)
+ {
+ var unfoldedObjs = new List<object>();
+ for (var traverserIdx = 0; traverserIdx < objs.Count; traverserIdx++)
+ for (var currentBulkObjIdx = 0; currentBulkObjIdx < bulks[traverserIdx]; currentBulkObjIdx++)
+ unfoldedObjs.Add(objs[traverserIdx]);
+ return unfoldedObjs;
+ }
+
+ [Fact]
+ public void ShouldDrainAllTraversersWhenIterateIsCalled()
+ {
+ var someObjs = new List<object> {1, 2, 3};
+ var traversal = new TestTraversal(someObjs);
+
+ var drainedTraversal = traversal.Iterate();
+
+ Assert.Null(drainedTraversal.Next());
+ }
+
+ [Fact]
+ public void ShouldReturnNullWhenNextIsCalledAndNoTraverserIsAvailable()
+ {
+ var expectedFirstObj = 1;
+ var traversal = new TestTraversal(new List<object> {expectedFirstObj});
+
+ var actualFirstObj = traversal.Next();
+ var actualSecondObj = traversal.Next();
+
+ Assert.Equal(expectedFirstObj, actualFirstObj);
+ Assert.Null(actualSecondObj);
+ }
+
+ [Fact]
+ public void ShouldReturnTraversalsTraverserWhenNextTraverserIsCalled()
+ {
+ var someObjs = new List<object> {1, 2, 3};
+ var traversal = new TestTraversal(someObjs);
+
+ var traverser = traversal.NextTraverser();
+
+ Assert.Equal(traversal.Traversers.First(), traverser);
+ }
+
+ [Fact]
+ public void ShouldThrowNotSupportedExceptionWhenResetIsCalled()
+ {
+ var someObjs = new List<object> {1, 2, 3};
+ var traversal = new TestTraversal(someObjs);
+
+ Assert.Throws<NotSupportedException>(() => traversal.Reset());
+ }
+
+ [Fact]
+ public void ShouldReturnAllTraverserObjsWhenToListIsCalled()
+ {
+ var expectedObjs = new List<object> {1, 2, 3};
+ var traversal = new TestTraversal(expectedObjs);
+
+ var traversedObjs = traversal.ToList();
+
+ Assert.Equal(expectedObjs, traversedObjs);
+ }
+
+ [Fact]
+ public void ShouldReturnAllTraverserObjWithoutDuplicatesWhenToSetIsCalled()
+ {
+ var traverserObjs = new List<object> {1, 1, 2, 3};
+ var traversal = new TestTraversal(traverserObjs);
+
+ var traversedObjSet = traversal.ToSet();
+
+ Assert.Equal(3, traversedObjSet.Count);
+ Assert.Equal(new HashSet<object>(traverserObjs), traversedObjSet);
+ }
+
+ [Fact]
+ public void ShouldApplyStrategiesWhenNextIsCalledAndNoTraversersPresent()
+ {
+ const int expectedObj = 531;
+ var testStrategy = new TestTraversalStrategy(new List<Traverser> {new Traverser(expectedObj)});
+ var testTraversal = new TestTraversal(new List<ITraversalStrategy> {testStrategy});
+
+ var actualObj = testTraversal.Next();
+
+ Assert.Equal(expectedObj, actualObj);
+ }
+
+ [Fact]
+ public void ShouldBeUnfoldTraverserBulksWhenToListIsCalled()
+ {
+ var objs = new List<object> {1, 2, 3};
+ var bulks = new List<long> {3, 2, 1};
+ var traversal = new TestTraversal(objs, bulks);
+
+ var traversedObjs = traversal.ToList();
+
+ var expectedObjs = UnfoldBulks(objs, bulks);
+ Assert.Equal(expectedObjs, traversedObjs);
+ }
+
+ [Fact]
+ public void ShouldDisposeSideEffectsWhenDisposeIsCalled()
+ {
+ var sideEffectsMock = new Mock<ITraversalSideEffects>();
+ var traversal = new TestTraversal(new List<object>()) {SideEffects = sideEffectsMock.Object};
+
+ traversal.Dispose();
+
+ sideEffectsMock.Verify(m => m.Dispose());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraverserTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraverserTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraverserTests.cs
new file mode 100644
index 0000000..f8963d3
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraverserTests.cs
@@ -0,0 +1,75 @@
+#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 Gremlin.Net.Process.Traversal;
+using Xunit;
+
+namespace Gremlin.Net.UnitTest.Process.Traversal
+{
+ public class TraverserTests
+ {
+ [Fact]
+ public void ShouldReturnFalseForEqualsWhereOtherIsNull()
+ {
+ var traverser = new Traverser("anObject");
+
+ var areEqual = traverser.Equals(null);
+
+ Assert.False(areEqual);
+ }
+
+ [Fact]
+ public void ShouldReturnTrueForEqualsWithSameObjectAndDifferentBulk()
+ {
+ var firstTraverser = new Traverser("anObject", 1234);
+ var secondTraverser = new Traverser("anObject", 9876);
+
+ var areEqual = firstTraverser.Equals(secondTraverser);
+
+ Assert.True(areEqual);
+ }
+
+ [Fact]
+ public void ShouldReturnTrueForEqualsObjectWithSameObjectAndDifferentBulk()
+ {
+ var firstTraverser = new Traverser("anObject", 1234);
+ object secondTraverser = new Traverser("anObject", 9876);
+
+ var areEqual = firstTraverser.Equals(secondTraverser);
+
+ Assert.True(areEqual);
+ }
+
+ [Fact]
+ public void ShouldReturnEqualHashcodesForTraversersWithSameObjectAndDifferentBulk()
+ {
+ var firstTraverser = new Traverser("anObject", 1234);
+ var secondTraverser = new Traverser("anObject", 9876);
+
+ var firstHashCode = firstTraverser.GetHashCode();
+ var secondHashCode = secondTraverser.GetHashCode();
+
+ Assert.Equal(firstHashCode, secondHashCode);
+ }
+ }
+}
\ No newline at end of file