### Question:
GraphIterator implements IIterableIterator <IMutableGraphNode> { public GraphIterator (@Nonnull final IMutableGraphNode aStartNode) { ValueEnforcer.notNull (aStartNode, "startNode"); final ICommonsList <IMutableGraphNode> aList = new CommonsArrayList <> (); _traverseDFS (aStartNode, aList); m_aIter = aList.iterator (); } GraphIterator(@Nonnull final IMutableGraphNode aStartNode); boolean hasNext(); @Nullable IMutableGraphNode next(); boolean hasCycles();  }### Answer:
@Test public void testGraphIterator () { try { new GraphIterator (null); fail (); } catch (final NullPointerException ex) {} final IMutableGraph aGraph = _buildGraph (); final GraphIterator it = new GraphIterator (aGraph.getNodeOfID ("0")); try { it.remove (); fail (); } catch (final UnsupportedOperationException ex) { } for (int i = 0; i < 100; ++i) assertTrue (it.hasNext ()); assertEquals (1, _getNodeValue (it.next ())); for (int i = 0; i < 100; ++i) assertTrue (it.hasNext ()); assertEquals (2, _getNodeValue (it.next ())); for (int i = 0; i < 100; ++i) assertTrue (it.hasNext ()); assertEquals (3, _getNodeValue (it.next ())); assertTrue (it.hasNext ()); assertEquals (4, _getNodeValue (it.next ())); assertTrue (it.hasNext ()); assertEquals (5, _getNodeValue (it.next ())); assertTrue (it.hasNext ()); assertEquals (6, _getNodeValue (it.next ())); assertTrue (it.hasNext ()); assertEquals (7, _getNodeValue (it.next ())); assertFalse (it.hasNext ()); }