@Override protected void scanDirectory(ClassLoader loader, File root) throws IOException { URI base = root.toURI(); for (File entry : Files.fileTraverser().depthFirstPreOrder(root)) { String resourceName = new File(base.relativize(entry.toURI()).getPath()).getPath(); resources.add(resourceName); } }
@Test public void forGraph_depthFirstPreOrder_multigraph() { Traverser<Character> traverser = Traverser.forGraph(MULTI_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "abdc"); assertEqualCharNodes(traverser.depthFirstPreOrder('b'), "bd"); assertEqualCharNodes(traverser.depthFirstPreOrder('c'), "cabd"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "d"); }
@Test public void forGraph_depthFirstPreOrder_cycle() { Traverser<Character> traverser = Traverser.forGraph(CYCLE_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "abcd"); assertEqualCharNodes(traverser.depthFirstPreOrder('b'), "bcda"); assertEqualCharNodes(traverser.depthFirstPreOrder('c'), "cdab"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "dabc"); }
@Test public void forGraph_depthFirstPreOrder_twoCycles() { Traverser<Character> traverser = Traverser.forGraph(TWO_CYCLES_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "abcd"); assertEqualCharNodes(traverser.depthFirstPreOrder('b'), "bcda"); assertEqualCharNodes(traverser.depthFirstPreOrder('c'), "cdab"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "dabc"); }
@Test public void forGraph_depthFirstPreOrder_tree() throws Exception { Traverser<Character> traverser = Traverser.forGraph(TREE); assertEqualCharNodes(traverser.depthFirstPreOrder('h'), "hdabcegf"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "dabc"); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "a"); }
@Test public void forTree_depthFirstPreOrder_graphContainingTreeAndDiamond() throws Exception { Traverser<Character> traverser = Traverser.forTree(GRAPH_CONTAINING_TREE_AND_DIAMOND); assertEqualCharNodes(traverser.depthFirstPreOrder('a'), "abcd"); assertEqualCharNodes(traverser.depthFirstPreOrder('b'), "bcd"); assertEqualCharNodes(traverser.depthFirstPreOrder('d'), "d"); }
@Test public void forGraph_depthFirstPreOrderIterable_diamond() { Traverser<Character> traverser = Traverser.forGraph(DIAMOND_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("")), ""); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("bc")), "bdc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("a")), "abdc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("acdb")), "abdc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("db")), "db"); }
@Test public void forGraph_depthFirstPreOrderIterable_multigraph() { Traverser<Character> traverser = Traverser.forGraph(MULTI_GRAPH); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("ac")), "abdc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("cb")), "cabd"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("db")), "db"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("d")), "d"); }
@Test public void forTree_depthFirstPreOrderIterable_tree() throws Exception { Traverser<Character> traverser = Traverser.forTree(TREE); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("h")), "hdabcegf"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("d")), "dabc"); assertEqualCharNodes(traverser.depthFirstPreOrder(charactersOf("a")), "a"); }
@Test public void forTree_depthFirstPreOrder_twoTrees() { Iterable<Character> result = Traverser.forTree(TWO_TREES).depthFirstPreOrder('a'); assertEqualCharNodes(result, "ab"); }
@Test public void forGraph_depthFirstPreOrderIterable_twoTrees() { assertEqualCharNodes(Traverser.forGraph(TWO_TREES).depthFirstPreOrder(charactersOf("a")), "ab"); assertEqualCharNodes( Traverser.forGraph(TWO_TREES).depthFirstPreOrder(charactersOf("ac")), "abcd"); }
@Test public void forGraph_depthFirstPreOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forGraph(SINGLE_ROOT).depthFirstPreOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forGraph_depthFirstPreOrder_emptyGraph() { try { Traverser.forGraph(createDirectedGraph()).depthFirstPreOrder('a'); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@Test public void forTree_depthFirstPreOrderIterable_singleRoot() { Iterable<Character> result = Traverser.forTree(SINGLE_ROOT).depthFirstPreOrder(charactersOf("a")); assertEqualCharNodes(result, "a"); }
@Test public void forGraph_depthFirstPreOrderIterable_emptyGraph() { assertEqualCharNodes( Traverser.forGraph(createDirectedGraph()).depthFirstPreOrder(charactersOf("")), ""); try { Traverser.forGraph(createDirectedGraph()).depthFirstPreOrder(charactersOf("a")); fail("Expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } }
@Test public void forGraph_depthFirstPreOrderIterable_javadocExample_canBeIteratedMultipleTimes() { Iterable<Character> result = Traverser.forGraph(JAVADOC_GRAPH).depthFirstPreOrder(charactersOf("bc")); assertEqualCharNodes(result, "bacefd"); assertEqualCharNodes(result, "bacefd"); }
@Test public void forTree_depthFirstPreOrder_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(TREE); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPreOrder('h'); assertEqualCharNodes(Iterables.limit(result, 2), "hd"); assertThat(graph.requestedNodes).containsExactly('h', 'h', 'd', 'a'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "hd"); assertThat(graph.requestedNodes).containsExactly('h', 'h', 'h', 'd', 'd', 'a', 'a'); }
@Test public void forGraph_depthFirstPreOrder_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(DIAMOND_GRAPH); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPreOrder('a'); assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'b', 'd'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'a', 'b', 'b', 'd', 'd'); }
@Test public void forGraph_depthFirstPreOrderIterable_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(DIAMOND_GRAPH); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPreOrder(charactersOf("ac")); assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'b', 'c', 'd'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "ab"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'a', 'b', 'b', 'c', 'd', 'd'); }
@Test public void forTree_depthFirstPreOrderIterable_iterableIsLazy() { RequestSavingGraph graph = new RequestSavingGraph(TREE); Iterable<Character> result = Traverser.forGraph(graph).depthFirstPreOrder(charactersOf("dg")); assertEqualCharNodes(Iterables.limit(result, 2), "da"); assertThat(graph.requestedNodes).containsExactly('a', 'd', 'd', 'g'); // Iterate again to see if calculation is done again assertEqualCharNodes(Iterables.limit(result, 2), "da"); assertThat(graph.requestedNodes).containsExactly('a', 'a', 'd', 'd', 'd', 'g'); }