/src/com/atlassian/uwc/hierarchies/FilenameHierarchyTest.java

https://bitbucket.org/atlassianlabs/universal-wiki-connector · Java · 252 lines · 200 code · 50 blank · 2 comment · 16 complexity · 374400f1c270927f6ffc58be0e3fd957 MD5 · raw file

  1. package com.atlassian.uwc.hierarchies;
  2. import java.io.File;
  3. import java.util.Collection;
  4. import java.util.Properties;
  5. import java.util.Vector;
  6. import junit.framework.TestCase;
  7. import org.apache.log4j.Logger;
  8. import org.apache.log4j.PropertyConfigurator;
  9. import com.atlassian.uwc.filters.NoSvnFilter;
  10. import com.atlassian.uwc.ui.Page;
  11. //NOTE: a valid set of pages for testing will need a valid file associated with that page node
  12. public class FilenameHierarchyTest extends TestCase {
  13. FilenameHierarchy tester = null;
  14. private final String SAMPLEDIR_SIMPLE = "sampleData/hierarchy/filename/simple";
  15. private final String SAMPLEDIR_ENCODED = "sampleData/hierarchy/filename/urlencoded";
  16. Logger log = Logger.getLogger(this.getClass());
  17. Vector<Page> pages = null;
  18. Properties props = null;
  19. protected void setUp() throws Exception {
  20. tester = new FilenameHierarchy();
  21. PropertyConfigurator.configure("log4j.properties");
  22. pages = new Vector<Page>();
  23. props = new Properties();
  24. props.setProperty(FilenameHierarchy.PROPKEY_DELIM, "%2F");
  25. tester.setProperties(props);
  26. }
  27. public void testBuildHierarchy_OnePage_OneNode() {
  28. addOnePageToList(SAMPLEDIR_SIMPLE + File.separator + "Root");
  29. HierarchyNode actual = tester.buildHierarchy(pages);
  30. assertNotNull(actual);
  31. Collection<HierarchyNode> nodes = actual.getChildren();
  32. assertNotNull(nodes);
  33. assertEquals(1, nodes.size());
  34. for (HierarchyNode root : nodes) {
  35. assertEquals("Root", root.getName());
  36. Page rootpage = root.getPage();
  37. assertNotNull(rootpage);
  38. assertNotNull(rootpage.getName());
  39. assertEquals("Root", rootpage.getName());
  40. assertTrue(root.getChildren().isEmpty());
  41. }
  42. }
  43. public void testBuildHierarchy_OnePage_TwoNodes() {
  44. addOnePageToList(SAMPLEDIR_SIMPLE + File.separator + "Root%2FLeaf");
  45. HierarchyNode actual = tester.buildHierarchy(pages);
  46. assertNotNull(actual);
  47. Collection<HierarchyNode> nodes = actual.getChildren();
  48. assertNotNull(nodes);
  49. assertEquals(1, nodes.size());
  50. for (HierarchyNode root : nodes) {
  51. assertEquals("Root", root.getName());
  52. assertNull(root.getPage()); //cause we only had the leaf page
  53. Vector<HierarchyNode> children = asVector(root.getChildren());
  54. assertEquals(1, children.size());
  55. HierarchyNode child = children.get(0);
  56. assertEquals("Leaf", child.getName());
  57. Page childpage = child.getPage();
  58. assertNotNull(childpage);
  59. assertEquals("Leaf", childpage.getName());
  60. assertTrue(child.getChildren().isEmpty());
  61. }
  62. }
  63. public void testBuildHierarchy_OnePage_ThreeNodes() {
  64. addOnePageToList(SAMPLEDIR_SIMPLE + File.separator + "Root%2FBranch%2FChild");
  65. HierarchyNode actual = tester.buildHierarchy(pages);
  66. assertNotNull(actual);
  67. Collection<HierarchyNode> nodes = actual.getChildren();
  68. assertNotNull(nodes);
  69. assertEquals(1, nodes.size());
  70. for (HierarchyNode root : nodes) {
  71. assertEquals("Root", root.getName());
  72. assertNull(root.getPage());
  73. Vector<HierarchyNode> children = asVector(root.getChildren());
  74. assertEquals(1, children.size());
  75. HierarchyNode child = children.get(0);
  76. assertEquals("Branch", child.getName());
  77. assertNull(child.getPage());
  78. Vector<HierarchyNode> gchildren = asVector(child.getChildren());
  79. assertEquals(1, gchildren.size());
  80. HierarchyNode leaf = gchildren.get(0);
  81. assertEquals("Child", leaf.getName());
  82. Page leafpage = leaf.getPage();
  83. assertNotNull(leafpage);
  84. assertEquals("Child", leafpage.getName());
  85. assertTrue(leaf.getChildren().isEmpty());
  86. }
  87. }
  88. public void testBuildHierarchy_TwoPages() {
  89. addOnePageToList(SAMPLEDIR_SIMPLE + File.separator + "Root%2FLeaf");
  90. addOnePageToList(SAMPLEDIR_SIMPLE + File.separator + "Root");
  91. HierarchyNode actual = tester.buildHierarchy(pages);
  92. assertNotNull(actual);
  93. Collection<HierarchyNode> nodes = actual.getChildren();
  94. assertNotNull(nodes);
  95. assertEquals(1, nodes.size());
  96. for (HierarchyNode root : nodes) {
  97. assertEquals("Root", root.getName());
  98. Page rootpage = root.getPage();
  99. assertNotNull(rootpage);
  100. assertEquals("Root", rootpage.getName());
  101. Vector<HierarchyNode> children = asVector(root.getChildren());
  102. assertEquals(1, children.size());
  103. HierarchyNode child = children.get(0);
  104. assertEquals("Leaf", child.getName());
  105. Page childpage = child.getPage();
  106. assertNotNull(childpage);
  107. assertEquals("Leaf", childpage.getName());
  108. assertTrue(child.getChildren().isEmpty());
  109. }
  110. }
  111. public void testBuildHierarchy_Simple() {
  112. File dir = new File(SAMPLEDIR_SIMPLE);
  113. File[] listFiles = dir.listFiles(new NoSvnFilter());
  114. assertEquals(4, listFiles.length);
  115. for (File file : listFiles) {
  116. pages.add(new Page(file));
  117. }
  118. HierarchyNode actual = tester.buildHierarchy(pages);
  119. assertNotNull(actual);
  120. Vector<HierarchyNode> nodes = asVector(actual.getChildren());
  121. assertNotNull(nodes);
  122. assertEquals(1, nodes.size());
  123. HierarchyNode root = nodes.get(0);
  124. assertNotNull(root.getPage());
  125. assertEquals("Root", root.getName());
  126. assertEquals("Root", root.getPage().getName());
  127. Vector<HierarchyNode> nodes2 = asVector(root.getChildren());
  128. assertNotNull(nodes2);
  129. assertEquals(2, nodes2.size());
  130. int branchindex = (nodes2.get(0).getName().startsWith("B"))?0:1; //we do this 'cause Sets aren't predictable
  131. int leafindex = branchindex == 0?1:0;
  132. HierarchyNode branch = nodes2.get(branchindex);
  133. HierarchyNode leaf = nodes2.get(leafindex);
  134. assertNotNull(leaf.getPage());
  135. assertEquals("Leaf", leaf.getName());
  136. assertEquals("Leaf", leaf.getPage().getName());
  137. assertTrue(leaf.getChildren().isEmpty());
  138. assertNotNull(branch.getPage());
  139. assertEquals("Branch", branch.getName());
  140. assertEquals("Branch", branch.getPage().getName());
  141. Vector<HierarchyNode> nodes3 = asVector(branch.getChildren());
  142. assertNotNull(nodes3);
  143. assertEquals(1, nodes3.size());
  144. HierarchyNode child = nodes3.get(0);
  145. assertNotNull(child.getPage());
  146. assertEquals("Child", child.getName());
  147. assertEquals("Child", child.getPage().getName());
  148. assertTrue(child.getChildren().isEmpty());
  149. }
  150. public void testBuildHierarchy_UrlEncoded() {
  151. File dir = new File(SAMPLEDIR_ENCODED);
  152. File[] listFiles = dir.listFiles(new NoSvnFilter());
  153. assertEquals(5, listFiles.length);
  154. for (File file : listFiles) {
  155. pages.add(new Page(file));
  156. }
  157. HierarchyNode actual = tester.buildHierarchy(pages);
  158. assertNotNull(actual);
  159. Vector<HierarchyNode> nodes = asVector(actual.getChildren());
  160. assertNotNull(nodes);
  161. assertEquals(1, nodes.size());
  162. HierarchyNode root = nodes.get(0);
  163. assertNotNull(root.getPage());
  164. assertEquals("Parent", root.getName());
  165. assertEquals("Parent", root.getPage().getName());
  166. Vector<HierarchyNode> nodes2 = asVector(root.getChildren());
  167. assertNotNull(nodes2);
  168. assertEquals(4, nodes2.size());
  169. for (HierarchyNode node: nodes2) {
  170. assertNotNull(node.getPage());
  171. assertTrue(node.getChildren().isEmpty());
  172. String exp = null;
  173. if (node.getName().endsWith("Foo")) {
  174. exp = "Child Foo";
  175. }
  176. else if (node.getName().endsWith("Bar")) {
  177. exp = "Child,Bar";
  178. }
  179. else if (node.getName().endsWith("Baz")) {
  180. exp = "Child'Baz";
  181. }
  182. else if (node.getName().endsWith("Xyz")) {
  183. exp = "Child&Xyz";
  184. }
  185. else fail("Wrong Node name: " + exp);
  186. assertEquals(exp, node.getName());
  187. assertEquals(exp, node.getPage().getName());
  188. }
  189. }
  190. // helper methods
  191. private void addOnePageToList(String path) {
  192. File file = new File(path);
  193. assertTrue(file.exists());
  194. Page page = new Page(file);
  195. pages.add(page);
  196. }
  197. private Vector<HierarchyNode> asVector(Collection<HierarchyNode> children) {
  198. Vector<HierarchyNode> nodes = new Vector<HierarchyNode>();
  199. nodes.addAll(children);
  200. return nodes;
  201. }
  202. }