### Question:
DirectedGraph extends AttributeSetWithDefaultNodeAttributes { public Rank addRank (String name, RankType type) { if (mRanks.containsKey (name)) { throw new GraphException (String.format ("rank name %s not unique", name)); } else { Rank rank = new Rank (name, type); mRanks.put (name, rank); return rank; } } 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 testAddRank () { String RANK_NAME = "rank name"; Rank rank = mGraph.addRank (RANK_NAME, RankType.SAME); assertEquals (rank, mGraph.getRank (RANK_NAME)); try { mGraph.addRank (RANK_NAME, RankType.SAME); fail ("no exception"); } catch (GraphException ge) { } }