@@ -117,6 +117,47 @@ protected void internalExpandToLevel(Widget widget, int level) {
117117 }
118118 }
119119
120+ @ Test
121+ public void testExpandCollapseToLevel () {
122+ TestElement rootElement = TestElement .createModel (3 , 1 );
123+ TestElement firstChild = rootElement .getChildAt (0 );
124+ TestElement secondChild = firstChild .getChildAt (0 );
125+ TestElement lastChild = secondChild .getChildAt (0 );
126+
127+ fTreeViewer .setInput (rootElement );
128+
129+ /*
130+ * First block shows everything works with
131+ * collapseToLevel(AbstractTreeViewer.ALL_LEVELS);
132+ */
133+ fTreeViewer .expandToLevel (rootElement , AbstractTreeViewer .ALL_LEVELS );
134+ processEvents ();
135+ assertTrue ("1st should be expanded" , fTreeViewer .getExpandedState (firstChild ));
136+ assertTrue ("2nd should be expanded" , fTreeViewer .getExpandedState (secondChild ));
137+ assertFalse ("3rd should be always collapsed" , fTreeViewer .getExpandedState (lastChild ));
138+
139+ fTreeViewer .collapseToLevel (firstChild , AbstractTreeViewer .ALL_LEVELS );
140+ processEvents ();
141+ assertFalse ("1st should be collapsed" , fTreeViewer .getExpandedState (firstChild ));
142+ assertFalse ("2nd should be collapsed" , fTreeViewer .getExpandedState (secondChild ));
143+ assertFalse ("3rd should be always collapsed" , fTreeViewer .getExpandedState (lastChild ));
144+
145+ /*
146+ * Main block shows regression with collapseToLevel(number);
147+ */
148+ fTreeViewer .expandToLevel (rootElement , AbstractTreeViewer .ALL_LEVELS );
149+ processEvents ();
150+ assertTrue ("1st should be expanded" , fTreeViewer .getExpandedState (firstChild ));
151+ assertTrue ("2nd should be expanded" , fTreeViewer .getExpandedState (secondChild ));
152+ assertFalse ("3rd should be always collapsed" , fTreeViewer .getExpandedState (lastChild ));
153+
154+ fTreeViewer .collapseToLevel (firstChild , 2 );
155+ processEvents ();
156+ assertFalse ("1st should be collapsed" , fTreeViewer .getExpandedState (firstChild ));
157+ assertFalse ("2nd should be collapsed" , fTreeViewer .getExpandedState (secondChild ));
158+ assertFalse ("3rd should be always collapsed" , fTreeViewer .getExpandedState (lastChild ));
159+ }
160+
120161 /**
121162 * Removing the same element twice should not produce a dummy tree-item.
122163 */
@@ -127,7 +168,7 @@ public void testIssue3525() {
127168 TestElement modelChild = modelParent .getChildAt (0 );
128169 fTreeViewer .setInput (modelRoot );
129170 fTreeViewer .expandAll ();
130-
171+ processEvents ();
131172 TreeItem widgetParent = (TreeItem ) fTreeViewer .testFindItem (modelParent );
132173 TreeItem widgetChild = (TreeItem ) fTreeViewer .testFindItem (modelChild );
133174 assertNotNull (widgetParent );
@@ -141,15 +182,15 @@ public void testIssue3525() {
141182 modelParent .fChildren .remove (modelChild );
142183 fTreeViewer .remove (modelChild );
143184 modelParent .fChildren .add (modelChild );
144-
185+ processEvents ();
145186 widgetParent = (TreeItem ) fTreeViewer .testFindItem (modelParent );
146187 widgetChild = (TreeItem ) fTreeViewer .testFindItem (modelChild );
147188 assertNotNull (widgetParent );
148189 assertNull (widgetChild );
149190 assertArrayEquals (widgetParent .getItems (), new TreeItem [0 ]);
150191
151192 fTreeViewer .remove (modelChild );
152-
193+ processEvents ();
153194 widgetParent = (TreeItem ) fTreeViewer .testFindItem (modelParent );
154195 widgetChild = (TreeItem ) fTreeViewer .testFindItem (modelChild );
155196 assertNotNull (widgetParent );
0 commit comments