private void Search() { SearchTerm searchTerm = SearchControl.CreateSearchTerm(); if (searchTerm.IsEmpty) { return; } int instanceID = ++CurrentSearchID; MapTree tree = GetCurrentMapTree(); ScheduleParallelTask(() => { Action actClear = () => SearchControl.lstResults.Items.Clear(); SearchControl.Invoke(actClear); foreach (var n in GetNodesToSearch(tree, searchTerm.SearchSelectedHierarchy)) { if (instanceID != CurrentSearchID) { return; //this is to cancel the search if searchTerm has changed } if (searchTerm.MatchNode(n)) { Action actAdd = () => SearchControl.lstResults.Items.Add(n); SearchControl.Invoke(actAdd); } } }); }
public void TestMethod1() { SearchController sut = null; int eventNum = 1; Exception exception = null; Task task = Task.Run(() => { var t = new MapTree(); var r = new MapNode(t, "r"); var c1 = new MapNode(r, "c1"); var c11 = new MapNode(c1, "c11"); var c12 = new MapNode(c1, "c12"); var c121 = new MapNode(c12, "c121"); var c13 = new MapNode(c1, "c13"); var c131 = new MapNode(c13, "C131"); var c2 = new MapNode(r, "c2"); var c3 = new MapNode(r, "c3", NodePosition.Left); var c31 = new MapNode(c3, "c31"); var c32 = new MapNode(c3, "c32"); r.NoteText = "This is a note text."; c11.Icons.Add("button_ok"); c11.Icons.Add("desktop_new"); c3.Icons.Add("button_ok"); c131.Icons.Add("desktop_new"); var taskScheduler = new TaskScheduler.TaskScheduler(); taskScheduler.Start(); var control = new SearchControl(); sut = new SearchController(control, () => t, act => taskScheduler.AddTask(act, DateTime.Now)); var form = new Form(); form.Controls.Add(control); var timer = new System.Windows.Forms.Timer(); timer.Interval = 5; form.Shown += (o, e) => timer.Start(); var shown = new EventHandler((obj, evn) => ((Form)obj).DialogResult = DialogResult.OK); //for IconSelectorExt dialog timer.Tick += (o, e) => { try { switch (eventNum) { case 1: Assert.AreEqual(0, control.lstResults.Items.Count); break; case 2: control.txtSearch.Text = "c1"; break; case 3: while (taskScheduler.TaskCount != 0) { return; //return without moving to next eventNum } Assert.AreEqual(6, control.lstResults.Items.Count); break; case 4: control.txtSearch.Text = "c1"; control.txtSearch.Text = "c1"; control.txtSearch.Text = "c1"; control.txtSearch.Text = "c1"; control.txtSearch.Text = "c1"; break; case 5: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(6, control.lstResults.Items.Count); control.btnSelect.PerformClick(); Assert.AreEqual(6, t.SelectedNodes.Count); control.btnClear.PerformClick(); Assert.AreEqual(0, control.lstResults.Items.Count); break; case 6: control.txtSearch.Text = "rr"; break; case 7: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(0, control.lstResults.Items.Count); break; case 8: control.txtSearch.Text = "r"; control.btnSearch.PerformClick(); break; case 9: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(1, control.lstResults.Items.Count); break; case 10: Assert.IsFalse(r.Selected); control.lstResults.SelectedIndex = 0; Assert.IsTrue(r.Selected); break; case 11: control.ckbCase.Checked = true; control.txtSearch.Text = "R"; control.btnSearch.PerformClick(); break; case 12: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(0, control.lstResults.Items.Count); break; case 13: control.txtSearch.Text = "note text"; control.btnSearch.PerformClick(); break; case 14: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(1, control.lstResults.Items.Count); break; case 15: control.ckbExcludeNote.Checked = true; control.txtSearch.Text = "note text"; control.btnSearch.PerformClick(); break; case 16: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(0, control.lstResults.Items.Count); break; case 17: control.ckbSelectedNode.Checked = true; c1.Selected = true; control.txtSearch.Text = "c3"; break; case 18: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(0, control.lstResults.Items.Count); break; case 19: control.ckbSelectedNode.Checked = true; c2.AddToSelection(); foreach (var n in c2.Descendents) { n.AddToSelection(); } control.txtSearch.Text = "c3"; break; case 20: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(0, control.lstResults.Items.Count); break; case 21: control.txtSearch.Text = ""; control.btnSearch.PerformClick(); break; case 22: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(0, control.lstResults.Items.Count); break; case 23: IconSelectorExt.Instance.Shown += shown; IconSelectorExt.Instance.SelectedIcon = "button_ok"; control.btnAddIcon.PerformClick(); Assert.AreEqual(1, control.CreateSearchTerm().Icons.Count); IconSelectorExt.Instance.SelectedIcon = "desktop_new"; control.btnAddIcon.PerformClick(); Assert.AreEqual(2, control.CreateSearchTerm().Icons.Count); control.ckbSelectedNode.Checked = false; control.btnSearch.PerformClick(); break; case 24: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(1, control.lstResults.Items.Count); break; case 25: control.ckbAnyIcon.Checked = true; control.btnSearch.PerformClick(); break; case 26: while (taskScheduler.TaskCount != 0) { return; } Assert.AreEqual(3, control.lstResults.Items.Count); IconSelectorExt.Instance.SelectedIcon = IconSelectorExt.REMOVE_ICON_NAME; control.btnAddIcon.PerformClick(); Assert.AreEqual(1, control.CreateSearchTerm().Icons.Count); IconSelectorExt.Instance.SelectedIcon = IconSelectorExt.REMOVE_ALL_ICON_NAME; control.btnAddIcon.PerformClick(); Assert.AreEqual(0, control.CreateSearchTerm().Icons.Count); IconSelectorExt.Instance.SelectedIcon = IconSelectorExt.REMOVE_ICON_NAME; control.btnAddIcon.PerformClick(); Assert.AreEqual(0, control.CreateSearchTerm().Icons.Count); IconSelectorExt.Instance.Shown -= shown; break; default: form.Close(); break; } eventNum++; } catch (Exception exp) { exception = exp; timer.Stop(); form.Close(); } }; form.ShowDialog(); timer.Stop(); taskScheduler.Stop(); }); task.Wait(); if (exception != null) { throw new Exception("Check Inner exception", exception); } }