blob: 9ef0f54a952392c2ba4e967ae893cdf5c0c48024 [file] [log] [blame]
package com.atlassian.uwc.hierarchies;
import java.io.File;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Vector;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.atlassian.uwc.filters.NoSvnFilter;
import com.atlassian.uwc.ui.Page;
public class FilepathHierarchyTest extends TestCase {
FilepathHierarchy tester = null;
Logger log = Logger.getLogger(this.getClass());
final String PARENT_FILEPATH = "parent.txt";
final String CHILD_FILEPATH = "parent/child.txt";
final String CHILD_FILEPATH2 = "parent/child2.txt";
final String PARENT_FILENAME = "parent.txt";
final String CHILD_FILENAME = "child.txt";
final String CHILD_FILENAME2 = "child2.txt";
protected void setUp() throws Exception {
PropertyConfigurator.configure("log4j.properties");
tester = new FilepathHierarchy();
Properties properties = tester.getProperties();
properties.put("filepath-hierarchy-matchpagename", "false"); //opt-out (matches to filename)
tester.setProperties(properties);
}
protected void tearDown() {
tester = null;
}
public void testBuildHierarchyErrors() {
HierarchyNode node = tester.buildHierarchy(null);
assertNull(node);
Vector<Page> pages = new Vector<Page>();
HierarchyNode node2 = tester.buildHierarchy(pages);
assertNull(node2);
}
public void testBuildHierarchy() {
//create stubs
Page waterPage = new Page(new File(""));
Page baklavaPage = new Page(new File(""));
Page applePage = new Page(new File(""));
Page fruitPage = new Page(new File(""));
Page drinkPage = new Page(new File(""));
Page foodPage = new Page(new File(""));
setupStubPage(waterPage, "Water.txt", "Drink");
setupStubPage(baklavaPage, "Baklava.txt", "Food");
setupStubPage(applePage, "Apple.txt", "Food/Fruit");
setupStubPage(fruitPage, "Fruit.txt", "Food");
setupStubPage(drinkPage, "Drink.txt", "");
setupStubPage(foodPage, "Food.txt", "");
//try a different order
List<Page> inputPages = new LinkedList<Page>();
inputPages.add(waterPage);
inputPages.add(baklavaPage);
inputPages.add(applePage);
inputPages.add(fruitPage);
inputPages.add(drinkPage);
inputPages.add(foodPage);
HierarchyNode actual = tester.buildHierarchy(inputPages);
assertNotNull(actual); //root node
assertNull(actual.getName());
assertNull(actual.getPage());
assertNull(actual.getParent());
assertNotNull(actual.getChildren());
Collection<HierarchyNode> level1ChildSet = actual.getChildren();
assertEquals(2, level1ChildSet.size());
Vector<HierarchyNode> level1Children = new Vector<HierarchyNode>();
level1Children.addAll(level1ChildSet);
HierarchyNode level1Child1 = level1Children.get(0);
HierarchyNode level1Child2 = level1Children.get(1);
boolean level1Child1_Food = level1Child1.getName().startsWith("Food");
HierarchyNode foodNode = level1Child1_Food?level1Child1:level1Child2;
HierarchyNode drinkNode = level1Child1_Food?level1Child2:level1Child1;
testFoodNode(foodNode, foodPage, fruitPage, applePage, baklavaPage);
testDrinkNode(drinkNode, drinkPage, waterPage);
}
public void testBuildHierarchy2() {
//create stubs
Page waterPage = new Page(new File(""));
Page baklavaPage = new Page(new File(""));
Page applePage = new Page(new File(""));
Page fruitPage = new Page(new File(""));
Page drinkPage = new Page(new File(""));
Page foodPage = new Page(new File(""));
setupStubPage(waterPage, "Water.txt", "Drink");
setupStubPage(baklavaPage, "Baklava.txt", "Food");
setupStubPage(applePage, "Apple.txt", "Food/Fruit");
setupStubPage(fruitPage, "Fruit.txt", "Food");
setupStubPage(drinkPage, "Drink.txt", "");
setupStubPage(foodPage, "Food.txt", "");
//this order
List<Page> inputPages = new LinkedList<Page>();
inputPages.add(fruitPage);
inputPages.add(baklavaPage);
inputPages.add(applePage);
inputPages.add(foodPage);
inputPages.add(drinkPage);
inputPages.add(waterPage);
HierarchyNode actual = tester.buildHierarchy(inputPages);
assertNotNull(actual); //root node
assertNull(actual.getName());
assertNull(actual.getPage());
assertNull(actual.getParent());
assertNotNull(actual.getChildren());
Collection<HierarchyNode> level1ChildSet = actual.getChildren();
assertEquals(2, level1ChildSet.size());
Vector<HierarchyNode> level1Children = new Vector<HierarchyNode>();
level1Children.addAll(level1ChildSet);
HierarchyNode level1Child1 = level1Children.get(0);
HierarchyNode level1Child2 = level1Children.get(1);
boolean level1Child1_Food = level1Child1.getName().startsWith("Food");
HierarchyNode foodNode = level1Child1_Food?level1Child1:level1Child2;
HierarchyNode drinkNode = level1Child1_Food?level1Child2:level1Child1;
testFoodNode(foodNode, foodPage, fruitPage, applePage, baklavaPage);
testDrinkNode(drinkNode, drinkPage, waterPage);
}
public void testBuildHierarchy3() {
//create stubs
Page waterPage = new Page(new File(""));
Page baklavaPage = new Page(new File(""));
Page applePage = new Page(new File(""));
Page fruitPage = new Page(new File(""));
Page drinkPage = new Page(new File(""));
Page foodPage = new Page(new File(""));
setupStubPage(waterPage, "Water.txt", "Drink");
setupStubPage(baklavaPage, "Baklava.txt", "Food");
setupStubPage(applePage, "Apple.txt", "Food/Fruit");
setupStubPage(fruitPage, "Fruit.txt", "Food");
setupStubPage(drinkPage, "Drink.txt", "");
setupStubPage(foodPage, "Food.txt", "");
//another order
List<Page >inputPages = new LinkedList<Page>();
inputPages.add(drinkPage);
inputPages.add(waterPage);
inputPages.add(baklavaPage);
inputPages.add(applePage);
inputPages.add(foodPage);
inputPages.add(fruitPage);
HierarchyNode actual = tester.buildHierarchy(inputPages);
assertNotNull(actual); //root node
assertNull(actual.getName());
assertNull(actual.getPage());
assertNull(actual.getParent());
assertNotNull(actual.getChildren());
Collection<HierarchyNode> level1ChildSet = actual.getChildren();
assertEquals(2, level1ChildSet.size());
Vector<HierarchyNode> level1Children = new Vector<HierarchyNode>();
level1Children.addAll(level1ChildSet);
HierarchyNode level1Child1 = level1Children.get(0);
HierarchyNode level1Child2 = level1Children.get(1);
boolean level1Child1_Food = level1Child1.getName().startsWith("Food");
HierarchyNode foodNode = level1Child1_Food?level1Child1:level1Child2;
HierarchyNode drinkNode = level1Child1_Food?level1Child2:level1Child1;
testFoodNode(foodNode, foodPage, fruitPage, applePage, baklavaPage);
testDrinkNode(drinkNode, drinkPage, waterPage);
}
private void buildPages(File file, Vector<Page> inputPages) {
if (file.isFile()) {
Page page = new Page(file);
page.setName(file.getName());
page.setPath(getPath(file.getPath()));
inputPages.add(page);
}
else if (file.isDirectory()) {
File[] files = file.listFiles(new NoSvnFilter());
for (File f: files) {
buildPages(f, inputPages);
}
}
}
private String getPath(String pagePath) {
int fileNameStart = pagePath.lastIndexOf(File.separator);
if (fileNameStart >= 0) {
pagePath = pagePath.substring(0, fileNameStart);
} else {
pagePath = "";
}
return pagePath;
}
private void setupStubPage(Page page, String file, String parentDir) {
page.setName(file);
page.setPath(parentDir);
}
public void testNewNode() {
HierarchyNode root = new HierarchyNode();
Page inputPage = new Page(new File(PARENT_FILEPATH));
inputPage.setName(PARENT_FILENAME);
inputPage.setPath(PARENT_FILEPATH);
HierarchyNode inputNode = root;
HierarchyNode parentNode = new HierarchyNode(inputPage, inputNode);
String expected = PARENT_FILENAME;
String actual = parentNode.getName();
assertEquals(expected, actual);
HierarchyNode parentExpected = root;
HierarchyNode parentActual = parentNode.getParent();
assertNotNull(parentActual);
assertEquals(parentActual, parentExpected);
inputPage = new Page(new File(CHILD_FILEPATH));
inputPage.setName(CHILD_FILENAME);
inputPage.setPath(CHILD_FILEPATH);
inputNode = parentNode;
HierarchyNode childNode = new HierarchyNode(inputPage, inputNode);
expected = CHILD_FILENAME;
actual = childNode.getName();
assertEquals(expected, actual);
parentExpected = parentNode;
parentActual = childNode.getParent();
assertNotNull(parentActual);
assertEquals(parentActual, parentExpected);
}
public void testGetRootNode() {
HierarchyNode root = tester.getRootNode();
assertNotNull(root);
assertNull(root.getName());
//test that the root is always the same;
HierarchyNode root2 = tester.getRootNode();
assertNotNull(root);
assertNull(root.getName());
assertEquals(root, root2);
}
public void testGetAncestors() {
String input = "Fruit";
Vector<String> actual = tester.getAncestors(input);
assertNotNull(actual);
assertEquals(1, actual.size());
assertEquals("Fruit", actual.remove(0));
input = "Food/Fruit/Apple";
actual = tester.getAncestors(input);
assertNotNull(actual);
assertEquals(3, actual.size());
assertEquals("Food", actual.remove(0));
assertEquals("Fruit", actual.remove(0));
assertEquals("Apple", actual.remove(0));
}
public void testHasExistingRelationship() {
HierarchyNode parent = new HierarchyNode();
parent.setName("parent");
HierarchyNode child = new HierarchyNode(null, parent);
child.setName("child");
boolean expected = true;
boolean actual = tester.hasExistingRelationship(parent, "child");
assertEquals(expected, actual);
expected = false;
actual = tester.hasExistingRelationship(parent, "notchild");
assertEquals(expected, actual);
}
public void testCreateChildNode_String() {
HierarchyNode parent = new HierarchyNode();
parent.setName("parent");
String childname = "child";
HierarchyNode actual = tester.createChildNode(parent, childname);
assertNotNull(actual);
assertEquals("child", actual.getName());
assertEquals(parent, actual.getParent());
assertTrue(actual.getChildren().isEmpty());
assertNull(actual.getPage());
}
public void testCreateChildNode_Page() {
HierarchyNode parent = new HierarchyNode();
parent.setName("parent");
Page child = new Page(new File(""));
String childname = "child";
child.setName(childname);
child.setPath("parent/child");
HierarchyNode actual = tester.createChildNode(parent, child);
assertNotNull(actual);
assertEquals("child", actual.getName());
assertEquals(parent, actual.getParent());
assertEquals(child, actual.getPage());
assertTrue(actual.getChildren().isEmpty());
}
public void testGetChildNode() {
HierarchyNode parent = new HierarchyNode();
parent.setName("parent");
Page child = new Page(new File(""));
String childname = "child";
child.setName(childname);
child.setPath("parent/child");
HierarchyNode expected = tester.createChildNode(parent, child);
HierarchyNode actual = tester.getChildNode(parent, childname);
assertNotNull(actual);
assertEquals(expected, actual);
assertEquals(expected.getParent(), actual.getParent());
}
public void testGetFileExtension() {
String path = "path.txt";
String expected = ".txt";
String actual = tester.getFileExtension(path);
assertNotNull(actual);
assertEquals(expected, actual);
path = "path.wiki";
expected = ".txt";
actual = tester.getFileExtension(path);
assertNotNull(actual);
assertEquals(expected, actual);
tester = new FilepathHierarchy();
expected = ".wiki";
actual = tester.getFileExtension(path);
assertNotNull(actual);
assertEquals(expected, actual);
tester = new FilepathHierarchy();
path = "path";
expected = "";
actual = tester.getFileExtension(path);
assertNotNull(actual);
assertEquals(expected, actual);
path = null;
actual = tester.getFileExtension(path);
assertNull(actual);
}
public void testFoodNode(HierarchyNode foodNode, Page foodPage, Page fruitPage, Page applePage, Page baklavaPage) {
testNode(foodNode, "Food.txt", foodPage, tester.getRootNode());
//children
assertNotNull(foodNode.getChildren());
assertEquals(2, foodNode.getChildren().size());
HierarchyNode fruitNode = null;
HierarchyNode baklavaNode = null;
for (HierarchyNode child : foodNode.getChildren()) {
if (child.getName().startsWith("Fruit")) fruitNode = child;
if (child.getName().startsWith("Baklava")) baklavaNode = child;
}
testFruitNode(fruitNode, fruitPage, applePage, foodNode);
testBaklavaNode(baklavaNode, baklavaPage, foodNode);
}
private void testFruitNode(HierarchyNode fruitNode, Page fruitPage, Page applePage, HierarchyNode parent) {
testNode(fruitNode, "Fruit.txt", fruitPage, parent);
//children
assertNotNull(fruitNode.getChildren());
assertEquals(1, fruitNode.getChildren().size());
HierarchyNode appleNode = null;
for (HierarchyNode child : fruitNode.getChildren()) {
appleNode = child;
}
testAppleNode(appleNode, applePage, fruitNode);
}
private void testAppleNode(HierarchyNode appleNode, Page applePage, HierarchyNode parent) {
testNode(appleNode, "Apple.txt", applePage, parent);
if (appleNode.getChildren() != null) assertTrue(appleNode.getChildren().isEmpty());
else assertNull(appleNode.getChildren());
}
private void testBaklavaNode(HierarchyNode baklavaNode, Page baklavaPage, HierarchyNode parent) {
testNode(baklavaNode, "Baklava.txt", baklavaPage, parent);
if (baklavaNode.getChildren() != null) assertTrue(baklavaNode.getChildren().isEmpty());
else assertNull(baklavaNode.getChildren());
}
public void testDrinkNode(HierarchyNode drinkNode, Page drinkPage, Page waterPage) {
testNode(drinkNode, "Drink.txt", drinkPage, tester.getRootNode());
//children
assertNotNull(drinkNode.getChildren());
assertEquals(1, drinkNode.getChildren().size());
HierarchyNode waterNode = null;
for (HierarchyNode child : drinkNode.getChildren()) {
waterNode = child;
}
testWaterNode(waterNode, waterPage, drinkNode);
}
public void testGetFileExtensionWithDots() {
String root_file1 = "a.b.c.uwc";
String expected = ".uwc";
String actual = tester.getFileExtension(root_file1);
assertNotNull(actual);
assertEquals(expected, actual);
}
public void testDuplicates_diffDir() {
Page page1 = new Page(null);
page1.setName("Foo");
page1.setPath("test/A/");
page1.setOriginalText("testing duplicates - Foo");
Page page2 = new Page(null);
page2.setName("foo");
page2.setPath("test/B/");
page2.setOriginalText("testing duplicates - foo");
Vector<Page> pages = new Vector<Page>();
pages.add(page1);
pages.add(page2);
HierarchyNode node = tester.buildHierarchy(pages);
assertNotNull(node);
}
public void testDuplicates_sameDir() {
Page page1 = new Page(null);
page1.setName("Foo");
page1.setPath("test/A/");
page1.setOriginalText("testing duplicates - Foo");
Page page2 = new Page(null);
page2.setName("foo");
page2.setPath("test/A/");
page2.setOriginalText("testing duplicates - foo");
Vector<Page> pages = new Vector<Page>();
pages.add(page1);
pages.add(page2);
HierarchyNode node = tester.buildHierarchy(pages);
assertNotNull(node);
}
public void testDotsInPagenamesWithNoExt() {
Page page1 = new Page(null);
page1.setName("Foo");
page1.setPath("test/A/");
page1.setOriginalText("testing dots - Foo");
Page page2 = new Page(null);
page2.setName("9.0_MA_OA_Message_Processing");
page2.setPath("test/A/");
page2.setOriginalText("testing dots - 9.0...");
Page page3 = new Page(null);
page3.setName("Bar");
page3.setPath("test/B/");
page3.setOriginalText("testing dots - Bar");
Vector<Page> pages = new Vector<Page>();
pages.add(page1);
pages.add(page2);
pages.add(page3);
//set an explicit extension
Properties properties = tester.getProperties();
if (properties == null) properties = new Properties();
properties.put("filepath-hierarchy-ext", "");
tester.setProperties(properties);
HierarchyNode root = tester.buildHierarchy(pages);
assertNotNull(root);
assertEquals(1, root.getChildren().size());
assertEquals(7, root.countDescendants()); //test, A, Foo, 9.0.., Bar, B, and null root
//nodes
for (HierarchyNode node : root.getChildren()) {
assertEquals("test", node.getName());
assertEquals(2, node.getChildren().size());
//children nodes
for (HierarchyNode child : node.getChildren()) {
assertTrue("child name should be A or B, but is: " + child.getName(),
child.getName().equals("A") || child.getName().equals("B"));
if (child.getName().equals("A")) {
assertEquals(2, child.getChildren().size());
for (HierarchyNode gchild : child.getChildren()) {
assertTrue("gchild name should be Foo or 9.0_MA_OA_Message_Processing",
gchild.getName().equals("Foo") || gchild.getName().equals("9.0_MA_OA_Message_Processing"));
}
}
else { //B
assertEquals(1, child.getChildren().size());
for (HierarchyNode gchild : child.getChildren()) {
assertTrue("gchild name should be Bar",
gchild.getName().equals("Bar"));
}
}
}
}
}
public void testHiddenPages() {
Page page1 = new Page(null);
page1.setName("Foo");
page1.setPath("test/A/");
page1.setOriginalText("testing hidden - Foo");
Page page2 = new Page(null);
page2.setName(".hidden");
page2.setPath("test/A/");
page2.setOriginalText("testing hidden - .hidden");
Page page3 = new Page(null);
page3.setName("Bar");
page3.setPath("test/B/");
page3.setOriginalText("testing hidden - Bar");
Vector<Page> pages = new Vector<Page>();
pages.add(page1);
pages.add(page2);
pages.add(page3);
HierarchyNode root = tester.buildHierarchy(pages);
assertNotNull(root);
}
public void testChangedPagename() { //UWC-297, could occur with page title framework usage
File dir = new File("sampleData/hierarchy/basic");
assertTrue(dir.isDirectory() && dir.exists());
tester.clearRootNode();
Properties properties = tester.getProperties();
properties.put("filepath-hierarchy-ignorable-ancestors", "sampleData/hierarchy/basic");
Vector<Page> pages = new Vector<Page>();
File[] files = dir.listFiles();
for (File file : files) {
if (file.getName().startsWith(".svn")) continue;
if (file.isDirectory()) {
File[] children = file.listFiles();
for (File child : children) {
if (child.getName().startsWith(".svn")) continue;
if (child.isFile()) {
Page page = new Page(child);
page.setName(child.getName().replaceFirst("\\.txt$", ""));
page.setPath(child.getPath().replaceFirst("[^\\/]*$", ""));
pages.add(page);
}
}
}
else {
Page page = new Page(file);
page.setName(file.getName().replaceFirst("\\.txt$", ""));
page.setPath(file.getPath().replaceFirst("[^\\/]*$", ""));
pages.add(page);
}
}
//make some page title changes
for (Page page : pages) {
if (page.getName().equals("Drink")) {
page.setName("Liquid");
}
if (page.getName().equals("Food")) {
page.setName("Comestibles");
}
}
HierarchyNode root = tester.buildHierarchy(pages);
assertNotNull(root);
assertEquals(6, root.countDescendants());
Collection<HierarchyNode> level1 = root.getChildren();
assertNotNull(level1);
assertEquals(2, level1.size());
for (HierarchyNode lvl1Node : level1) {
assertNotNull(lvl1Node);
if ("Food".equals(lvl1Node.getName())) fail("Still have Food node");
else if ("Food.txt".equals(lvl1Node.getName())) fail("Still have Drink node");
else if ("Drink".equals(lvl1Node.getName())) fail("Still have Drink node");
else if ("Drink.txt".equals(lvl1Node.getName())) fail("Still have Drink node");
else if ("Comestibles".equals(lvl1Node.getName())) {
assertEquals(3, lvl1Node.countDescendants());
Collection<HierarchyNode> level2 = lvl1Node.getChildren();
assertNotNull(level2);
assertEquals(2, level2.size());
for (HierarchyNode lvl2Node : level2) {
if ("Baklava".equals(lvl2Node.getName())) continue;
if ("Fruit".equals(lvl2Node.getName())) continue;
else fail("Unexpected node under Comestibles: " + lvl2Node.getName());
}
}
else if ("Liquid".equals(lvl1Node.getName())) {
assertEquals(2, lvl1Node.countDescendants());
Collection<HierarchyNode> level2 = lvl1Node.getChildren();
assertNotNull(level2);
assertEquals(1, level2.size());
for (HierarchyNode lvl2Node : level2) {
if ("Water".equals(lvl2Node.getName())) continue;
else fail("Unexpected node under Liquid: " + lvl2Node.getName());
}
}
}
}
public void testDirSuffix() { //allow dir with subpages to have a different suffix from related page
FilepathHierarchy tester = new MindtouchHierarchy();
File dir = new File("sampleData/mindtouch/junit_resources/links");
assertTrue(dir.isDirectory() && dir.exists());
tester.clearRootNode();
Properties properties = tester.getProperties();
properties.put("filepath-hierarchy-ignorable-ancestors", "sampleData/mindtouch/junit_resources/links");
properties.put("filepath-hierarchy-matchpagename", "false"); //opt-out (matches to filename)
Vector<Page> pages = getDirSuffixPages(dir);
HierarchyNode root = tester.buildHierarchy(pages);
assertNotNull(root);
assertEquals(6, root.countDescendants());
Collection<HierarchyNode> level1 = root.getChildren();
assertNotNull(level1);
assertEquals(1, level1.size());
for (HierarchyNode lvl1Node : level1) {
assertNotNull(lvl1Node);
if (lvl1Node.getName().endsWith("_subpages")) fail("Still have subpages dir node.");
assertEquals(5, lvl1Node.countDescendants());
Collection<HierarchyNode> level2 = lvl1Node.getChildren();
assertNotNull(level2);
assertEquals(1, level2.size());
for (HierarchyNode lvl2Node : level2) {
if (lvl2Node.getName().endsWith("_subpages")) fail("Still have subpages dir node.");
Collection<HierarchyNode> level3 = lvl2Node.getChildren();
assertNotNull(level3);
assertEquals(3, level3.size());
}
}
}
private Vector<Page> getDirSuffixPages(File dir) {
Vector<Page> pages = new Vector<Page>();
if (dir.isFile()) {
Page page = new Page(dir);
String name = dir.getName().replaceFirst("\\.xml$", "");
name = name.replaceFirst("^\\d+_", "");
page.setName(name);
page.setPath(dir.getPath().replaceFirst("[^\\/]*$", ""));
pages.add(page);
}
File[] files = dir.listFiles(new NoSvnFilter());
if (files == null) return pages;
for (File file : files) {
pages.addAll(getDirSuffixPages(file));
}
return pages;
}
public void testJustRelativeRoot() {
File root = new File("sampleData/hierarchy/basic");
assertTrue(root.exists());
Vector<Page> inputPages = new Vector<Page>();
buildPages(root, inputPages);
HierarchyNode actual = tester.buildHierarchy(inputPages);
assertNotNull(actual); //root node
assertNull(actual.getName());
assertNull(actual.getPage());
assertNull(actual.getParent());
assertNotNull(actual.getChildren());
Collection<HierarchyNode> level1ChildSet = actual.getChildren();
assertEquals(1, level1ChildSet.size());
assertEquals("sampleData.txt", level1ChildSet.iterator().next().getName());
actual = null;
tester.clearRootNode();
Properties properties = tester.getProperties();
properties.put("filepath-hierarchy-ignorable-ancestors", "sampleData/hierarchy");
actual = tester.buildHierarchy(inputPages);
assertNotNull(actual); //root node
level1ChildSet = actual.getChildren();
assertEquals(1, level1ChildSet.size());
assertEquals("basic.txt", level1ChildSet.iterator().next().getName());
}
public void testRemovePrefix() {
String input, expected, actual;
input = "sampleData/hierarchy/basic/Water.txt";
String prefix = "sampleData/hierarchy";
expected = "basic/Water.txt";
actual = tester.removePrefix(input, prefix, File.separator);
assertNotNull(actual);
assertEquals(expected, actual);
input = "Z:\\laura On My Mac\\Code\\Subversion\\uwc-current\\devel\\sampleData\\hierarchy\\basic\\Water.txt";
prefix = "Z:\\laura On My Mac\\Code\\Subversion\\uwc-current\\devel\\sampleData\\hierarchy";
expected = "basic\\Water.txt";
actual = tester.removePrefix(input, prefix, "\\"); //Windows test
assertNotNull(actual);
assertEquals(expected, actual);
}
private void testWaterNode(HierarchyNode waterNode, Page waterPage, HierarchyNode parent) {
testNode(waterNode, "Water.txt", waterPage, parent);
if (waterNode.getChildren() != null) assertTrue(waterNode.getChildren().isEmpty());
else assertNull(waterNode.getChildren());
}
private void testNode(HierarchyNode node, String name, Page page, HierarchyNode parent) {
assertNotNull(node);
log.debug("testing node: " + name);
assertEquals("name test", name, node.getName());
assertEquals("page test", page, node.getPage());
assertEquals("parent test", parent, node.getParent());
}
//original filename should match original directory name (minus extension) for purposes of location
public void testCorrectPagename() {
Collection<Page> pages = new LinkedList<Page>();
Page root = new Page(new File("sampleData/hierarchy/filepath-origfilename/test1/Main_Page.txt"));
Page child1 = new Page(new File("sampleData/hierarchy/filepath-origfilename/test1/Main_Page/abc.txt"));
Page child2 = new Page(new File("sampleData/hierarchy/filepath-origfilename/test1/Main_Page/foo.txt"));
root.setName("Root");
child1.setName("Child abc");
child2.setName("Child Foo");
root.setPath(getEnginePath(root.getFile().getPath()));
child1.setPath(getEnginePath(child1.getFile().getPath()));
child2.setPath(getEnginePath(child2.getFile().getPath()));
pages.add(root);
pages.add(child1);
pages.add(child2);
Properties properties = tester.getProperties();
properties.put("filepath-hierarchy-ignorable-ancestors", "sampleData/hierarchy/filepath-origfilename/test1/");
properties.put("filepath-hierarchy-matchpagename", "true"); //default
HierarchyNode rootnode = tester.buildHierarchy(pages);
assertNull(rootnode.getPage());
Collection<HierarchyNode> actualrootnodeSet = rootnode.getChildren();
HierarchyNode actualRootNode = null;
for (HierarchyNode next : actualrootnodeSet) {
actualRootNode = next;
}
Page actualRoot = actualRootNode.getPage();
assertNotNull(actualRoot);
assertEquals("Root", actualRoot.getName());
Collection<HierarchyNode> children = actualRootNode.getChildren();
for (HierarchyNode childnode : children) {
Page childpage = childnode.getPage();
assertNotNull(childpage);
assertTrue("Child abc".equals(childpage.getName()) || "Child Foo".equals(childpage.getName()));
}
}
private String getEnginePath(String path) {
int fileNameStart = path.lastIndexOf(File.separator);
if (fileNameStart >= 0) {
path = path.substring(0, fileNameStart);
} else {
path = "";
}
return path;
}
}