From dd59d866558d7c0aadc5cf418f2cf1845fe62812 Mon Sep 17 00:00:00 2001
From: rowo360 <59574371+rowo360@users.noreply.github.com>
Date: Sun, 9 Feb 2025 08:03:11 +0100
Subject: [PATCH] Tree view sorting - simplify solution
---
.../Presenters/TreeViewNodeComparer.cs | 40 +---------
.../Presenters/TreeViewPresenter.cs | 10 +--
.../TestTree/TreeViewPresenterTests.cs | 16 ----
.../TestTree/WhenPresenterIsCreated.cs | 7 ++
.../Presenters/TreeViewNodeComparerTests.cs | 73 +++----------------
5 files changed, 26 insertions(+), 120 deletions(-)
diff --git a/src/TestCentric/testcentric.gui/Presenters/TreeViewNodeComparer.cs b/src/TestCentric/testcentric.gui/Presenters/TreeViewNodeComparer.cs
index d691f36c..da47c2ca 100644
--- a/src/TestCentric/testcentric.gui/Presenters/TreeViewNodeComparer.cs
+++ b/src/TestCentric/testcentric.gui/Presenters/TreeViewNodeComparer.cs
@@ -25,53 +25,19 @@ public class TreeViewNodeComparer
/// Get a IComparer implementation used to sort the tree nodes
/// The sortModes are used by the context menu items in their Tag property
///
- public static IComparer GetComparer(ITestModel model, string sortMode, string sortDirection, bool showNamespaces)
+ public static IComparer GetComparer(ITestModel model, string sortMode, string sortDirection)
{
bool ascending = sortDirection == Ascending;
- if (sortMode == Name && !showNamespaces)
- return new NameComparer(ascending);
if (sortMode == Duration)
return new DurationComparer(model, ascending);
- return new FullnameComparer(ascending);
- }
-
- ///
- /// The FullnameComparer uses the FullName of the TestNodes (Namespace + class + method name)
- /// It's indented to provide the same order as provided by NUnit
- ///
- private class FullnameComparer : IComparer
- {
- private bool _ascending;
-
- internal FullnameComparer(bool ascending)
- {
- _ascending = ascending;
- }
-
- public int Compare(object x, object y)
- {
- TreeNode node1 = x as TreeNode;
- TreeNode node2 = y as TreeNode;
-
- TestNode testNode1 = node1.Tag as TestNode;
- TestNode testNode2 = node2.Tag as TestNode;
-
- if (!_ascending)
- Swap(ref testNode1, ref testNode2);
-
- if (testNode1 == null || testNode2 == null)
- return 1;
-
- return testNode1.FullName.CompareTo(testNode2.FullName);
- }
+ return new NameComparer(ascending);
}
///
/// The NameComparer uses the Name of the TestNodes (either Namespace or class or method name)
- /// If Namespaces are shown in the tree, it will provide the same results as the FullnameComparer
- /// However if Namespaces are hidden, the NameComparer will sort the class names properly.
+ /// It's invoked by Windows Forms for all nodes of one hierarchy level to provide a proper ordering
///
private class NameComparer : IComparer
{
diff --git a/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs b/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs
index aef85ed8..044b34c7 100644
--- a/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs
+++ b/src/TestCentric/testcentric.gui/Presenters/TreeViewPresenter.cs
@@ -41,6 +41,7 @@ public TreeViewPresenter(ITestTreeView treeView, ITestModel model, ITreeDisplayS
_view.ShowCheckBoxes.Checked = _view.CheckBoxes = _treeSettings.ShowCheckBoxes;
_view.ShowTestDuration.Checked = _treeSettings.ShowTestDuration;
_view.AlternateImageSet = _treeSettings.AlternateImageSet;
+ UpdateTreeViewSortMode();
WireUpEvents();
}
@@ -133,7 +134,6 @@ private void WireUpEvents()
case "TestCentric.Gui.TestTree.TestList.GroupBy":
case "TestCentric.Gui.TestTree.FixtureList.GroupBy":
case "TestCentric.Gui.TestTree.ShowNamespace":
- SortTreeView();
Strategy?.Reload();
break;
case "TestCentric.Gui.TestTree.ShowCheckBoxes":
@@ -170,9 +170,9 @@ private void WireUpEvents()
Strategy?.UpdateTreeNodeNames();
};
- _view.SortCommand.SelectionChanged += () => SortTreeView();
+ _view.SortCommand.SelectionChanged += () => UpdateTreeViewSortMode();
- _view.SortDirectionCommand.SelectionChanged += () => SortTreeView();
+ _view.SortDirectionCommand.SelectionChanged += () => UpdateTreeViewSortMode();
_view.RunContextCommand.Execute += () =>
{
@@ -302,7 +302,7 @@ private void WireUpEvents()
//};
}
- private void SortTreeView()
+ private void UpdateTreeViewSortMode()
{
var sortMode = _view.SortCommand.SelectedItem;
@@ -310,7 +310,7 @@ private void SortTreeView()
if (sortMode == TreeViewNodeComparer.Duration)
_view.ShowTestDuration.Checked = true;
- IComparer comparer = TreeViewNodeComparer.GetComparer(_model, sortMode, _view.SortDirectionCommand.SelectedItem, _treeSettings.ShowNamespace);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(_model, sortMode, _view.SortDirectionCommand.SelectedItem);
_view.Sort(comparer);
}
diff --git a/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs b/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs
index b7685503..3f5b971b 100644
--- a/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs
+++ b/src/TestCentric/tests/Presenters/TestTree/TreeViewPresenterTests.cs
@@ -42,22 +42,6 @@ public void WhenSettingsAreChanged_ShowNamespace_StrategyIsReloaded(bool showNam
strategy.Received(2).Reload();
}
- [TestCase(true)]
- [TestCase(false)]
- public void WhenSettingsAreChanged_ShowNamespace_Tree_IsSorted(bool showNamespace)
- {
- // Arrange
- ITreeDisplayStrategy strategy = Substitute.For();
- _treeDisplayStrategyFactory.Create(null, null, null).ReturnsForAnyArgs(strategy);
- _model.Settings.Gui.TestTree.DisplayFormat = "NUNIT_TREE";
-
- // Act
- _model.Settings.Gui.TestTree.ShowNamespace = showNamespace;
-
- // Assert
- _view.ReceivedWithAnyArgs().Sort(null);
- }
-
[TestCase(true)]
[TestCase(false)]
public void WhenSettingsAreChanged_ShowFilter_FilterVisibilityIsCalled(bool show)
diff --git a/src/TestCentric/tests/Presenters/TestTree/WhenPresenterIsCreated.cs b/src/TestCentric/tests/Presenters/TestTree/WhenPresenterIsCreated.cs
index 7417a315..2e76c0d3 100644
--- a/src/TestCentric/tests/Presenters/TestTree/WhenPresenterIsCreated.cs
+++ b/src/TestCentric/tests/Presenters/TestTree/WhenPresenterIsCreated.cs
@@ -5,6 +5,7 @@
using NUnit.Framework;
using NSubstitute;
+using System.Collections;
namespace TestCentric.Gui.Presenters.TestTree
{
@@ -31,6 +32,12 @@ public void ShowTestDurationIsSet()
_view.ShowTestDuration.Received().Checked = showTestDuration;
}
+ [Test]
+ public void SortingMode_IsUpdated_ToDefaultSorter()
+ {
+ _view.Received().Sort(Arg.Is(c => c.GetType().Name == "NameComparer"));
+ }
+
//[Test]
//public void StrategyIsSet()
//{
diff --git a/src/TestCentric/tests/Presenters/TreeViewNodeComparerTests.cs b/src/TestCentric/tests/Presenters/TreeViewNodeComparerTests.cs
index 281ff390..99696521 100644
--- a/src/TestCentric/tests/Presenters/TreeViewNodeComparerTests.cs
+++ b/src/TestCentric/tests/Presenters/TreeViewNodeComparerTests.cs
@@ -14,19 +14,17 @@ namespace TestCentric.Gui.Presenters
[TestFixture]
public class TreeViewNodeComparerTests
{
- [TestCase(TreeViewNodeComparer.Name, TreeViewNodeComparer.Ascending, false, "NameComparer")]
- [TestCase(TreeViewNodeComparer.Name, TreeViewNodeComparer.Ascending, true, "FullnameComparer")]
- [TestCase(TreeViewNodeComparer.Name, TreeViewNodeComparer.Descending, false, "NameComparer")]
- [TestCase(TreeViewNodeComparer.Name, TreeViewNodeComparer.Descending, true, "FullnameComparer")]
- [TestCase(TreeViewNodeComparer.Duration, TreeViewNodeComparer.Ascending, false, "DurationComparer")]
- [TestCase(TreeViewNodeComparer.Duration, TreeViewNodeComparer.Descending, true, "DurationComparer")]
- public void GetComparer(string sortMode, string sortDirection, bool showNamespace, string expectedComparerName)
+ [TestCase(TreeViewNodeComparer.Name, TreeViewNodeComparer.Ascending, "NameComparer")]
+ [TestCase(TreeViewNodeComparer.Name, TreeViewNodeComparer.Descending, "NameComparer")]
+ [TestCase(TreeViewNodeComparer.Duration, TreeViewNodeComparer.Ascending, "DurationComparer")]
+ [TestCase(TreeViewNodeComparer.Duration, TreeViewNodeComparer.Descending, "DurationComparer")]
+ public void GetComparer(string sortMode, string sortDirection, string expectedComparerName)
{
// Arrange
ITestModel model = Substitute.For();
// Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, sortMode, sortDirection, showNamespace);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(model, sortMode, sortDirection);
// Assert
string classname = comparer.GetType().Name;
@@ -46,7 +44,7 @@ public void Namecompare_Ascending_ReturnsExpectedResult(string text1, string tex
// Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Name, TreeViewNodeComparer.Ascending, false);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Name, TreeViewNodeComparer.Ascending);
int result = comparer.Compare(treeNode1, treeNode2);
// Assert
@@ -66,56 +64,7 @@ public void Namecompare_Descending_ReturnsExpectedResult(string text1, string te
// Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Name, TreeViewNodeComparer.Descending, false);
- int result = comparer.Compare(treeNode1, treeNode2);
-
- // Assert
- Assert.That(result, Is.EqualTo(expectedCompareResult));
- }
-
- [TestCase("Namespace1.A", "Namespace1.B", -1)]
- [TestCase("Namespace1.B", "Namespace1.A", 1)]
- [TestCase("Namespace1.A", "Namespace1.A", 0)]
- [TestCase("Namespace1.A", "Namespace1.a", 1)]
- [TestCase("a", "b", -1)]
- [TestCase("aba", "aaa", 1)]
- [TestCase("", "", 0)]
- public void Fullnamecompare_Ascending_ReturnsExpectedResult(string text1, string text2, int expectedCompareResult)
- {
- // Arrange
- ITestModel model = Substitute.For();
- TestNode testNode1 = new TestNode($"");
- TestNode testNode2 = new TestNode($"");
-
- TreeNode treeNode1 = new TreeNode() { Tag = testNode1 };
- TreeNode treeNode2 = new TreeNode() { Tag = testNode2 };
-
- // Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Name, TreeViewNodeComparer.Ascending, true);
- int result = comparer.Compare(treeNode1, treeNode2);
-
- // Assert
- Assert.That(result, Is.EqualTo(expectedCompareResult));
- }
-
- [TestCase("Namespace1.A", "Namespace1.B", 1)]
- [TestCase("Namespace1.B", "Namespace1.A", -1)]
- [TestCase("Namespace1.A", "Namespace1.A", 0)]
- [TestCase("Namespace1.A", "Namespace1.a", -1)]
- [TestCase("", "", 0)]
- public void Fullnamecompare_Descending_ReturnsExpectedResult(string text1, string text2, int expectedCompareResult)
- {
- // Arrange
- ITestModel model = Substitute.For();
-
- TestNode testNode1 = new TestNode($"");
- TestNode testNode2 = new TestNode($"");
-
- TreeNode treeNode1 = new TreeNode() { Tag = testNode1 };
- TreeNode treeNode2 = new TreeNode() { Tag = testNode2 };
-
- // Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Name, TreeViewNodeComparer.Descending, true);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Name, TreeViewNodeComparer.Descending);
int result = comparer.Compare(treeNode1, treeNode2);
// Assert
@@ -142,7 +91,7 @@ public void Durationcompare_Ascending_ReturnsExpectedResult(string duration1, st
TreeNode treeNode2 = new TreeNode() { Tag = testNode2 };
// Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Duration, TreeViewNodeComparer.Ascending, true);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Duration, TreeViewNodeComparer.Ascending);
int result = comparer.Compare(treeNode1, treeNode2);
// Assert
@@ -169,7 +118,7 @@ public void Durationcompare_Descending_ReturnsExpectedResult(string duration1, s
TreeNode treeNode2 = new TreeNode() { Tag = testNode2 };
// Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Duration, TreeViewNodeComparer.Descending, true);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Duration, TreeViewNodeComparer.Descending);
int result = comparer.Compare(treeNode1, treeNode2);
// Assert
@@ -192,7 +141,7 @@ public void Durationcompare_NoTestResultAvailable_ReturnsExpectedResult(string t
TreeNode treeNode2 = new TreeNode(text2) { Tag = testNode2 };
// Act
- IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Duration, sortDirection, true);
+ IComparer comparer = TreeViewNodeComparer.GetComparer(model, TreeViewNodeComparer.Duration, sortDirection);
int result = comparer.Compare(treeNode1, treeNode2);
// Assert