Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 4a8171d

Browse files
Adding an additional test and catching some bugs
1 parent 74018e1 commit 4a8171d

File tree

2 files changed

+119
-7
lines changed

2 files changed

+119
-7
lines changed

src/GitHub.Api/UI/TreeBase.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ protected void ToggleNodeChecked(int idx, TNode node)
261261
ToggleChildrenChecked(idx, node, isChecked);
262262
}
263263

264-
ToggleParentFolderAndContainersChecked(idx, node, isChecked);
264+
ToggleParentFolderAndContainersChecked(idx, node, checkState);
265265
}
266266

267267
private void ToggleChildrenChecked(int idx, TNode node, bool isChecked)
@@ -270,8 +270,7 @@ private void ToggleChildrenChecked(int idx, TNode node, bool isChecked)
270270
{
271271
var childNode = Nodes[i];
272272

273-
var wasChecked = childNode.CheckState == CheckState.Checked;
274-
SetCheckStateOnNode(node, isChecked);
273+
SetCheckStateOnNode(childNode, isChecked);
275274

276275
if (childNode.IsFolderOrContainer)
277276
{
@@ -327,8 +326,9 @@ private void SetCheckStateOnNode(TNode node, CheckState setCheckState)
327326
}
328327
}
329328

330-
private void ToggleParentFolderAndContainersChecked(int idx, TNode node, bool isChecked)
329+
private void ToggleParentFolderAndContainersChecked(int idx, TNode node, CheckState checkState)
331330
{
331+
var isChecked = checkState != CheckState.Empty;
332332
while (true)
333333
{
334334
if (node.Level > 0)
@@ -381,9 +381,7 @@ private void ToggleParentFolderAndContainersChecked(int idx, TNode node, bool is
381381

382382
var parentNodeState =
383383
siblingsInSameState
384-
? isChecked
385-
? CheckState.Checked
386-
: CheckState.Empty
384+
? node.CheckState
387385
: CheckState.Mixed;
388386

389387
SetCheckStateOnNode(parentNode, parentNodeState);

src/tests/UnitTests/UI/TreeBaseTests.cs

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,120 @@ public void ShouldCheckParentOfMetaFile()
679679
testTreeListener.Received(2).AddCheckedNode(Arg.Any<TestTreeNode>());
680680
}
681681

682+
[Test]
683+
public void ShouldRippleUncheckCorrectly()
684+
{
685+
var testTree = new TestTree(true);
686+
var testTreeListener = testTree.TestTreeListener;
687+
688+
testTreeListener.GetCollapsedFolders().Returns(new string[0]);
689+
testTreeListener.SelectedNode.Returns((TestTreeNode)null);
690+
testTreeListener.GetCheckedFiles().Returns(new string[0]);
691+
testTreeListener.Nodes.Returns(new List<TestTreeNode>());
692+
testTreeListener.PathSeparator.Returns(@"\");
693+
testTreeListener.DisplayRootNode.Returns(true);
694+
testTreeListener.IsSelectable.Returns(false);
695+
testTreeListener.Title.Returns("Test Tree");
696+
testTreeListener.PromoteMetaFiles.Returns(true);
697+
698+
var testTreeData = new[] {
699+
new TestTreeData {
700+
Path = "Root\\Parent\\A.txt"
701+
},
702+
new TestTreeData {
703+
Path = "Root\\Parent\\B.txt"
704+
},
705+
new TestTreeData {
706+
Path = "Root\\Parent\\C.txt"
707+
}
708+
};
709+
710+
testTree.Load(testTreeData);
711+
712+
testTree.CreatedTreeNodes.ShouldAllBeEquivalentTo(new[] {
713+
new TestTreeNode {
714+
Path = "Test Tree",
715+
Label = "Test Tree",
716+
IsFolder = true
717+
},
718+
new TestTreeNode {
719+
Path = "Root",
720+
Label = "Root",
721+
Level = 1,
722+
IsFolder = true
723+
},
724+
new TestTreeNode {
725+
Path = "Root\\Parent",
726+
Label = "Parent",
727+
Level = 2,
728+
IsFolder = true
729+
},
730+
new TestTreeNode {
731+
Path = "Root\\Parent\\A.txt",
732+
Label = "A.txt",
733+
Level = 3,
734+
TreeData = testTreeData[0],
735+
},
736+
new TestTreeNode {
737+
Path = "Root\\Parent\\B.txt",
738+
Label = "B.txt",
739+
Level = 3,
740+
TreeData = testTreeData[1],
741+
},
742+
new TestTreeNode {
743+
Path = "Root\\Parent\\C.txt",
744+
Label = "C.txt",
745+
Level = 3,
746+
TreeData = testTreeData[2],
747+
}
748+
});
749+
750+
var rootNode = testTree.CreatedTreeNodes[1];
751+
var parentNode = testTree.CreatedTreeNodes[2];
752+
var aNode = testTree.CreatedTreeNodes[3];
753+
var bNode = testTree.CreatedTreeNodes[4];
754+
var cNode = testTree.CreatedTreeNodes[5];
755+
756+
Assert.AreEqual(CheckState.Empty, rootNode.CheckState);
757+
Assert.AreEqual(CheckState.Empty, parentNode.CheckState);
758+
Assert.AreEqual(CheckState.Empty, aNode.CheckState);
759+
Assert.AreEqual(CheckState.Empty, bNode.CheckState);
760+
Assert.AreEqual(CheckState.Empty, cNode.CheckState);
761+
762+
testTree.ToggleNodeChecked(1, rootNode);
763+
764+
Assert.AreEqual(CheckState.Checked, rootNode.CheckState);
765+
Assert.AreEqual(CheckState.Checked, parentNode.CheckState);
766+
Assert.AreEqual(CheckState.Checked, aNode.CheckState);
767+
Assert.AreEqual(CheckState.Checked, bNode.CheckState);
768+
Assert.AreEqual(CheckState.Checked, cNode.CheckState);
769+
770+
testTreeListener.Received(3).AddCheckedNode(Arg.Any<TestTreeNode>());
771+
testTreeListener.ClearReceivedCalls();
772+
773+
testTree.ToggleNodeChecked(5, cNode);
774+
775+
Assert.AreEqual(CheckState.Mixed, rootNode.CheckState);
776+
Assert.AreEqual(CheckState.Mixed, parentNode.CheckState);
777+
Assert.AreEqual(CheckState.Checked, aNode.CheckState);
778+
Assert.AreEqual(CheckState.Checked, bNode.CheckState);
779+
Assert.AreEqual(CheckState.Empty, cNode.CheckState);
780+
781+
testTreeListener.Received(1).RemoveCheckedNode(Arg.Any<TestTreeNode>());
782+
testTreeListener.ClearReceivedCalls();
783+
784+
testTree.ToggleNodeChecked(5, cNode);
785+
786+
Assert.AreEqual(CheckState.Checked, rootNode.CheckState);
787+
Assert.AreEqual(CheckState.Checked, parentNode.CheckState);
788+
Assert.AreEqual(CheckState.Checked, aNode.CheckState);
789+
Assert.AreEqual(CheckState.Checked, bNode.CheckState);
790+
Assert.AreEqual(CheckState.Checked, cNode.CheckState);
791+
792+
testTreeListener.Received(1).AddCheckedNode(Arg.Any<TestTreeNode>());
793+
testTreeListener.ClearReceivedCalls();
794+
}
795+
682796
[Test]
683797
public void ShouldPopulateTreeWithSingleEntryWithNonPromotedMetaInPath()
684798
{

0 commit comments

Comments
 (0)