in src/main/java/com/atlassian/uwc/hierarchies/DokuwikiHierarchyTest.java [228:312]
public void testBuildHierarchy_multspaces() {
Properties props = tester.getProperties();
props.put("filepath-hierarchy-ext", "");
props.put("filepath-hierarchy-ignorable-ancestors", "sampleData/hierarchy/dokuwiki");
props.setProperty("collision-titles-pie", "Apple");
tester.setProperties(props);
File sampledir = new File("sampleData/hierarchy/dokuwiki");
Collection<Page> pages = new Vector<Page>();
assertTrue(sampledir.exists());
File[] files = sampledir.listFiles(getLocalFilter());
pages = createPages(pages, files);
//set some spacekeys (as if SpaceConverter had set this)
for (Page page : pages) {
if (page.getFile().getPath().matches(".*?Food\\/Pie\\/.*")) {
page.setSpacekey("pie");
}
else if (page.getFile().getPath().matches(".*?Drink\\/.*")) {
page.setSpacekey("drink");
}
else {
page.setSpacekey("food");
}
}
HierarchyNode root = tester.buildHierarchy(pages);
assertNotNull(root); //root node
assertNull(root.getName());
assertNull(root.getPage());
assertNull(root.getParent());
assertNotNull(root.getChildren());
Collection<HierarchyNode> top = root.getChildren();
assertEquals(3, top.size());
Vector<HierarchyNode> nodes0 = new Vector<HierarchyNode>();
nodes0.addAll(top);
String[] exp = {"Drink", "Food", "Food"};
testNodeResults(nodes0, exp);
testNodeHasSpace(nodes0);
//needs more than one level of parent to avoid collision
HierarchyNode drink1 = getNode("Drink", nodes0);
assertNotNull(drink1);
assertNotNull(drink1.getPage());
assertEquals(2, drink1.getChildren().size());
Vector<HierarchyNode> fruitnodes1 = new Vector<HierarchyNode>();
fruitnodes1.addAll(drink1.getChildren());
String[] exp2 = {"Juice", "Water"};
testNodeResults(fruitnodes1, exp2);
HierarchyNode food1 = getNode("Food", nodes0, 0); //get the first one
HierarchyNode food2 = getNode("Food", nodes0, 1); //get the second one
Vector<HierarchyNode> tmpchildren = new Vector<HierarchyNode>(food1.getChildren());
HierarchyNode pie1 = getNode("Pie", tmpchildren);
HierarchyNode pie = pie1;
HierarchyNode food = food2;
if (pie1 == null) { //order is undefined so we have to check and switch if necessary
tmpchildren = new Vector<HierarchyNode>(food2.getChildren());
HierarchyNode pie2 = getNode("Pie", tmpchildren);
pie = pie2;
food = food1;
}
assertNotNull(pie);
assertEquals(3, pie.getChildren().size());
Vector<HierarchyNode> pienodes = new Vector<HierarchyNode>();
pienodes.addAll(pie.getChildren());
String[] exppie = {"Pie Apple", "Fruit", "Start"};
testNodeResults(pienodes, exppie);
HierarchyNode piefruit = getNode("Fruit", pienodes);
assertNotNull(piefruit);
assertNotNull(piefruit.getPage());
assertEquals(1, piefruit.getChildren().size());
Vector<HierarchyNode> fruitnodes2 = new Vector<HierarchyNode>();
fruitnodes2.addAll(piefruit.getChildren());
String[] expfruit = {"Fruit Apple"};
testNodeResults(fruitnodes2, expfruit);
assertNotNull(food); //use earlier set food
assertEquals(2, food.getChildren().size());
Vector<HierarchyNode> foodnodes = new Vector<HierarchyNode>();
foodnodes.addAll(food.getChildren());
String[] expfood = {"Baklava", "Fruit"};
testNodeResults(foodnodes, expfood);
}