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:50 UTC

[13/50] [abbrv] tinkerpop git commit: Reorganize Gremlin-DotNet

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/SideEffectTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/SideEffectTests.cs b/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/SideEffectTests.cs
deleted file mode 100644
index 8051167..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/SideEffectTests.cs
+++ /dev/null
@@ -1,221 +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 System.Threading.Tasks;
-using Gremlin.CSharp.Structure;
-using Xunit;
-
-namespace Gremlin.CSharp.IntegrationTest.DriverRemoteConnection
-{
-    public class SideEffectTests
-    {
-        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
-
-        [Fact]
-        public void ShouldReturnCachedSideEffectWhenGetIsCalledAfterClose()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Aggregate("a").Iterate();
-
-            t.SideEffects.Get("a");
-            t.SideEffects.Close();
-            var results = t.SideEffects.Get("a");
-
-            Assert.NotNull(results);
-        }
-
-        [Fact]
-        public void ShouldThrowWhenGetIsCalledAfterCloseAndNoSideEffectsAreCachec()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Aggregate("a").Iterate();
-
-            t.SideEffects.Close();
-            Assert.Throws<InvalidOperationException>(() => t.SideEffects.Get("a"));
-        }
-
-        [Fact]
-        public void ShouldThrowWhenGetIsCalledAfterDisposeAndNoSideEffectsAreCachec()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Aggregate("a").Iterate();
-
-            t.SideEffects.Dispose();
-            Assert.Throws<InvalidOperationException>(() => t.SideEffects.Get("a"));
-        }
-
-        [Fact]
-        public void ShouldReturnSideEffectValueWhenGetIsCalledForGroupCountTraversal()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Out("created").GroupCount("m").By("name").Iterate();
-            t.SideEffects.Keys();
-
-            var m = t.SideEffects.Get("m") as Dictionary<string, dynamic>;
-
-            Assert.Equal(2, m.Count);
-            Assert.Equal((long) 3, m["lop"]);
-            Assert.Equal((long) 1, m["ripple"]);
-        }
-
-        [Fact]
-        public void ShouldReturnSideEffectValueWhenGetIsCalledOnATraversalWithSideEffect()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.WithSideEffect("a", new List<string> {"first", "second"}).V().Iterate();
-            t.SideEffects.Keys();
-
-            var a = t.SideEffects.Get("a") as List<object>;
-
-            Assert.Equal(2, a.Count);
-            Assert.Equal("first", a[0]);
-            Assert.Equal("second", a[1]);
-        }
-
-        [Fact]
-        public void ShouldThrowWhenGetIsCalledWithAnUnknownKey()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Iterate();
-
-            Assert.Throws<KeyNotFoundException>(() => t.SideEffects.Get("m"));
-        }
-
-        [Fact]
-        public void ShouldReturnBothSideEffectForTraversalWithTwoSideEffects_()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-
-            var t = g.V().Out("created").GroupCount("m").By("name").Values("name").Aggregate("n").Iterate();
-
-            var keys = t.SideEffects.Keys().ToList();
-            Assert.Equal(2, keys.Count);
-            Assert.Contains("m", keys);
-            Assert.Contains("n", keys);
-            var n = (Dictionary<object, long>) t.SideEffects.Get("n");
-            Assert.Equal(2, n.Count);
-            Assert.Equal(3, n["lop"]);
-            Assert.Equal(1, n["ripple"]);
-        }
-
-        [Fact]
-        public void ShouldReturnAnEmptyCollectionWhenKeysIsCalledForTraversalWithoutSideEffect()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-
-            var t = g.V().Iterate();
-            var keys = t.SideEffects.Keys();
-
-            Assert.Equal(0, keys.Count);
-        }
-
-        [Fact]
-        public void ShouldReturnCachedKeysWhenForCloseAfterSomeGet()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Aggregate("a").Aggregate("b").Iterate();
-
-            t.SideEffects.Get("a");
-            t.SideEffects.Close();
-            var keys = t.SideEffects.Keys();
-
-            Assert.Equal(2, keys.Count);
-            Assert.Contains("a", keys);
-            Assert.Contains("b", keys);
-        }
-
-        [Fact]
-        public void ShouldReturnSideEffectKeyWhenKeysIsCalledForNamedGroupCount()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-            var t = g.V().Out("created").GroupCount("m").By("name").Iterate();
-
-            var keys = t.SideEffects.Keys();
-
-            var keysList = keys.ToList();
-            Assert.Equal(1, keysList.Count);
-            Assert.Contains("m", keysList);
-        }
-
-        [Fact]
-        public async Task ShouldReturnSideEffectsKeysWhenKeysIsCalledOnTraversalThatExecutedAsynchronously()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-
-            var t = await g.V().Aggregate("a").Promise(x => x);
-            var keys = t.SideEffects.Keys();
-
-            Assert.Equal(1, keys.Count);
-            Assert.Contains("a", keys);
-        }
-
-        [Fact]
-        public async Task ShouldReturnSideEffectValueWhenGetIsCalledOnTraversalThatExecutedAsynchronously()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-
-            var t = await g.V().Aggregate("a").Promise(x => x);
-            var value = t.SideEffects.Get("a");
-
-            Assert.NotNull(value);
-        }
-
-        [Fact]
-        public async Task ShouldNotThrowWhenCloseIsCalledOnTraversalThatExecutedAsynchronously()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection);
-
-            var t = await g.V().Aggregate("a").Promise(x => x);
-            t.SideEffects.Close();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/StrategiesTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/StrategiesTests.cs b/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/StrategiesTests.cs
deleted file mode 100644
index 59e2092..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/DriverRemoteConnection/StrategiesTests.cs
+++ /dev/null
@@ -1,193 +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.Threading.Tasks;
-using Gremlin.CSharp.Process;
-using Gremlin.CSharp.Structure;
-using Gremlin.Net.Driver.Exceptions;
-using Gremlin.Net.Process.Traversal.Strategy.Decoration;
-using Gremlin.Net.Process.Traversal.Strategy.Verification;
-using Xunit;
-
-namespace Gremlin.CSharp.IntegrationTest.DriverRemoteConnection
-{
-    public class StrategiesTests
-    {
-        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
-
-        [Fact]
-        public void g_V_Count_Next_WithVertexLabelSubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person")));
-
-            var count = g.V().Count().Next();
-
-            Assert.Equal((long) 4, count);
-        }
-
-        [Fact]
-        public void g_E_Count_Next_WithVertexAndEdgeLabelSubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person"),
-                        edgeCriterion: __.HasLabel("created")));
-
-            var count = g.E().Count().Next();
-
-            Assert.Equal((long)0, count);
-        }
-
-        [Fact]
-        public void g_V_Label_Dedup_Count_Next_WithVertexLabelSubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person")));
-
-            var count = g.V().Label().Dedup().Count().Next();
-
-            Assert.Equal((long)1, count);
-        }
-
-        [Fact]
-        public void g_V_Label_Dedup_Next_WWithVertexLabelSubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person")));
-
-            var label = g.V().Label().Dedup().Next();
-
-            Assert.Equal("person", label);
-        }
-
-        [Fact]
-        public void g_V_Count_Next_WithVertexHasPropertySubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.Has("name", "marko")));
-
-            var count = g.V().Count().Next();
-
-            Assert.Equal((long)1, count);
-        }
-
-        [Fact]
-        public void g_E_Count_Next_WithEdgeLimitSubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(edgeCriterion: __.Limit(0)));
-
-            var count = g.E().Count().Next();
-
-            Assert.Equal((long)0, count);
-        }
-
-        [Fact]
-        public void g_V_Label_Dedup_Next_WithVertexHasPropertySubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.Has("name", "marko")));
-
-            var label = g.V().Label().Dedup().Next();
-
-            Assert.Equal("person", label);
-        }
-
-        [Fact]
-        public void g_V_ValuesXnameX_Next_WithVertexHasPropertySubgraphStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g =
-                graph.Traversal()
-                    .WithRemote(connection)
-                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.Has("name", "marko")));
-
-            var name = g.V().Values("name").Next();
-
-            Assert.Equal("marko", name);
-        }
-
-        [Fact]
-        public void g_V_Count_Next_WithComputer()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection).WithComputer();
-
-            var count = g.V().Count().Next();
-
-            Assert.Equal((long)6, count);
-        }
-
-        [Fact]
-        public void g_E_Count_Next_WithComputer()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection).WithComputer();
-
-            var count = g.E().Count().Next();
-
-            Assert.Equal((long)6, count);
-        }
-
-        [Fact]
-        public async Task ShouldThrowWhenModifyingTraversalSourceWithReadOnlyStrategy()
-        {
-            var graph = new Graph();
-            var connection = _connectionFactory.CreateRemoteConnection();
-            var g = graph.Traversal().WithRemote(connection).WithStrategies(new ReadOnlyStrategy());
-
-            await Assert.ThrowsAsync<ResponseException>(async () => await g.AddV("person").Promise(t => t.Next()));
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/GraphSONWriterTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/GraphSONWriterTests.cs b/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/GraphSONWriterTests.cs
deleted file mode 100644
index 99a1b65..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/GraphSONWriterTests.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 Gremlin.CSharp.Process;
-using Gremlin.Net.Structure.IO.GraphSON;
-using Xunit;
-
-namespace Gremlin.CSharp.IntegrationTest
-{
-    public class GraphSONWriterTests
-    {
-        [Fact]
-        public void ShouldSerializeLongPredicateCorrectly()
-        {
-            var writer = CreateStandardGraphSONWriter();
-            var predicate = P.Lt("b").Or(P.Gt("c")).And(P.Neq("d"));
-
-            var graphSon = writer.WriteObject(predicate);
-
-            const string expected =
-                "{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"and\",\"value\":[{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"or\",\"value\":[{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"lt\",\"value\":\"b\"}},{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"gt\",\"value\":\"c\"}}]}},{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"neq\",\"value\":\"d\"}}]}}";
-            Assert.Equal(expected, graphSon);
-        }
-
-        private GraphSONWriter CreateStandardGraphSONWriter()
-        {
-            return new GraphSONWriter();
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Gremlin.CSharp.IntegrationTest.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Gremlin.CSharp.IntegrationTest.csproj b/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Gremlin.CSharp.IntegrationTest.csproj
deleted file mode 100644
index 1e7a7d2..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Gremlin.CSharp.IntegrationTest.csproj
+++ /dev/null
@@ -1,38 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>netcoreapp1.0</TargetFramework>
-    <AssemblyName>Gremlin.CSharp.IntegrationTest</AssemblyName>
-    <PackageId>Gremlin.CSharp.IntegrationTest</PackageId>
-    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
-    <RuntimeFrameworkVersion>1.0.4</RuntimeFrameworkVersion>
-    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
-    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
-    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Gremlin.CSharp\Gremlin.CSharp.csproj" />
-    <ProjectReference Include="..\..\src\Gremlin.Net.Process\Gremlin.Net.Process.csproj" />
-    <ProjectReference Include="..\..\src\Gremlin.Net\Gremlin.Net.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
-    <PackageReference Include="xunit" Version="2.2.0" />
-    <PackageReference Include="Microsoft.Extensions.Configuration" Version="1.1.1" />
-    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.1" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <None Update="appsettings.json">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
-    </None>
-  </ItemGroup>
-
-</Project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Properties/AssemblyInfo.cs b/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Properties/AssemblyInfo.cs
deleted file mode 100644
index 579426b..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,44 +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.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Gremlin.CSharp.IntegrationTest")]
-[assembly: AssemblyTrademark("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-
-[assembly: Guid("232f0f2b-178e-4214-99c7-cc4dc6710f44")]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/appsettings.json
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/appsettings.json b/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/appsettings.json
deleted file mode 100644
index 38007ec..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.IntegrationTest/appsettings.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "TestServerIpAddress": "localhost",
-  "TestServerPort": 45950
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/GraphTraversalSourceTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/GraphTraversalSourceTests.cs b/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/GraphTraversalSourceTests.cs
deleted file mode 100644
index bac2d55..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/GraphTraversalSourceTests.cs
+++ /dev/null
@@ -1,68 +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.CSharp.Structure;
-using Xunit;
-
-namespace Gremlin.CSharp.UnitTest
-{
-    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.CSharp.UnitTest/Gremlin.CSharp.UnitTest.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/Gremlin.CSharp.UnitTest.csproj b/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/Gremlin.CSharp.UnitTest.csproj
deleted file mode 100644
index ea81928..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/Gremlin.CSharp.UnitTest.csproj
+++ /dev/null
@@ -1,21 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>    
-    <TargetFramework>netcoreapp1.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
-    <PackageReference Include="xunit" Version="2.2.0" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Gremlin.CSharp\Gremlin.CSharp.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
-  </ItemGroup>
-
-</Project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/PredicateTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/PredicateTests.cs b/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/PredicateTests.cs
deleted file mode 100644
index c06fb68..0000000
--- a/gremlin-dotnet/test/Gremlin.CSharp.UnitTest/PredicateTests.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 Gremlin.CSharp.Process;
-using Xunit;
-
-namespace Gremlin.CSharp.UnitTest
-{
-    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.IntegrationTest/Gremlin.Net.IntegrationTest.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gremlin.Net.IntegrationTest.csproj b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gremlin.Net.IntegrationTest.csproj
index f8407a9..c5f29da 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gremlin.Net.IntegrationTest.csproj
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gremlin.Net.IntegrationTest.csproj
@@ -19,7 +19,6 @@
   </ItemGroup>
 
   <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.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs
new file mode 100644
index 0000000..1afb7bb
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/BytecodeGenerationTests.cs
@@ -0,0 +1,76 @@
+#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 Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.BytecodeGeneration
+{
+    public class BytecodeGenerationTests
+    {
+        [Fact]
+        public void g_V_OutXcreatedX()
+        {
+            var g = new Graph().Traversal();
+
+            var bytecode = g.V().Out("created").Bytecode;
+
+            Assert.Equal(0, bytecode.SourceInstructions.Count);
+            Assert.Equal(2, bytecode.StepInstructions.Count);
+            Assert.Equal("V", bytecode.StepInstructions[0].OperatorName);
+            Assert.Equal("out", bytecode.StepInstructions[1].OperatorName);
+            Assert.Equal("created", bytecode.StepInstructions[1].Arguments[0]);
+            Assert.Equal(1, bytecode.StepInstructions[1].Arguments.Length);
+        }
+
+        [Fact]
+        public void g_WithSackX1X_E_GroupCount_ByXweightX()
+        {
+            var g = new Graph().Traversal();
+
+            var bytecode = g.WithSack(1).E().GroupCount().By("weight").Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal("withSack", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(1, bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Equal(3, bytecode.StepInstructions.Count);
+            Assert.Equal("E", bytecode.StepInstructions[0].OperatorName);
+            Assert.Equal("groupCount", bytecode.StepInstructions[1].OperatorName);
+            Assert.Equal("by", bytecode.StepInstructions[2].OperatorName);
+            Assert.Equal("weight", bytecode.StepInstructions[2].Arguments[0]);
+            Assert.Equal(0, bytecode.StepInstructions[0].Arguments.Length);
+            Assert.Equal(0, bytecode.StepInstructions[1].Arguments.Length);
+            Assert.Equal(1, bytecode.StepInstructions[2].Arguments.Length);
+        }
+
+        [Fact]
+        public void AnonymousTraversal_Start_EmptyBytecode()
+        {
+            var bytecode = __.Start().Bytecode;
+
+            Assert.Equal(0, bytecode.SourceInstructions.Count);
+            Assert.Equal(0, bytecode.StepInstructions.Count);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/StrategiesTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/StrategiesTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/StrategiesTests.cs
new file mode 100644
index 0000000..418b0e2
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/BytecodeGeneration/StrategiesTests.cs
@@ -0,0 +1,170 @@
+#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 Gremlin.Net.Process.Traversal;
+using Gremlin.Net.Process.Traversal.Strategy.Decoration;
+using Gremlin.Net.Process.Traversal.Strategy.Finalization;
+using Gremlin.Net.Process.Traversal.Strategy.Optimization;
+using Gremlin.Net.Process.Traversal.Strategy.Verification;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.BytecodeGeneration
+{
+    public class StrategiesTests
+    {
+        [Fact]
+        public void TraversalWithoutStrategies_AfterWithStrategiesWasCalled_WithStrategiesNotAffected()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal().WithStrategies(new ReadOnlyStrategy(), new IncidentToAdjacentStrategy());
+
+            var bytecode = g.WithoutStrategies(new ReadOnlyStrategy()).Bytecode;
+
+            Assert.Equal(2, bytecode.SourceInstructions.Count);
+            Assert.Equal("withStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(2, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Equal(new IncidentToAdjacentStrategy(), bytecode.SourceInstructions[0].Arguments[1]);
+
+            Assert.Equal("withoutStrategies", bytecode.SourceInstructions[1].OperatorName);
+            Assert.Equal(1, bytecode.SourceInstructions[1].Arguments.Length);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[1].Arguments[0]);
+        }
+
+        [Fact]
+        public void ShouldIncludeMultipleStrategiesInBytecodeWhenGivenToWithoutStrategies()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal();
+
+            var bytecode = g.WithoutStrategies(new ReadOnlyStrategy(), new LazyBarrierStrategy()).Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(2, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withoutStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Equal(new LazyBarrierStrategy(), bytecode.SourceInstructions[0].Arguments[1]);
+        }
+
+        [Fact]
+        public void ShouldIncludeOneStrategyInBytecodeWhenGivenToWithoutStrategies()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal();
+
+            var bytecode = g.WithoutStrategies(new ReadOnlyStrategy()).Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(1, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withoutStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+        }
+
+        [Fact]
+        public void ShouldIncludeConfigurationInBytecodeWhenGivenToWithStrategies()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal();
+
+            var bytecode = g.WithStrategies(new MatchAlgorithmStrategy("greedy")).Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(1, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new MatchAlgorithmStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Contains("greedy",
+                ((MatchAlgorithmStrategy) bytecode.SourceInstructions[0].Arguments[0]).Configuration.Values);
+        }
+
+        [Fact]
+        public void ShouldIncludeMultipleStrategiesInBytecodeWhenGivenToWithStrategies()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal();
+
+            var bytecode = g.WithStrategies(new ReadOnlyStrategy(), new IncidentToAdjacentStrategy()).Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(2, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Equal(new IncidentToAdjacentStrategy(), bytecode.SourceInstructions[0].Arguments[1]);
+        }
+
+        [Fact]
+        public void ShouldIncludeOneStrategyInBytecodeWhenGivenToWithStrategies()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal();
+
+            var bytecode = g.WithStrategies(new ReadOnlyStrategy()).Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(1, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Equal("ReadOnlyStrategy", bytecode.SourceInstructions[0].Arguments[0].ToString());
+            Assert.Equal(new ReadOnlyStrategy().GetHashCode(), bytecode.SourceInstructions[0].Arguments[0].GetHashCode());
+            Assert.Equal(0, g.TraversalStrategies.Count);
+        }
+
+        [Fact]
+        public void TraversalWithStrategies_Strategies_ApplyToReusedGraphTraversalSource()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal().WithStrategies(new ReadOnlyStrategy(), new IncidentToAdjacentStrategy());
+
+            var bytecode = g.V().Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(2, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new ReadOnlyStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            Assert.Equal(new IncidentToAdjacentStrategy(), bytecode.SourceInstructions[0].Arguments[1]);
+            Assert.Equal(1, bytecode.StepInstructions.Count);
+            Assert.Equal("V", bytecode.StepInstructions[0].OperatorName);
+        }
+
+        [Fact]
+        public void TraversalWithStrategies_StrategyWithTraversalInConfig_IncludeTraversalInInConfigInBytecode()
+        {
+            var graph = new Graph();
+            var g = graph.Traversal();
+
+            var bytecode = g.WithStrategies(new SubgraphStrategy(__.Has("name", "marko"))).Bytecode;
+
+            Assert.Equal(1, bytecode.SourceInstructions.Count);
+            Assert.Equal(1, bytecode.SourceInstructions[0].Arguments.Length);
+            Assert.Equal("withStrategies", bytecode.SourceInstructions[0].OperatorName);
+            Assert.Equal(new SubgraphStrategy(), bytecode.SourceInstructions[0].Arguments[0]);
+            SubgraphStrategy strategy = bytecode.SourceInstructions[0].Arguments[0];
+            Assert.Equal(1, strategy.Configuration.Count);
+            Assert.Equal(typeof(GraphTraversal), strategy.Configuration["vertices"].GetType());
+            GraphTraversal traversal = strategy.Configuration["vertices"];
+            Assert.Equal("has", traversal.Bytecode.StepInstructions[0].OperatorName);
+            Assert.Equal(new List<string> {"name", "marko"}, traversal.Bytecode.StepInstructions[0].Arguments);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/EnumTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/EnumTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/EnumTests.cs
new file mode 100644
index 0000000..6d0f529
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/EnumTests.cs
@@ -0,0 +1,59 @@
+#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 Gremlin.Net.Process.Traversal;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    public class EnumTests
+    {
+        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
+
+        [Fact]
+        public void ShouldUseOrderDecrInByStep()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var orderedAges = g.V().Values("age").Order().By(Order.decr).ToList();
+
+            Assert.Equal(new List<object> {35, 32, 29, 27}, orderedAges);
+        }
+
+        [Fact]
+        public void ShouldUseTLabelInHasStep()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var personsCount = g.V().Has(T.label, "person").Count().Next();
+
+            Assert.Equal((long) 4, personsCount);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalSourceTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalSourceTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalSourceTests.cs
new file mode 100644
index 0000000..0e56c2e
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalSourceTests.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.Collections.Generic;
+using Gremlin.Net.Process.Traversal;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    public class GraphTraversalSourceTests
+    {
+        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
+
+        [Fact]
+        public void ShouldUseSideEffectSpecifiedInWithSideEffect()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var results = g.WithSideEffect("a", new List<string> {"josh", "peter"})
+                .V(1)
+                .Out("created")
+                .In("created")
+                .Values("name")
+                .Where(P.Within("a"))
+                .ToList();
+
+            Assert.Equal(2, results.Count);
+            Assert.Contains("josh", results);
+            Assert.Contains("peter", results);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalTests.cs
new file mode 100644
index 0000000..ba999f3
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/GraphTraversalTests.cs
@@ -0,0 +1,169 @@
+#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 System.Threading.Tasks;
+using Gremlin.Net.Process.Traversal;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    public class GraphTraversalTests
+    {
+        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
+
+        [Fact]
+        public void g_V_Count()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var count = g.V().Count().Next();
+
+            Assert.Equal((long) 6, count);
+        }
+
+        [Fact]
+        public void g_VX1X_Next()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var vertex = (Vertex) g.V(1).Next();
+
+            Assert.Equal(new Vertex((long) 1), vertex);
+            Assert.Equal((long) 1, vertex.Id);
+        }
+
+        [Fact]
+        public void g_VX1X_NextTraverser()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var traverser = g.V(1).NextTraverser();
+
+            Assert.Equal(new Traverser(new Vertex((long)1)), traverser);
+        }
+
+        [Fact]
+        public void g_VX1X_ToList()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var list = g.V(1).ToList();
+
+            Assert.Equal(1, list.Count);
+        }
+
+        [Fact]
+        public void g_V_RepeatXBothX_TimesX5X_NextX10X()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var result = g.V().Repeat(__.Both()).Times(5).Next(10);
+
+            Assert.Equal(10, result.Count());
+        }
+
+        [Fact]
+        public void g_V_HasXname_markoX_ValueMap_Next()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var receivedValueMap = g.V().Has("name", "marko").ValueMap().Next();
+
+            var expectedValueMap = new Dictionary<string, dynamic>
+            {
+                {"age", new List<object> {29}},
+                {"name", new List<object> {"marko"}}
+            };
+            Assert.Equal(expectedValueMap, receivedValueMap);
+        }
+
+        [Fact]
+        public void g_V_RepeatXOutX_TimesX2X_ValuesXNameX()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var t = g.V().Repeat(__.Out()).Times(2).Values("name");
+            var names = t.ToList();
+
+            Assert.Equal((long) 2, names.Count);
+            Assert.Contains("lop", names);
+            Assert.Contains("ripple", names);
+        }
+
+        [Fact]
+        public void ShortestPathTest()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var shortestPath =
+                (Path) g.V(5).Repeat(__.Both().SimplePath()).Until(__.HasId(6)).Limit(1).Path().Next();
+
+            Assert.Equal((long) 4, shortestPath.Count);
+            Assert.Equal(new Vertex((long) 6), shortestPath[3]);
+        }
+
+        [Fact]
+        public void ShouldUseBindingsInTraversal()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var b = new Bindings();
+            var count = g.V().Has(b.Of("propertyKey", "name"), b.Of("propertyValue", "marko")).OutE().Count().Next();
+
+            Assert.Equal((long) 3, count);
+        }
+
+        [Fact]
+        public async Task ShouldExecuteAsynchronouslyWhenPromiseIsCalled()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var count = await g.V().Count().Promise(t => t.Next());
+
+            Assert.Equal((long) 6, count);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/PredicateTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/PredicateTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/PredicateTests.cs
new file mode 100644
index 0000000..88587f6
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/PredicateTests.cs
@@ -0,0 +1,58 @@
+#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 Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    public class PredicateTests
+    {
+        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
+
+        [Fact]
+        public void ShouldUsePredicatesCombinedWithPAndInHasStep()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var count = g.V().Has("age", P.Gt(30).And(P.Lt(35))).Count().Next();
+
+            Assert.Equal((long) 1, count);
+        }
+
+        [Fact]
+        public void ShouldUsePWithinInHasStep()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var count = g.V().Has("name", P.Within("josh", "vadas")).Count().Next();
+
+            Assert.Equal((long) 2, count);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/RemoteConnectionFactory.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/RemoteConnectionFactory.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/RemoteConnectionFactory.cs
new file mode 100644
index 0000000..ab67c26
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/RemoteConnectionFactory.cs
@@ -0,0 +1,41 @@
+#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 Gremlin.Net.Driver;
+using Gremlin.Net.Process.Remote;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    internal class RemoteConnectionFactory
+    {
+        private static readonly string TestHost = ConfigProvider.Configuration["TestServerIpAddress"];
+        private static readonly int TestPort = Convert.ToInt32(ConfigProvider.Configuration["TestServerPort"]);
+
+        public IRemoteConnection CreateRemoteConnection()
+        {
+            return new Net.Driver.Remote.DriverRemoteConnection(
+                new GremlinClient(new GremlinServer(TestHost, TestPort)));
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/SideEffectTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/SideEffectTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/SideEffectTests.cs
new file mode 100644
index 0000000..c3629bc
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/SideEffectTests.cs
@@ -0,0 +1,221 @@
+#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 System.Threading.Tasks;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    public class SideEffectTests
+    {
+        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
+
+        [Fact]
+        public void ShouldReturnCachedSideEffectWhenGetIsCalledAfterClose()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Aggregate("a").Iterate();
+
+            t.SideEffects.Get("a");
+            t.SideEffects.Close();
+            var results = t.SideEffects.Get("a");
+
+            Assert.NotNull(results);
+        }
+
+        [Fact]
+        public void ShouldThrowWhenGetIsCalledAfterCloseAndNoSideEffectsAreCachec()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Aggregate("a").Iterate();
+
+            t.SideEffects.Close();
+            Assert.Throws<InvalidOperationException>(() => t.SideEffects.Get("a"));
+        }
+
+        [Fact]
+        public void ShouldThrowWhenGetIsCalledAfterDisposeAndNoSideEffectsAreCachec()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Aggregate("a").Iterate();
+
+            t.SideEffects.Dispose();
+            Assert.Throws<InvalidOperationException>(() => t.SideEffects.Get("a"));
+        }
+
+        [Fact]
+        public void ShouldReturnSideEffectValueWhenGetIsCalledForGroupCountTraversal()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Out("created").GroupCount("m").By("name").Iterate();
+            t.SideEffects.Keys();
+
+            var m = t.SideEffects.Get("m") as Dictionary<string, dynamic>;
+
+            Assert.Equal(2, m.Count);
+            Assert.Equal((long) 3, m["lop"]);
+            Assert.Equal((long) 1, m["ripple"]);
+        }
+
+        [Fact]
+        public void ShouldReturnSideEffectValueWhenGetIsCalledOnATraversalWithSideEffect()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.WithSideEffect("a", new List<string> {"first", "second"}).V().Iterate();
+            t.SideEffects.Keys();
+
+            var a = t.SideEffects.Get("a") as List<object>;
+
+            Assert.Equal(2, a.Count);
+            Assert.Equal("first", a[0]);
+            Assert.Equal("second", a[1]);
+        }
+
+        [Fact]
+        public void ShouldThrowWhenGetIsCalledWithAnUnknownKey()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Iterate();
+
+            Assert.Throws<KeyNotFoundException>(() => t.SideEffects.Get("m"));
+        }
+
+        [Fact]
+        public void ShouldReturnBothSideEffectForTraversalWithTwoSideEffects_()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var t = g.V().Out("created").GroupCount("m").By("name").Values("name").Aggregate("n").Iterate();
+
+            var keys = t.SideEffects.Keys().ToList();
+            Assert.Equal(2, keys.Count);
+            Assert.Contains("m", keys);
+            Assert.Contains("n", keys);
+            var n = (Dictionary<object, long>) t.SideEffects.Get("n");
+            Assert.Equal(2, n.Count);
+            Assert.Equal(3, n["lop"]);
+            Assert.Equal(1, n["ripple"]);
+        }
+
+        [Fact]
+        public void ShouldReturnAnEmptyCollectionWhenKeysIsCalledForTraversalWithoutSideEffect()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var t = g.V().Iterate();
+            var keys = t.SideEffects.Keys();
+
+            Assert.Equal(0, keys.Count);
+        }
+
+        [Fact]
+        public void ShouldReturnCachedKeysWhenForCloseAfterSomeGet()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Aggregate("a").Aggregate("b").Iterate();
+
+            t.SideEffects.Get("a");
+            t.SideEffects.Close();
+            var keys = t.SideEffects.Keys();
+
+            Assert.Equal(2, keys.Count);
+            Assert.Contains("a", keys);
+            Assert.Contains("b", keys);
+        }
+
+        [Fact]
+        public void ShouldReturnSideEffectKeyWhenKeysIsCalledForNamedGroupCount()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+            var t = g.V().Out("created").GroupCount("m").By("name").Iterate();
+
+            var keys = t.SideEffects.Keys();
+
+            var keysList = keys.ToList();
+            Assert.Equal(1, keysList.Count);
+            Assert.Contains("m", keysList);
+        }
+
+        [Fact]
+        public async Task ShouldReturnSideEffectsKeysWhenKeysIsCalledOnTraversalThatExecutedAsynchronously()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var t = await g.V().Aggregate("a").Promise(x => x);
+            var keys = t.SideEffects.Keys();
+
+            Assert.Equal(1, keys.Count);
+            Assert.Contains("a", keys);
+        }
+
+        [Fact]
+        public async Task ShouldReturnSideEffectValueWhenGetIsCalledOnTraversalThatExecutedAsynchronously()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var t = await g.V().Aggregate("a").Promise(x => x);
+            var value = t.SideEffects.Get("a");
+
+            Assert.NotNull(value);
+        }
+
+        [Fact]
+        public async Task ShouldNotThrowWhenCloseIsCalledOnTraversalThatExecutedAsynchronously()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection);
+
+            var t = await g.V().Aggregate("a").Promise(x => x);
+            t.SideEffects.Close();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/StrategiesTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/StrategiesTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/StrategiesTests.cs
new file mode 100644
index 0000000..6c7d8b6
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/DriverRemoteConnection/StrategiesTests.cs
@@ -0,0 +1,193 @@
+#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.Threading.Tasks;
+using Gremlin.Net.Driver.Exceptions;
+using Gremlin.Net.Process.Traversal;
+using Gremlin.Net.Process.Traversal.Strategy.Decoration;
+using Gremlin.Net.Process.Traversal.Strategy.Verification;
+using Gremlin.Net.Structure;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal.DriverRemoteConnection
+{
+    public class StrategiesTests
+    {
+        private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
+
+        [Fact]
+        public void g_V_Count_Next_WithVertexLabelSubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person")));
+
+            var count = g.V().Count().Next();
+
+            Assert.Equal((long) 4, count);
+        }
+
+        [Fact]
+        public void g_E_Count_Next_WithVertexAndEdgeLabelSubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person"),
+                        edgeCriterion: __.HasLabel("created")));
+
+            var count = g.E().Count().Next();
+
+            Assert.Equal((long)0, count);
+        }
+
+        [Fact]
+        public void g_V_Label_Dedup_Count_Next_WithVertexLabelSubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person")));
+
+            var count = g.V().Label().Dedup().Count().Next();
+
+            Assert.Equal((long)1, count);
+        }
+
+        [Fact]
+        public void g_V_Label_Dedup_Next_WWithVertexLabelSubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.HasLabel("person")));
+
+            var label = g.V().Label().Dedup().Next();
+
+            Assert.Equal("person", label);
+        }
+
+        [Fact]
+        public void g_V_Count_Next_WithVertexHasPropertySubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.Has("name", "marko")));
+
+            var count = g.V().Count().Next();
+
+            Assert.Equal((long)1, count);
+        }
+
+        [Fact]
+        public void g_E_Count_Next_WithEdgeLimitSubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(edgeCriterion: __.Limit(0)));
+
+            var count = g.E().Count().Next();
+
+            Assert.Equal((long)0, count);
+        }
+
+        [Fact]
+        public void g_V_Label_Dedup_Next_WithVertexHasPropertySubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.Has("name", "marko")));
+
+            var label = g.V().Label().Dedup().Next();
+
+            Assert.Equal("person", label);
+        }
+
+        [Fact]
+        public void g_V_ValuesXnameX_Next_WithVertexHasPropertySubgraphStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g =
+                graph.Traversal()
+                    .WithRemote(connection)
+                    .WithStrategies(new SubgraphStrategy(vertexCriterion: __.Has("name", "marko")));
+
+            var name = g.V().Values("name").Next();
+
+            Assert.Equal("marko", name);
+        }
+
+        [Fact]
+        public void g_V_Count_Next_WithComputer()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection).WithComputer();
+
+            var count = g.V().Count().Next();
+
+            Assert.Equal((long)6, count);
+        }
+
+        [Fact]
+        public void g_E_Count_Next_WithComputer()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection).WithComputer();
+
+            var count = g.E().Count().Next();
+
+            Assert.Equal((long)6, count);
+        }
+
+        [Fact]
+        public async Task ShouldThrowWhenModifyingTraversalSourceWithReadOnlyStrategy()
+        {
+            var graph = new Graph();
+            var connection = _connectionFactory.CreateRemoteConnection();
+            var g = graph.Traversal().WithRemote(connection).WithStrategies(new ReadOnlyStrategy());
+
+            await Assert.ThrowsAsync<ResponseException>(async () => await g.AddV("person").Promise(t => t.Next()));
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GraphSONWriterTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GraphSONWriterTests.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GraphSONWriterTests.cs
new file mode 100644
index 0000000..d8ccabe
--- /dev/null
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Process/Traversal/GraphSONWriterTests.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 Gremlin.Net.Structure.IO.GraphSON;
+using Xunit;
+
+namespace Gremlin.Net.IntegrationTest.Process.Traversal
+{
+    public class GraphSONWriterTests
+    {
+        [Fact]
+        public void ShouldSerializeLongPredicateCorrectly()
+        {
+            var writer = CreateStandardGraphSONWriter();
+            var predicate = P.Lt("b").Or(P.Gt("c")).And(P.Neq("d"));
+
+            var graphSon = writer.WriteObject(predicate);
+
+            const string expected =
+                "{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"and\",\"value\":[{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"or\",\"value\":[{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"lt\",\"value\":\"b\"}},{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"gt\",\"value\":\"c\"}}]}},{\"@type\":\"g:P\",\"@value\":{\"predicate\":\"neq\",\"value\":\"d\"}}]}}";
+            Assert.Equal(expected, graphSon);
+        }
+
+        private GraphSONWriter CreateStandardGraphSONWriter()
+        {
+            return new GraphSONWriter();
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Gremlin.Net.Process.UnitTest.csproj
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Gremlin.Net.Process.UnitTest.csproj b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Gremlin.Net.Process.UnitTest.csproj
deleted file mode 100644
index 2345f31..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Gremlin.Net.Process.UnitTest.csproj
+++ /dev/null
@@ -1,22 +0,0 @@
-<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>    
-    <TargetFramework>netcoreapp1.1</TargetFramework>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
-    <PackageReference Include="Moq" Version="4.7.1" />
-    <PackageReference Include="xunit" Version="2.2.0" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\src\Gremlin.Net.Process\Gremlin.Net.Process.csproj" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <Service Include="{82a7f48d-3b50-4b1e-b82e-3ada8210c358}" />
-  </ItemGroup>
-
-</Project>

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/fec3ca5c/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/BytecodeTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/BytecodeTests.cs b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/BytecodeTests.cs
deleted file mode 100644
index de0a0b7..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/BytecodeTests.cs
+++ /dev/null
@@ -1,44 +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 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.Process.UnitTest/Traversal/Strategy/StrategyTests.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/Strategy/StrategyTests.cs b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/Strategy/StrategyTests.cs
deleted file mode 100644
index 2e7dc5e..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/Strategy/StrategyTests.cs
+++ /dev/null
@@ -1,109 +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.Strategy;
-using Gremlin.Net.Process.Traversal.Strategy.Optimization;
-using Gremlin.Net.Process.Traversal.Strategy.Verification;
-using Xunit;
-
-namespace Gremlin.Net.Process.UnitTest.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.Process.UnitTest/Traversal/TestTraversal.cs
----------------------------------------------------------------------
diff --git a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversal.cs b/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversal.cs
deleted file mode 100644
index 34f88df..0000000
--- a/gremlin-dotnet/test/Gremlin.Net.Process.UnitTest/Traversal/TestTraversal.cs
+++ /dev/null
@@ -1,51 +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.Linq;
-using Gremlin.Net.Process.Traversal;
-
-namespace Gremlin.Net.Process.UnitTest.Traversal
-{
-    public class TestTraversal : Process.Traversal.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