private void InitiateSearch() { if (!updateFromSelection) { var typeName = this.typeName; var newSearch = new SearchAction(typeName, this.AssemblyGroups); newSearch.Completed += (s, args) => { SearchAction completedSearch = s as SearchAction; SearchAction currentSearch = this.currentSearch; this.currentSearch = null; if (completedSearch == currentSearch) { TypeNode entry = args.Result as TypeNode; this.UpdateSelection(entry); if (entry != null) { // don't want to react to updates when searching entry.PropertyChanged -= this.OnTypeNodePropertyChanged; entry.IsSelected = true; entry.PropertyChanged += this.OnTypeNodePropertyChanged; } } }; if (this.currentSearch != null) { this.currentSearch.Abort(); } this.ClearSelection(); this.currentSearch = newSearch; this.currentSearch.Run(); } }
public void PrefixForExistingClassName_CollapsesNonMatchingClassNodeAndParentNodesWithNoMatchingChildren() { // collapses non-matching types // collapses parents with no visible children // expands parents with visible children var match = new { DisplayName = "test", Assemblies = new object[] { new { DisplayName = "TestAssembly1", Visibility = Visibility.Visible, IsExpanded = true, Namespaces = new object [] { new { DisplayName = "TestAssembly1.Namespace1", Visibility = Visibility.Visible, IsExpanded = true, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly1.Namespace1.Class1", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "Class2", FullName = "TestAssembly1.Namespace1.Class2", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "InternalClass1", FullName = "TestAssembly1.Namespace1.InternalClass1", Visibility = Visibility.Collapsed, IsExpanded = false }, } }, new { DisplayName = "TestAssembly1.Namespace2", Visibility = Visibility.Collapsed, IsExpanded = false, Types = new object[] { new { DisplayName = "AnotherInternalClass", FullName = "TestAssembly1.Namespace2.AnotherInternalClass", Visibility = Visibility.Collapsed, IsExpanded = false } } } } }, new { DisplayName = "TestAssembly2", Visibility = Visibility.Visible, IsExpanded = true, Namespaces = new object [] { new { DisplayName = "TestAssembly2", Visibility = Visibility.Visible, IsExpanded = true, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly2.Class1", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "NamespaceClass", FullName = "TestAssembly2.NamespaceClass", Visibility = Visibility.Collapsed, IsExpanded = false } } }, new { DisplayName = "TestAssembly2.Namespace1", Visibility = Visibility.Visible, IsExpanded = true, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly2.Namespace1.Class1", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "Class12", FullName = "TestAssembly2.Namespace1.Class12", Visibility = Visibility.Visible, IsExpanded = false } } } } } } }; var action = new SearchAction("Cla", model.AssemblyGroups); var frame = new DispatcherFrame(); TypeNode selectedNode = null; action.Completed += (s, a) => { selectedNode = a.Result; frame.Continue = false; }; action.Run(); Dispatcher.PushFrame(frame); TreeAssert.IsMatch(match, model.AssemblyGroups[0]); Assert.IsNull(selectedNode); }
public void StringWithDots_DoesMatchNamespaceAndCollapsesNamespaceNodes() { // collapses everything var match = new { DisplayName = "test", Assemblies = new object[] { new { DisplayName = "TestAssembly1", Visibility = Visibility.Visible, IsExpanded = true, Namespaces = new object [] { new { DisplayName = "TestAssembly1.Namespace1", Visibility = Visibility.Visible, IsExpanded = false, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly1.Namespace1.Class1", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "Class2", FullName = "TestAssembly1.Namespace1.Class2", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "InternalClass1", FullName = "TestAssembly1.Namespace1.InternalClass1", Visibility = Visibility.Visible, IsExpanded = false }, } }, new { DisplayName = "TestAssembly1.Namespace2", Visibility = Visibility.Visible, IsExpanded = false, Types = new object[] { new { DisplayName = "AnotherInternalClass", FullName = "TestAssembly1.Namespace2.AnotherInternalClass", Visibility = Visibility.Visible, IsExpanded = false } } } } }, new { DisplayName = "TestAssembly2", Visibility = Visibility.Collapsed, IsExpanded = false, Namespaces = new object [] { new { DisplayName = "TestAssembly2", Visibility = Visibility.Collapsed, IsExpanded = false, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly2.Class1", Visibility = Visibility.Collapsed, IsExpanded = false }, new { DisplayName = "NamespaceClass", FullName = "TestAssembly2.NamespaceClass", Visibility = Visibility.Collapsed, IsExpanded = false } } }, new { DisplayName = "TestAssembly2.Namespace1", Visibility = Visibility.Collapsed, IsExpanded = false, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly2.Namespace1.Class1", Visibility = Visibility.Collapsed, IsExpanded = false }, new { DisplayName = "Class12", FullName = "TestAssembly2.Namespace1.Class12", Visibility = Visibility.Collapsed, IsExpanded = false } } } } } } }; var action = new SearchAction("TestAssembly1.", model.AssemblyGroups); var frame = new DispatcherFrame(); TypeNode selectedNode = null; action.Completed += (s, a) => { selectedNode = a.Result; frame.Continue = false; }; action.Run(); Dispatcher.PushFrame(frame); TreeAssert.IsMatch(match, model.AssemblyGroups[0]); Assert.IsNull(selectedNode); }
public void FirstFullNameMatch_IsSelected() { var match = new { DisplayName = "test", Assemblies = new object[] { new { DisplayName = "TestAssembly1", Visibility = Visibility.Collapsed, IsExpanded = false, }, new { DisplayName = "TestAssembly2", Visibility = Visibility.Visible, IsExpanded = true, Namespaces = new object [] { new { DisplayName = "TestAssembly2", Visibility = Visibility.Collapsed, IsExpanded = false, }, new { DisplayName = "TestAssembly2.Namespace1", Visibility = Visibility.Visible, IsExpanded = true, Types = new object[] { new { DisplayName = "Class1", FullName = "TestAssembly2.Namespace1.Class1", Visibility = Visibility.Visible, IsExpanded = false }, new { DisplayName = "Class12", FullName = "TestAssembly2.Namespace1.Class12", Visibility = Visibility.Visible, IsExpanded = false } } } } } } }; var action = new SearchAction("TestAssembly2.Namespace1.Class1", model.AssemblyGroups); var frame = new DispatcherFrame(); TypeNode selectedNode = null; action.Completed += (s, a) => { selectedNode = a.Result; frame.Continue = false; }; action.Run(); Dispatcher.PushFrame(frame); TreeAssert.IsMatch(match, model.AssemblyGroups[0]); Assert.IsNotNull(selectedNode); Assert.AreEqual("TestAssembly2.Namespace1.Class1", selectedNode.FullName); }