Expand nodes for findNodes instead of refreshing (#599)

This commit is contained in:
Matt Irvine
2018-04-06 09:18:37 -07:00
committed by Karl Burtram
parent 2d4918ad83
commit 92456d50aa
3 changed files with 21 additions and 5 deletions

View File

@@ -181,7 +181,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes
nodePath = path;
}
public TreeNode FindNodeByPath(string path, bool refreshChildren = false)
public TreeNode FindNodeByPath(string path, bool expandIfNeeded = false)
{
TreeNode nodeForPath = ObjectExplorerUtils.FindNode(this, node =>
{
@@ -189,7 +189,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes
}, nodeToFilter =>
{
return path.StartsWith(nodeToFilter.GetNodePath());
}, refreshChildren);
}, expandIfNeeded);
return nodeForPath;
}

View File

@@ -49,7 +49,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer
/// determines whether to stop going further up the tree</param>
/// <param name="filter">Predicate function to filter the children when traversing</param>
/// <returns>A Tree Node that matches the condition</returns>
public static TreeNode FindNode(TreeNode node, Predicate<TreeNode> condition, Predicate<TreeNode> filter, bool refreshChildren = false)
public static TreeNode FindNode(TreeNode node, Predicate<TreeNode> condition, Predicate<TreeNode> filter, bool expandIfNeeded = false)
{
if(node == null)
{
@@ -60,12 +60,12 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer
{
return node;
}
var children = refreshChildren && !node.IsAlwaysLeaf ? node.Refresh() : node.GetChildren();
var children = expandIfNeeded && !node.IsAlwaysLeaf ? node.Expand() : node.GetChildren();
foreach (var child in children)
{
if (filter != null && filter(child))
{
TreeNode childNode = FindNode(child, condition, filter, refreshChildren);
TreeNode childNode = FindNode(child, condition, filter, expandIfNeeded);
if (childNode != null)
{
return childNode;

View File

@@ -15,6 +15,7 @@ using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Contracts;
using Microsoft.SqlTools.ServiceLayer.ObjectExplorer.Nodes;
using Microsoft.SqlTools.ServiceLayer.UnitTests.Utility;
using Moq;
using Moq.Protected;
using Xunit;
using Microsoft.SqlTools.ServiceLayer.LanguageServices;
using Microsoft.SqlServer.Management.Common;
@@ -263,6 +264,21 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer
Assert.Equal(0, foundNodes.Count);
}
[Fact]
public void FindNodeCanExpandParentNodes()
{
var mockTreeNode = new Mock<TreeNode>();
object[] populateChildrenArguments = { ItExpr.Is<bool>(x => x == false), ItExpr.IsNull<string>() };
mockTreeNode.Protected().Setup("PopulateChildren", populateChildrenArguments);
mockTreeNode.Object.IsAlwaysLeaf = false;
// If I try to find a child node of the mock tree node with the expand parameter set to true
ObjectExplorerUtils.FindNode(mockTreeNode.Object, node => false, node => false, true);
// Then PopulateChildren gets called to expand the tree node
mockTreeNode.Protected().Verify("PopulateChildren", Times.Once(), populateChildrenArguments);
}
private async Task<SessionCreatedParameters> CreateSession()
{
SessionCreatedParameters sessionResult = null;