### Question:
DirectedGraph extends AttributeSetWithDefaultNodeAttributes { public Node getRoot () { Set<Node> startNodes = new HashSet<Node> (); startNodes.addAll (mNodes.values ()); for (Set<Edge> edgeSet : mEdgesBySource.values ()) { for (Edge edge : edgeSet) { startNodes.remove (edge.getTarget ()); } } switch (startNodes.size ()) { case 0: throw new GraphException ("no start node"); case 1: return startNodes.iterator ().next (); default: throw new GraphException ("multiple start nodes"); } } DirectedGraph();  DirectedGraph(boolean concentrateEdges); void setConcentrateEdges(boolean value); boolean getConcentrateEdges(); void setRankDirection(RankDirection direction); RankDirection getRankDirection(); void setDistanceBetweenRanks(float distance); float getDistanceBetweenRanks(); void setDistanceBetweenNodes(float distance); float getDistanceBetweenNodes(); Node addNode(String name); Node addNode(String name, Cluster cluster); boolean hasNode(String name); Node getNode(String name); Node getRoot(); Iterator<Node> nodeIterator(); Edge addEdge(String sourceName, String targetName); Edge addEdge(Node source, String targetName); Edge addEdge(String sourceName, Node target); Edge addEdge(Node source, Node target); Edge addEdge(String sourceName, String targetName, String label); Edge addEdge(Node source, String targetName, String label); Edge addEdge(String sourceName, Node target, String label); Edge addEdge(Node source, Node target, String label); boolean hasEdge(Node source, Node target); Edge getEdge(Node source, Node target); Set<Edge> getEdgesFrom(Node source); Set<Edge> getEdgesTo(Node target); Set<Edge> getEdgesFromOrTo(Node node); Set<Node> getNeighbours(Node node, int distance); Cluster addCluster(String label); Cluster addCluster(String label, Cluster cluster); Cluster getCluster(String label); Rank addRank(String name, RankType type); Rank getRank(String name);  }### Answer:
@Test public void testGetRoot () { Node node1 = mGraph.addNode ("node1"); mGraph.addNode ("node2"); mGraph.addNode ("node3"); mGraph.addEdge ("node1", "node2"); mGraph.addEdge ("node1", "node3"); mGraph.addEdge ("node2", "node3"); assertEquals (node1, mGraph.getRoot ()); }