### Question:
EdgeBasedNodeContractor extends AbstractNodeContractor { @Override public void contractNode(int node) { activeShortcutHandler = addingShortcutHandler; stats().stopWatch.start(); findAndHandleShortcuts(node); updateHierarchyDepthsOfNeighbors(node); stats().stopWatch.stop(); } EdgeBasedNodeContractor(PrepareCHGraph prepareGraph, PMap pMap); @Override void initFromGraph(); @Override void prepareContraction(); @Override float calculatePriority(int node); @Override void contractNode(int node); @Override long getAddedShortcutsCount(); @Override long getDijkstraCount(); @Override float getDijkstraSeconds(); @Override String getStatisticsString(); int getNumPolledEdges();  }### Answer:
@Test public void testContractNode_twoNormalEdges_noTurncosts() { graph.edge(0, 3, 1, false); final EdgeIteratorState e3to2 = graph.edge(3, 2, 3, false); final EdgeIteratorState e2to4 = graph.edge(2, 4, 5, false); graph.edge(4, 1, 1, false); graph.freeze(); setMaxLevelOnAllNodes(); EdgeBasedNodeContractor nodeContractor = createNodeContractor(); contractNode(nodeContractor, 0, 0); contractNode(nodeContractor, 1, 1); checkShortcuts(); contractNode(nodeContractor, 2, 2); checkShortcuts(createShortcut(3, 4, e3to2, e2to4, 8)); }