From 13de4780c6cf214ed2b0c21200ac27f5536d58bb Mon Sep 17 00:00:00 2001 From: rowo360 <59574371+rowo360@users.noreply.github.com> Date: Sun, 9 Feb 2025 14:54:09 +0100 Subject: [PATCH] Add toolbar button to reset test filters --- .../Dialogs/CategoryFilterDialog.cs | 12 ++++++++ .../ToolStripCategoryFilterButton.cs | 9 ++++-- .../ToolStripTextBoxElement.cs | 8 +++-- .../testcentric.gui/Images/ResetFilter.png | Bin 0 -> 3165 bytes .../Presenters/TreeViewPresenter.cs | 16 ++++++++++ .../testcentric.gui/Views/ITestTreeView.cs | 2 ++ .../Views/TestTreeView.Designer.cs | 11 +++++++ .../testcentric.gui/Views/TestTreeView.cs | 2 ++ .../testcentric.gui/Views/TestTreeView.resx | 4 +++ .../TestTree/TreeViewPresenterTests.cs | 28 ++++++++++++++++++ .../TestTree/WhenTestsAreReloaded.cs | 16 ++++++++-- .../TestTree/WhenTestsAreUnloaded.cs | 12 ++++++++ .../model/Filter/ITestCentricTestFilter.cs | 2 +- .../model/Filter/TestCentricTestFilter.cs | 9 ++++-- src/TestModel/model/TestModel.cs | 3 ++ .../Filter/TestCentricTestFilterTests.cs | 26 ++++++++++++++-- 16 files changed, 148 insertions(+), 12 deletions(-) create mode 100644 src/TestCentric/testcentric.gui/Images/ResetFilter.png diff --git a/src/TestCentric/testcentric.gui/Dialogs/CategoryFilterDialog.cs b/src/TestCentric/testcentric.gui/Dialogs/CategoryFilterDialog.cs index 49c81ffd..da5e0f27 100644 --- a/src/TestCentric/testcentric.gui/Dialogs/CategoryFilterDialog.cs +++ b/src/TestCentric/testcentric.gui/Dialogs/CategoryFilterDialog.cs @@ -64,6 +64,18 @@ internal void Init(IEnumerable allCategories, IEnumerable select checkedListBoxCategory.ResumeLayout(); } + internal void UpdateCheckedItems(IEnumerable selectedCategories) + { + checkedListBoxCategory.SuspendLayout(); + for (int i = 0; i < checkedListBoxCategory.Items.Count; i++) + { + string category = checkedListBoxCategory.Items[i].ToString(); + bool isChecked = selectedCategories.Contains(category); + checkedListBoxCategory.SetItemChecked(i, isChecked); + } + checkedListBoxCategory.ResumeLayout(); + } + private void OnApplyAndCloseButtonClicked(object sender, EventArgs e) { ApplyButtonClicked?.Invoke(SelectedCategories); diff --git a/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripCategoryFilterButton.cs b/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripCategoryFilterButton.cs index 49aaf385..250812d3 100644 --- a/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripCategoryFilterButton.cs +++ b/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripCategoryFilterButton.cs @@ -44,6 +44,10 @@ public IEnumerable SelectedItems { _selectedItems = value; UpdateFont(); + + // If dialog is currently displayed => updated checked items + if (_dialog != null) + _dialog.UpdateCheckedItems(_selectedItems); } } @@ -79,7 +83,8 @@ protected void OnButtonClicked(object sender, EventArgs e) _dialog.ApplyButtonClicked += (selectedItems) => { - SelectedItems = selectedItems; + _selectedItems = selectedItems; + UpdateFont(); SelectionChanged?.Invoke(); }; @@ -103,7 +108,7 @@ private void SetDialogSizeAndPosition() { // Restore previous position and size of dialog _dialog.Size = _dialogSize; - _dialogLocation = _dialog.Location; + _dialog.Location = _dialogLocation; } else { diff --git a/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripTextBoxElement.cs b/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripTextBoxElement.cs index 787c2d27..40cd18ee 100644 --- a/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripTextBoxElement.cs +++ b/src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripTextBoxElement.cs @@ -25,7 +25,7 @@ public ToolStripTextBoxElement(ToolStripTextBox textBox, string placeHolderText) { TextBox = textBox; PlaceHolderText = placeHolderText; - TextBox.TextChanged += OnTextChanged; + TextBox.KeyUp += OnKeyUp; TextBox.LostFocus += OnTextBoxLostFocus; TextBox.GotFocus += OnTextBoxGotFocus; @@ -63,7 +63,11 @@ private void OnTextBoxLostFocus(object sender, EventArgs e) } } - private void OnTextChanged(object sender, EventArgs e) + /// + /// Use KeyUp event instead of TextChanged event + /// If the Text property is set from client programmatically, a TextChanged event would be triggered => that's not intended + /// + private void OnKeyUp(object sender, KeyEventArgs e) { if (IsPlaceHolderTextShown) return; diff --git a/src/TestCentric/testcentric.gui/Images/ResetFilter.png b/src/TestCentric/testcentric.gui/Images/ResetFilter.png new file mode 100644 index 0000000000000000000000000000000000000000..8b3bf6140cd2a614176626c05f671416b2acc482 GIT binary patch literal 3165 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 literal 0 HcmV?d00001 diff --git a/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs b/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs index 044b34c7..76610d84 100644 --- a/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs +++ b/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs @@ -72,6 +72,7 @@ private void WireUpEvents() _model.Events.TestReloaded += (ea) => { EnsureNonRunnableFilesAreVisible(ea.Test); + ResetTestFilterUIElements(); Strategy.OnTestLoaded(ea.Test, null); _view.CheckBoxes = _view.ShowCheckBoxes.Checked; // TODO: View should handle this @@ -81,6 +82,7 @@ private void WireUpEvents() { Strategy.OnTestUnloaded(); _view.CategoryFilter.Close(); + ResetTestFilterUIElements(); }; _model.Events.TestsUnloading += ea => @@ -272,6 +274,8 @@ private void WireUpEvents() _model.TestCentricTestFilter.CategoryFilter = _view.CategoryFilter.SelectedItems; }; + _view.ResetFilterCommand.Execute += () => ResetTestFilter(); + // Node selected in tree //_treeView.SelectedNodesChanged += (nodes) => //{ @@ -302,6 +306,18 @@ private void WireUpEvents() //}; } + private void ResetTestFilter() + { + _model.TestCentricTestFilter.ResetAll(); + ResetTestFilterUIElements(); + } + + private void ResetTestFilterUIElements() + { + _view.TextFilter.Text = ""; + _view.OutcomeFilter.SelectedItems = _model.TestCentricTestFilter.OutcomeFilter; + _view.CategoryFilter.SelectedItems = _model.TestCentricTestFilter.CategoryFilter; + } private void UpdateTreeViewSortMode() { var sortMode = _view.SortCommand.SelectedItem; diff --git a/src/TestCentric/testcentric.gui/Views/ITestTreeView.cs b/src/TestCentric/testcentric.gui/Views/ITestTreeView.cs index 6fe29fbf..e80988da 100644 --- a/src/TestCentric/testcentric.gui/Views/ITestTreeView.cs +++ b/src/TestCentric/testcentric.gui/Views/ITestTreeView.cs @@ -61,6 +61,8 @@ public interface ITestTreeView : IView ICategoryFilterSelection CategoryFilter { get; } + ICommand ResetFilterCommand { get; } + void SetTestFilterVisibility(bool visible); void EnableTestFilter(bool enable); diff --git a/src/TestCentric/testcentric.gui/Views/TestTreeView.Designer.cs b/src/TestCentric/testcentric.gui/Views/TestTreeView.Designer.cs index 86f824e8..c9a0894b 100644 --- a/src/TestCentric/testcentric.gui/Views/TestTreeView.Designer.cs +++ b/src/TestCentric/testcentric.gui/Views/TestTreeView.Designer.cs @@ -43,6 +43,7 @@ private void InitializeComponent() this.filterTextBox = new StretchToolStripTextBox(); this.filterSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.filterByCategory = new System.Windows.Forms.ToolStripDropDownButton(); + this.filterResetButton = new System.Windows.Forms.ToolStripButton(); this.testTreeContextMenu = new System.Windows.Forms.ContextMenuStrip(this.components); this.runMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.debugMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -134,6 +135,14 @@ private void InitializeComponent() this.filterByCategory.Text = "Filter by category"; this.filterByCategory.ToolTipText = "Filter tests by category"; // + // filterResetButton + // + this.filterResetButton.Name = "filterResetButton"; + this.filterResetButton.Image = ((System.Drawing.Image)(resources.GetObject("ResetFilter.Image"))); + this.filterResetButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.filterResetButton.Size = new System.Drawing.Size(70, 29); + this.filterResetButton.ToolTipText = "Reset all filters"; + // // filterToolStrip // this.filterToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -144,6 +153,7 @@ private void InitializeComponent() this.filterOutcomeNotRunButton, this.filterSeparator1, this.filterByCategory, + this.filterResetButton, }); this.filterToolStrip.Location = new System.Drawing.Point(0, 0); this.filterToolStrip.Name = "filterToolStrip"; @@ -345,6 +355,7 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripButton filterOutcomeNotRunButton; private System.Windows.Forms.ToolStripSeparator filterSeparator1; private System.Windows.Forms.ToolStripDropDownButton filterByCategory; + private System.Windows.Forms.ToolStripButton filterResetButton; private System.Windows.Forms.ToolStrip filterTextToolStrip; private System.Windows.Forms.ToolStripTextBox filterTextBox; private System.Windows.Forms.ToolStripMenuItem runMenuItem; diff --git a/src/TestCentric/testcentric.gui/Views/TestTreeView.cs b/src/TestCentric/testcentric.gui/Views/TestTreeView.cs index b3748d3c..4811472a 100644 --- a/src/TestCentric/testcentric.gui/Views/TestTreeView.cs +++ b/src/TestCentric/testcentric.gui/Views/TestTreeView.cs @@ -54,6 +54,7 @@ public TestTreeView() OutcomeFilter = new MultiCheckedToolStripButtonGroup(new[] { filterOutcomePassedButton, filterOutcomeFailedButton, filterOutcomeWarningButton, filterOutcomeNotRunButton }); TextFilter = new ToolStripTextBoxElement(filterTextBox, "Filter..."); CategoryFilter = new ToolStripCategoryFilterButton(filterByCategory); + ResetFilterCommand = new ToolStripButtonElement(filterResetButton); TreeView = treeView; // NOTE: We use MouseDown here rather than MouseUp because @@ -135,6 +136,7 @@ public bool CheckBoxes public IMultiSelection OutcomeFilter { get; private set; } public ICategoryFilterSelection CategoryFilter { get; private set; } + public ICommand ResetFilterCommand { get; private set; } public IChanged TextFilter { get; private set; } diff --git a/src/TestCentric/testcentric.gui/Views/TestTreeView.resx b/src/TestCentric/testcentric.gui/Views/TestTreeView.resx index 615f9f90..97b350a9 100644 --- a/src/TestCentric/testcentric.gui/Views/TestTreeView.resx +++ b/src/TestCentric/testcentric.gui/Views/TestTreeView.resx @@ -117,6 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Images\ResetFilter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + 186, 16 diff --git a/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs b/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs index 3f5b971b..a85995b6 100644 --- a/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs +++ b/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs @@ -314,6 +314,34 @@ public void SortChanged_ToDuration_ShowDuration_IsSet() _view.ShowTestDuration.Received().Checked = true; } + [Test] + public void ResetFilterCommand_TestCentricTestFilter_AreReset() + { + // 1. Arrange + _view.SortCommand.SelectedItem.Returns(TreeViewNodeComparer.Duration); + + // 2. Act + _view.ResetFilterCommand.Execute += Raise.Event(); + + // 3. Assert + _model.TestCentricTestFilter.Received().ResetAll(); + } + + [Test] + public void ResetFilterCommand_Filter_UIElements_AreReset() + { + // 1. Arrange + _view.SortCommand.SelectedItem.Returns(TreeViewNodeComparer.Duration); + + // 2. Act + _view.ResetFilterCommand.Execute += Raise.Event(); + + // 3. Assert + _view.TextFilter.Received().Text = ""; + _view.OutcomeFilter.ReceivedWithAnyArgs().SelectedItems = null; + _view.CategoryFilter.ReceivedWithAnyArgs().SelectedItems = null; + } + // TODO: Version 1 Test - Make it work if needed. //[Test] //public void WhenContextNodeIsNotNull_RunCommandExecutesThatTest() diff --git a/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreReloaded.cs b/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreReloaded.cs index 5e4a2feb..2a616535 100644 --- a/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreReloaded.cs +++ b/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreReloaded.cs @@ -13,18 +13,30 @@ namespace TestCentric.Gui.Presenters.TestTree public class WhenTestsAreReloaded : TreeViewPresenterTestBase { [SetUp] - public void SimulateTestReload() + public void Setup() { ClearAllReceivedCalls(); _model.HasTests.Returns(true); _model.IsTestRunning.Returns(false); + } + [Test] + public void TestFilters_IsReset() + { + // Arrange + var project = new TestCentricProject(_model, "dummy.dll"); TestNode testNode = new TestNode(""); _model.LoadedTests.Returns(testNode); - _model.TestCentricProject.Returns(new TestCentricProject(_model, "dummy.dll")); + _model.TestCentricProject.Returns(project); + // Act FireTestReloadedEvent(testNode); + + // Assert + _view.TextFilter.Received().Text = ""; + _view.OutcomeFilter.ReceivedWithAnyArgs().SelectedItems = null; + _view.CategoryFilter.ReceivedWithAnyArgs().SelectedItems = null; } #if NYI // Add after implementation of project or package saving diff --git a/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreUnloaded.cs b/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreUnloaded.cs index aeedd62b..609b24ca 100644 --- a/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreUnloaded.cs +++ b/src/TestCentric/tests/Presenters/TestTree/WhenTestsAreUnloaded.cs @@ -33,6 +33,18 @@ public void TestUnloaded_CategoryFilter_IsClosed() _view.CategoryFilter.Received().Close(); } + [Test] + public void TestUnloaded_TestFilters_AreReset() + { + // Act: unload tests + FireTestUnloadedEvent(); + + // Assert + _view.TextFilter.Received().Text = ""; + _view.OutcomeFilter.ReceivedWithAnyArgs().SelectedItems = null; + _view.CategoryFilter.ReceivedWithAnyArgs().SelectedItems = null; + } + #if NYI // Add after implementation of project or package saving [TestCase("NewProjectCommand", true)] [TestCase("OpenProjectCommand", true)] diff --git a/src/TestModel/model/Filter/ITestCentricTestFilter.cs b/src/TestModel/model/Filter/ITestCentricTestFilter.cs index 370b19b9..8ed8933b 100644 --- a/src/TestModel/model/Filter/ITestCentricTestFilter.cs +++ b/src/TestModel/model/Filter/ITestCentricTestFilter.cs @@ -40,7 +40,7 @@ public interface ITestCentricTestFilter /// /// Clear all actives filters and reset them to default /// - void ClearAllFilters(); + void ResetAll(bool suppressFilterChangedEvent = false); /// /// Init filter after a project is loaded diff --git a/src/TestModel/model/Filter/TestCentricTestFilter.cs b/src/TestModel/model/Filter/TestCentricTestFilter.cs index 648344d9..76cb51f7 100644 --- a/src/TestModel/model/Filter/TestCentricTestFilter.cs +++ b/src/TestModel/model/Filter/TestCentricTestFilter.cs @@ -57,15 +57,18 @@ public IEnumerable AllCategories public bool IsActive => _filters.Any(x => x.IsActive); - public void ClearAllFilters() + public void ResetAll(bool suppressFilterChangedEvent = false) { foreach (ITestFilter filter in _filters) { filter.Reset(); } - FilterNodes(TestModel.LoadedTests); - FireFilterChangedEvent(); + if (!suppressFilterChangedEvent) + { + FilterNodes(TestModel.LoadedTests); + FireFilterChangedEvent(); + } } public void Init() diff --git a/src/TestModel/model/TestModel.cs b/src/TestModel/model/TestModel.cs index 5c024bf5..67533e39 100644 --- a/src/TestModel/model/TestModel.cs +++ b/src/TestModel/model/TestModel.cs @@ -410,6 +410,8 @@ public void UnloadTests() UnloadTestsIgnoringErrors(); Runner.Dispose(); + + TestCentricTestFilter.ResetAll(true); LoadedTests = null; AvailableCategories = null; ClearResults(); @@ -448,6 +450,7 @@ public void ReloadTests() // Discover tests LoadedTests = new TestNode(Runner.Explore(Engine.TestFilter.Empty)); AvailableCategories = GetAvailableCategories(); + TestCentricTestFilter.ResetAll(true); ClearResults(); #endif diff --git a/src/TestModel/tests/Filter/TestCentricTestFilterTests.cs b/src/TestModel/tests/Filter/TestCentricTestFilterTests.cs index fbdd526c..096787e6 100644 --- a/src/TestModel/tests/Filter/TestCentricTestFilterTests.cs +++ b/src/TestModel/tests/Filter/TestCentricTestFilterTests.cs @@ -108,7 +108,7 @@ public void AllCategories_CategoriesDefinedInModel_ReturnsModelAndDefaultCategor } [Test] - public void ClearFilter_AllFiltersAreReset() + public void ResetFilter_AllFiltersAreReset() { // Arrange var testNode = new TestNode($""); @@ -122,7 +122,7 @@ public void ClearFilter_AllFiltersAreReset() testFilter.OutcomeFilter = new List() { "Passed" }; // Act - testFilter.ClearAllFilters(); + testFilter.ResetAll(); // Assert var allCategories = testFilter.AllCategories; @@ -136,6 +136,28 @@ public void ClearFilter_AllFiltersAreReset() Assert.That(testFilter.TextFilter, Is.Empty); } + [Test] + public void ResetFilter_InvokeFilterChangedEvent() + { + // Arrange + var testNode = new TestNode($""); + _model.LoadedTests.Returns(testNode); + _model.AvailableCategories.Returns(new List() { "Feature_1" }); + + bool isInvoked = false; + TestCentricTestFilter testFilter = new TestCentricTestFilter(_model, () => isInvoked = true); + testFilter.Init(); + testFilter.TextFilter = "TestA"; + testFilter.CategoryFilter = new List() { "Feature_1" }; + testFilter.OutcomeFilter = new List() { "Passed" }; + + // Act + testFilter.ResetAll(); + + // Assert + Assert.That(isInvoked, Is.True); + } + private static object[] FilterByOutcomeTestCases = { new object[] { new List() { "Passed" }, new List() { "3-1000", "3-1001", "3-1010", "3-1011", "3-1012", "3-1020", "3-1022" } },