|
13 | 13 | import javax.swing.JTree;
|
14 | 14 | import javax.swing.SwingUtilities;
|
15 | 15 | import javax.swing.event.TableModelEvent;
|
| 16 | +import javax.swing.event.TreeModelListener; |
16 | 17 | import javax.swing.table.DefaultTableModel;
|
17 | 18 | import javax.swing.table.TableModel;
|
18 | 19 | import javax.swing.tree.DefaultMutableTreeNode;
|
@@ -1228,4 +1229,46 @@ public void modifyingTreeModelDuringIterationShouldResultInConcurrentModificatio
|
1228 | 1229 | Assertions.assertThrows(ConcurrentModificationException.class, iterator::next);
|
1229 | 1230 | });
|
1230 | 1231 | }
|
| 1232 | + |
| 1233 | + @Test |
| 1234 | + public void modifyingTreeModelAfterIteration() throws Exception { |
| 1235 | + SwingUtilities.invokeAndWait(() -> { |
| 1236 | + DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); |
| 1237 | + DefaultTreeModel model = new DefaultTreeModel(root); |
| 1238 | + Iterator<KTreePath> iterator = SwingStreamUtils.asIterable(model).iterator(); |
| 1239 | + while (iterator.hasNext()) { |
| 1240 | + iterator.next(); |
| 1241 | + } |
| 1242 | + model.insertNodeInto(new DefaultMutableTreeNode("child"), root, 0); |
| 1243 | + Assertions.assertFalse(iterator.hasNext()); |
| 1244 | + }); |
| 1245 | + } |
| 1246 | + |
| 1247 | + @Test |
| 1248 | + public void treeModelListeners() throws Exception { |
| 1249 | + SwingUtilities.invokeAndWait(() -> { |
| 1250 | + List<TreeModelListener> listeners = new ArrayList<>(); |
| 1251 | + DefaultMutableTreeNode root = new DefaultMutableTreeNode("root"); |
| 1252 | + DefaultTreeModel model = new DefaultTreeModel(root) { |
| 1253 | + @Override |
| 1254 | + public void addTreeModelListener(TreeModelListener l) { |
| 1255 | + listeners.add(l); |
| 1256 | + super.addTreeModelListener(l); |
| 1257 | + } |
| 1258 | + |
| 1259 | + @Override |
| 1260 | + public void removeTreeModelListener(TreeModelListener l) { |
| 1261 | + listeners.remove(l); |
| 1262 | + super.removeTreeModelListener(l); |
| 1263 | + } |
| 1264 | + }; |
| 1265 | + Assertions.assertEquals(0, listeners.size()); |
| 1266 | + Iterator<KTreePath> iterator = SwingStreamUtils.asIterable(model).iterator(); |
| 1267 | + Assertions.assertEquals(1, listeners.size()); |
| 1268 | + while (iterator.hasNext()) { |
| 1269 | + iterator.next(); |
| 1270 | + } |
| 1271 | + Assertions.assertEquals(0, listeners.size()); |
| 1272 | + }); |
| 1273 | + } |
1231 | 1274 | }
|
0 commit comments