public void testBuildHierarchy_multspaces()

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);
	}