//=============== test iterator ===============
public void testGetNodesLazilyIterator() throws Exception
{
RangeIterator iterator = testRoot.getNodesLazily();
// there are 150 node, so it must have next
assertTrue(iterator.hasNext());
// position is before first node
assertEquals(0, iterator.getPosition());
// fetch first one (/child0)
iterator.next();
assertEquals(1, iterator.getPosition());
// fetch second one (/child1)
iterator.next();
assertEquals(2, iterator.getPosition());
// skip to /child12
iterator.skip(10);
NodeImpl next = (NodeImpl)iterator.next();
assertEquals(13, iterator.getPosition());
assertEquals(12, next.getProperty(INDEX_PROPERTY).getLong());
iterator.skip(1);
next = (NodeImpl)iterator.next();
assertEquals(15, iterator.getPosition());
assertEquals(14, next.getProperty(INDEX_PROPERTY).getLong());
iterator.skip(100);
next = (NodeImpl)iterator.next();
assertEquals(116, iterator.getPosition());
assertEquals(115, next.getProperty(INDEX_PROPERTY).getLong());
iterator = testRoot.getNodesLazily();
long size = iterator.getSize();
iterator.skip(size);
try
{
iterator.next();
fail("Exception should be thrown");
}
catch (NoSuchElementException e)
{
}
// remove nodes from 31..60 to make gap in interval of order numbers
iterator = testRoot.getNodesLazily();
iterator.skip(30);
for (int i = 0; i < 30; i++)
{
((NodeImpl)iterator.next()).remove();
}
testRoot.save();
iterator = testRoot.getNodesLazily(10);
size = 0;
while (iterator.hasNext())
{
size++;
iterator.next();
}
assertEquals(320, size);
}