blob: 598a5e99321a4f5078625f2e80f25115c5c4244e [file]
#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
{
[Collection("GremlinServerTests")]
public class TreeTests
{
private readonly RemoteConnectionFactory _connectionFactory = new RemoteConnectionFactory();
[Fact]
public void g_VX1X_Out_Out_Tree_ByName()
{
var g = AnonymousTraversalSource.Traversal().With(_connectionFactory.CreateRemoteConnection());
var tree = (Tree) g.V(1).Out().Out().Tree<object>().By("name").Next()!;
// marko is the single root
var rootNodes = tree.RootNodes();
Assert.Single(rootNodes);
Assert.Contains("marko", rootNodes);
// marko -> josh -> {lop, ripple} : marko, josh, lop, ripple
Assert.Equal(4, tree.NodeCount());
// depth 0 is the root
Assert.Equal(new object?[] { "marko" }, tree.GetNodesAtDepth(0));
// depth 2 holds the software vertices reachable via two out() steps
var depthTwo = tree.GetNodesAtDepth(2);
Assert.Contains("lop", depthTwo);
Assert.Contains("ripple", depthTwo);
// leaves are the software vertices
var leaves = tree.GetLeafNodes();
Assert.Contains("lop", leaves);
Assert.Contains("ripple", leaves);
Assert.False(tree.IsLeaf());
// marko -> josh -> {lop, ripple}; lop/ripple are siblings with unspecified order
const string optionA = "|--marko\n |--josh\n |--lop\n |--ripple";
const string optionB = "|--marko\n |--josh\n |--ripple\n |--lop";
var pretty = tree.PrettyPrint();
Assert.True(pretty == optionA || pretty == optionB, $"Unexpected prettyPrint output:\n{pretty}");
}
[Fact]
public void g_VX1X_Out_Out_Tree_Vertices()
{
var g = AnonymousTraversalSource.Traversal().With(_connectionFactory.CreateRemoteConnection());
var tree = (Tree) g.V(1).Out().Out().Tree<object>().Next()!;
Assert.Equal(4, tree.NodeCount());
Assert.Single(tree.RootNodes());
}
}
}