Skip to content

Commit 13de478

Browse files
committed
Add toolbar button to reset test filters
1 parent 06b5b40 commit 13de478

File tree

16 files changed

+148
-12
lines changed

16 files changed

+148
-12
lines changed

src/TestCentric/testcentric.gui/Dialogs/CategoryFilterDialog.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ internal void Init(IEnumerable<string> allCategories, IEnumerable<string> select
6464
checkedListBoxCategory.ResumeLayout();
6565
}
6666

67+
internal void UpdateCheckedItems(IEnumerable<string> selectedCategories)
68+
{
69+
checkedListBoxCategory.SuspendLayout();
70+
for (int i = 0; i < checkedListBoxCategory.Items.Count; i++)
71+
{
72+
string category = checkedListBoxCategory.Items[i].ToString();
73+
bool isChecked = selectedCategories.Contains(category);
74+
checkedListBoxCategory.SetItemChecked(i, isChecked);
75+
}
76+
checkedListBoxCategory.ResumeLayout();
77+
}
78+
6779
private void OnApplyAndCloseButtonClicked(object sender, EventArgs e)
6880
{
6981
ApplyButtonClicked?.Invoke(SelectedCategories);

src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripCategoryFilterButton.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public IEnumerable<string> SelectedItems
4444
{
4545
_selectedItems = value;
4646
UpdateFont();
47+
48+
// If dialog is currently displayed => updated checked items
49+
if (_dialog != null)
50+
_dialog.UpdateCheckedItems(_selectedItems);
4751
}
4852
}
4953

@@ -79,7 +83,8 @@ protected void OnButtonClicked(object sender, EventArgs e)
7983

8084
_dialog.ApplyButtonClicked += (selectedItems) =>
8185
{
82-
SelectedItems = selectedItems;
86+
_selectedItems = selectedItems;
87+
UpdateFont();
8388
SelectionChanged?.Invoke();
8489
};
8590

@@ -103,7 +108,7 @@ private void SetDialogSizeAndPosition()
103108
{
104109
// Restore previous position and size of dialog
105110
_dialog.Size = _dialogSize;
106-
_dialogLocation = _dialog.Location;
111+
_dialog.Location = _dialogLocation;
107112
}
108113
else
109114
{

src/TestCentric/testcentric.gui/Elements/ToolStripElements/ToolStripTextBoxElement.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public ToolStripTextBoxElement(ToolStripTextBox textBox, string placeHolderText)
2525
{
2626
TextBox = textBox;
2727
PlaceHolderText = placeHolderText;
28-
TextBox.TextChanged += OnTextChanged;
28+
TextBox.KeyUp += OnKeyUp;
2929

3030
TextBox.LostFocus += OnTextBoxLostFocus;
3131
TextBox.GotFocus += OnTextBoxGotFocus;
@@ -63,7 +63,11 @@ private void OnTextBoxLostFocus(object sender, EventArgs e)
6363
}
6464
}
6565

66-
private void OnTextChanged(object sender, EventArgs e)
66+
/// <summary>
67+
/// Use KeyUp event instead of TextChanged event
68+
/// If the Text property is set from client programmatically, a TextChanged event would be triggered => that's not intended
69+
/// </summary>
70+
private void OnKeyUp(object sender, KeyEventArgs e)
6771
{
6872
if (IsPlaceHolderTextShown)
6973
return;
Loading

src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ private void WireUpEvents()
7272
_model.Events.TestReloaded += (ea) =>
7373
{
7474
EnsureNonRunnableFilesAreVisible(ea.Test);
75+
ResetTestFilterUIElements();
7576

7677
Strategy.OnTestLoaded(ea.Test, null);
7778
_view.CheckBoxes = _view.ShowCheckBoxes.Checked; // TODO: View should handle this
@@ -81,6 +82,7 @@ private void WireUpEvents()
8182
{
8283
Strategy.OnTestUnloaded();
8384
_view.CategoryFilter.Close();
85+
ResetTestFilterUIElements();
8486
};
8587

8688
_model.Events.TestsUnloading += ea =>
@@ -272,6 +274,8 @@ private void WireUpEvents()
272274
_model.TestCentricTestFilter.CategoryFilter = _view.CategoryFilter.SelectedItems;
273275
};
274276

277+
_view.ResetFilterCommand.Execute += () => ResetTestFilter();
278+
275279
// Node selected in tree
276280
//_treeView.SelectedNodesChanged += (nodes) =>
277281
//{
@@ -302,6 +306,18 @@ private void WireUpEvents()
302306
//};
303307
}
304308

309+
private void ResetTestFilter()
310+
{
311+
_model.TestCentricTestFilter.ResetAll();
312+
ResetTestFilterUIElements();
313+
}
314+
315+
private void ResetTestFilterUIElements()
316+
{
317+
_view.TextFilter.Text = "";
318+
_view.OutcomeFilter.SelectedItems = _model.TestCentricTestFilter.OutcomeFilter;
319+
_view.CategoryFilter.SelectedItems = _model.TestCentricTestFilter.CategoryFilter;
320+
}
305321
private void UpdateTreeViewSortMode()
306322
{
307323
var sortMode = _view.SortCommand.SelectedItem;

src/TestCentric/testcentric.gui/Views/ITestTreeView.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ public interface ITestTreeView : IView
6161

6262
ICategoryFilterSelection CategoryFilter { get; }
6363

64+
ICommand ResetFilterCommand { get; }
65+
6466
void SetTestFilterVisibility(bool visible);
6567

6668
void EnableTestFilter(bool enable);

src/TestCentric/testcentric.gui/Views/TestTreeView.Designer.cs

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/TestCentric/testcentric.gui/Views/TestTreeView.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public TestTreeView()
5454
OutcomeFilter = new MultiCheckedToolStripButtonGroup(new[] { filterOutcomePassedButton, filterOutcomeFailedButton, filterOutcomeWarningButton, filterOutcomeNotRunButton });
5555
TextFilter = new ToolStripTextBoxElement(filterTextBox, "Filter...");
5656
CategoryFilter = new ToolStripCategoryFilterButton(filterByCategory);
57+
ResetFilterCommand = new ToolStripButtonElement(filterResetButton);
5758
TreeView = treeView;
5859

5960
// NOTE: We use MouseDown here rather than MouseUp because
@@ -135,6 +136,7 @@ public bool CheckBoxes
135136

136137
public IMultiSelection OutcomeFilter { get; private set; }
137138
public ICategoryFilterSelection CategoryFilter { get; private set; }
139+
public ICommand ResetFilterCommand { get; private set; }
138140

139141
public IChanged TextFilter { get; private set; }
140142

src/TestCentric/testcentric.gui/Views/TestTreeView.resx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@
117117
<resheader name="writer">
118118
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120+
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
121+
<data name="ResetFilter.Image" type="System.Resources.ResXFileRef, System.Windows.Forms">
122+
<value>..\Images\ResetFilter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
123+
</data>
120124
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
121125
<data name="testTreeContextMenu.TrayLocation" type="System.Drawing.Point, System.Drawing">
122126
<value>186, 16</value>

src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,34 @@ public void SortChanged_ToDuration_ShowDuration_IsSet()
314314
_view.ShowTestDuration.Received().Checked = true;
315315
}
316316

317+
[Test]
318+
public void ResetFilterCommand_TestCentricTestFilter_AreReset()
319+
{
320+
// 1. Arrange
321+
_view.SortCommand.SelectedItem.Returns(TreeViewNodeComparer.Duration);
322+
323+
// 2. Act
324+
_view.ResetFilterCommand.Execute += Raise.Event<CommandHandler>();
325+
326+
// 3. Assert
327+
_model.TestCentricTestFilter.Received().ResetAll();
328+
}
329+
330+
[Test]
331+
public void ResetFilterCommand_Filter_UIElements_AreReset()
332+
{
333+
// 1. Arrange
334+
_view.SortCommand.SelectedItem.Returns(TreeViewNodeComparer.Duration);
335+
336+
// 2. Act
337+
_view.ResetFilterCommand.Execute += Raise.Event<CommandHandler>();
338+
339+
// 3. Assert
340+
_view.TextFilter.Received().Text = "";
341+
_view.OutcomeFilter.ReceivedWithAnyArgs().SelectedItems = null;
342+
_view.CategoryFilter.ReceivedWithAnyArgs().SelectedItems = null;
343+
}
344+
317345
// TODO: Version 1 Test - Make it work if needed.
318346
//[Test]
319347
//public void WhenContextNodeIsNotNull_RunCommandExecutesThatTest()

0 commit comments

Comments
 (0)