@Test public void testAttributed() {
AttributedDirectedGraph<String, DefaultEdge> g =
AttributedDirectedGraph.create(new DefaultAttributedEdgeFactory());
g.addVertex("A");
g.addVertex("B");
g.addVertex("C");
g.addVertex("D");
g.addVertex("E");
g.addVertex("F");
g.addEdge("A", "B", 1);
g.addEdge("B", "C", 1);
g.addEdge("D", "C", 1);
g.addEdge("C", "D", 1);
g.addEdge("E", "F", 1);
g.addEdge("C", "C", 1);
assertEquals("[A, B, C, D]", shortestPath(g, "A", "D").toString());
g.addEdge("B", "D", 1);
assertEquals("[A, B, D]", shortestPath(g, "A", "D").toString());
assertNull("There is no path from A to E", shortestPath(g, "A", "E"));
assertEquals("[]", shortestPath(g, "D", "D").toString());
assertNull("Node X is not in the graph", shortestPath(g, "X", "A"));
assertEquals("[[A, B, C, D], [A, B, D]]", paths(g, "A", "D").toString());
assertThat(g.addVertex("B"), is(false));
assertThat(Iterables.size(g.getEdges("A", "B")), is(1));
assertThat(g.addEdge("A", "B", 1), nullValue());
assertThat(Iterables.size(g.getEdges("A", "B")), is(1));
assertThat(g.addEdge("A", "B", 2), notNullValue());
assertThat(Iterables.size(g.getEdges("A", "B")), is(2));
}