@@ -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