diff --git a/openide.nodes/test/unit/src/org/openide/nodes/ChildFactoryTest.java b/openide.nodes/test/unit/src/org/openide/nodes/ChildFactoryTest.java --- a/openide.nodes/test/unit/src/org/openide/nodes/ChildFactoryTest.java +++ b/openide.nodes/test/unit/src/org/openide/nodes/ChildFactoryTest.java @@ -47,6 +47,7 @@ import java.beans.*; import java.util.*; import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicInteger; import org.netbeans.junit.NbTestCase; import org.netbeans.junit.RandomlyFails; import org.openide.nodes.ChildFactory.Detachable; @@ -311,6 +312,36 @@ assertEquals(5, c.getNodesCount(true)); } + public void testNodeRecreation() throws Exception { // #211847 + final List nodesCreated = new ArrayList(); + final AtomicInteger size = new AtomicInteger(3); + class F extends ChildFactory { + @Override protected boolean createKeys(List keys) { + for (int i = 1; i <= size.get(); i++) { + keys.add(i); + } + return true; + } + @Override protected Node createNodeForKey(Integer key) { + nodesCreated.add(key); + Node n = new AbstractNode(Children.LEAF); + n.setName(key.toString()); + return n; + } + void refresh() { + refresh(false); + } + } + F f = new F(); + Children c = Children.create(f, true); + assertEquals(3, c.getNodes(true).length); + assertEquals("[1, 2, 3]", nodesCreated.toString()); + size.set(4); + f.refresh(); + assertEquals(4, c.getNodes(true).length); + assertEquals("[1, 2, 3, 4]", nodesCreated.toString()); + } + static final class ProviderImpl extends ChildFactory { final Object lock = new Object(); volatile boolean wait = false;