diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs
index 1475f80d..a33c04e4 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/Nodes/TreeNode.cs
@@ -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;
}
diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerUtils.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerUtils.cs
index 5c635f0f..cf3c658e 100644
--- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerUtils.cs
+++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerUtils.cs
@@ -49,7 +49,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer
/// determines whether to stop going further up the tree
/// Predicate function to filter the children when traversing
/// A Tree Node that matches the condition
- public static TreeNode FindNode(TreeNode node, Predicate condition, Predicate filter, bool refreshChildren = false)
+ public static TreeNode FindNode(TreeNode node, Predicate condition, Predicate 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;
diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs
index d538c7c4..52f4ac07 100644
--- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs
+++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs
@@ -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();
+ object[] populateChildrenArguments = { ItExpr.Is(x => x == false), ItExpr.IsNull() };
+ 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 CreateSession()
{
SessionCreatedParameters sessionResult = null;