PageRenderTime 40ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/src/fitnesse/wiki/FileSystemPageTest.java

https://github.com/goneflyin/fitnesse
Java | 275 lines | 239 code | 34 blank | 2 comment | 4 complexity | 186d0fe0ef2652b1b209a6052f25fb92 MD5 | raw file
  1. // Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
  2. // Released under the terms of the CPL Common Public License version 1.0.
  3. package fitnesse.wiki;
  4. import fitnesse.revisioncontrol.NullRevisionController;
  5. import fitnesse.util.FileUtil;
  6. import org.junit.After;
  7. import static org.junit.Assert.*;
  8. import org.junit.Before;
  9. import org.junit.Test;
  10. import org.junit.BeforeClass;
  11. import java.io.File;
  12. import java.util.ArrayList;
  13. import java.util.Date;
  14. import java.util.Iterator;
  15. import java.util.List;
  16. public class FileSystemPageTest {
  17. private static final String defaultPath = "./teststorage";
  18. private static final File base = new File(defaultPath);
  19. private FileSystemPage root;
  20. private PageCrawler crawler;
  21. private static List<String> cmMethodCalls = new ArrayList<String>();
  22. @BeforeClass
  23. public static void initialize() {
  24. FileUtil.deleteFileSystemDirectory(base);
  25. FileUtil.deleteFileSystemDirectory("RooT");
  26. }
  27. @Before
  28. public void setUp() throws Exception {
  29. cmMethodCalls.clear();
  30. FileUtil.deleteFileSystemDirectory(base);
  31. createFileSystemDirectory(base);
  32. root = (FileSystemPage) FileSystemPage.makeRoot(defaultPath, "RooT", new NullRevisionController());
  33. crawler = root.getPageCrawler();
  34. }
  35. @After
  36. public void tearDown() throws Exception {
  37. FileUtil.deleteFileSystemDirectory(base);
  38. FileUtil.deleteFileSystemDirectory("RooT");
  39. }
  40. public static void createFileSystemDirectory(File current) {
  41. current.mkdir();
  42. }
  43. @Test
  44. public void testCreateBase() throws Exception {
  45. FileSystemPage levelA = (FileSystemPage) crawler.addPage(root, PathParser.parse("PageA"), "");
  46. assertEquals("./teststorage/RooT/PageA", levelA.getFileSystemPath());
  47. assertTrue(new File(defaultPath + "/RooT/PageA").exists());
  48. }
  49. @Test
  50. public void testTwoLevel() throws Exception {
  51. WikiPage levelA = crawler.addPage(root, PathParser.parse("PageA"));
  52. crawler.addPage(levelA, PathParser.parse("PageB"));
  53. assertTrue(new File(defaultPath + "/RooT/PageA/PageB").exists());
  54. }
  55. @Test
  56. public void testContent() throws Exception {
  57. WikiPagePath rootPath = PathParser.parse("root");
  58. assertEquals("", crawler.getPage(root, rootPath).getData().getContent());
  59. crawler.addPage(root, PathParser.parse("AaAa"), "A content");
  60. assertEquals("A content", root.getChildPage("AaAa").getData().getContent());
  61. WikiPagePath bPath = PathParser.parse("AaAa.BbBb");
  62. crawler.addPage(root, bPath, "B content");
  63. assertEquals("B content", crawler.getPage(root, bPath).getData().getContent());
  64. }
  65. @Test
  66. public void testBigContent() throws Exception {
  67. StringBuffer buffer = new StringBuffer();
  68. for (int i = 0; i < 1000; i++)
  69. buffer.append("abcdefghijklmnopqrstuvwxyz");
  70. crawler.addPage(root, PathParser.parse("BigPage"), buffer.toString());
  71. String content = root.getChildPage("BigPage").getData().getContent();
  72. assertTrue(buffer.toString().equals(content));
  73. }
  74. @Test
  75. public void testPageExists() throws Exception {
  76. crawler.addPage(root, PathParser.parse("AaAa"), "A content");
  77. assertTrue(root.hasChildPage("AaAa"));
  78. }
  79. @Test
  80. public void testGetChidren() throws Exception {
  81. crawler.addPage(root, PathParser.parse("AaAa"), "A content");
  82. crawler.addPage(root, PathParser.parse("BbBb"), "B content");
  83. crawler.addPage(root, PathParser.parse("CcCc"), "C content");
  84. new File(defaultPath + "/root/someOtherDir").mkdir();
  85. List<?> children = root.getChildren();
  86. assertEquals(3, children.size());
  87. for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) {
  88. WikiPage child = (WikiPage) iterator.next();
  89. String name = child.getName();
  90. boolean isOk = "AaAa".equals(name) || "BbBb".equals(name) || "CcCc".equals(name);
  91. assertTrue("WikiPAge is not a valid one: " + name, isOk);
  92. }
  93. }
  94. @Test
  95. public void testRemovePage() throws Exception {
  96. WikiPage levelOne = crawler.addPage(root, PathParser.parse("LevelOne"));
  97. crawler.addPage(levelOne, PathParser.parse("LevelTwo"));
  98. levelOne.removeChildPage("LevelTwo");
  99. File fileOne = new File(defaultPath + "/RooT/LevelOne");
  100. File fileTwo = new File(defaultPath + "/RooT/LevelOne/LevelTwo");
  101. assertTrue(fileOne.exists());
  102. assertFalse(fileTwo.exists());
  103. }
  104. @Test
  105. public void testDelTree() throws Exception {
  106. WikiPage levelOne = crawler.addPage(root, PathParser.parse("LevelOne"));
  107. crawler.addPage(levelOne, PathParser.parse("LevelTwo"));
  108. File childOne = new File(defaultPath + "/RooT/LevelOne");
  109. File childTwo = new File(defaultPath + "/RooT/LevelOne/LevelTwo");
  110. assertTrue(childOne.exists());
  111. root.removeChildPage("LevelOne");
  112. assertFalse(childTwo.exists());
  113. assertFalse(childOne.exists());
  114. }
  115. @Test
  116. public void testDefaultAttributes() throws Exception {
  117. WikiPage page = crawler.addPage(root, PathParser.parse("PageOne"), "something");
  118. assertTrue(page.getData().hasAttribute("Edit"));
  119. assertTrue(page.getData().hasAttribute("Search"));
  120. assertFalse(page.getData().hasAttribute("Test"));
  121. assertFalse(page.getData().hasAttribute("TestSuite"));
  122. }
  123. @Test
  124. public void testPersistentAttributes() throws Exception {
  125. crawler.addPage(root, PathParser.parse("FrontPage"));
  126. WikiPage createdPage = root.getChildPage("FrontPage");
  127. PageData data = createdPage.getData();
  128. data.setAttribute("Test", "true");
  129. data.setAttribute("Search", "true");
  130. createdPage.commit(data);
  131. assertTrue(data.hasAttribute("Test"));
  132. assertTrue(data.hasAttribute("Search"));
  133. WikiPage page = root.getChildPage("FrontPage");
  134. assertTrue(page.getData().hasAttribute("Test"));
  135. assertTrue(page.getData().hasAttribute("Search"));
  136. }
  137. @Test
  138. public void testCachedInfo() throws Exception {
  139. WikiPage page1 = crawler.addPage(root, PathParser.parse("PageOne"), "page one");
  140. WikiPage child1 = crawler.addPage(page1, PathParser.parse("ChildOne"), "child one");
  141. WikiPage child = page1.getChildPage("ChildOne");
  142. assertSame(child1, child);
  143. }
  144. @Test
  145. public void testCanFindExistingPages() throws Exception {
  146. crawler.addPage(root, PathParser.parse("FrontPage"), "front page");
  147. WikiPage newRoot = FileSystemPage.makeRoot(defaultPath, "RooT");
  148. assertNotNull(newRoot.getChildPage("FrontPage"));
  149. }
  150. @Test
  151. public void testGetPath() throws Exception {
  152. assertEquals(defaultPath + "/RooT", root.getFileSystemPath());
  153. }
  154. @Test
  155. public void testLastModifiedTime() throws Exception {
  156. WikiPage page = crawler.addPage(root, PathParser.parse("SomePage"), "some text");
  157. page.commit(page.getData());
  158. Date now = new Date();
  159. Date lastModified = page.getData().getProperties().getLastModificationTime();
  160. assertTrue(now.getTime() - lastModified.getTime() <= 5000);
  161. }
  162. @Test
  163. public void testUnicodeCharacters() throws Exception {
  164. WikiPage page = crawler.addPage(root, PathParser.parse("SomePage"), "\uba80\uba81\uba82\uba83");
  165. PageData data = page.getData();
  166. assertEquals("\uba80\uba81\uba82\uba83", data.getContent());
  167. }
  168. @Test
  169. public void testLoadChildrenWhenPageIsDeletedManualy() throws Exception {
  170. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"));
  171. page.getChildren();
  172. FileUtil.deleteFileSystemDirectory(((FileSystemPage) page).getFileSystemPath());
  173. try {
  174. page.getChildren();
  175. } catch (Exception e) {
  176. fail("No Exception should be thrown");
  177. }
  178. }
  179. public static void cmUpdate(String file, String payload) {
  180. cmMethodCalls.add(String.format("update %s|%s", file, payload));
  181. }
  182. public static void cmEdit(String file, String payload) {
  183. cmMethodCalls.add(String.format("edit %s|%s", file, payload));
  184. }
  185. public static void cmDelete(String file, String payload) {
  186. cmMethodCalls.add(String.format("delete %s|%s", file, payload));
  187. }
  188. @Test
  189. public void cmPluginNotCalledIfBlank() throws Exception {
  190. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"), "!define CM_SYSTEM {}");
  191. cmMethodCalls.clear();
  192. page.addChildPage("CreatedPage");
  193. assertEquals(0, cmMethodCalls.size());
  194. }
  195. @Test
  196. public void cmPluginCalledForCreate() throws Exception {
  197. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"), "!define CM_SYSTEM {fitnesse.wiki.FileSystemPageTest xxx}");
  198. cmMethodCalls.clear();
  199. page.addChildPage("CreatedPage");
  200. assertEquals(1, cmMethodCalls.size());
  201. assertEquals("update " + defaultPath + "/RooT/TestPage/CreatedPage|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(0));
  202. }
  203. @Test
  204. public void cmPluginCalledIfNoPayload() throws Exception {
  205. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"), "!define CM_SYSTEM {fitnesse.wiki.FileSystemPageTest}");
  206. cmMethodCalls.clear();
  207. page.addChildPage("CreatedPage");
  208. assertEquals("update " + defaultPath + "/RooT/TestPage/CreatedPage|fitnesse.wiki.FileSystemPageTest", cmMethodCalls.get(0));
  209. assertEquals(1, cmMethodCalls.size());
  210. }
  211. @Test
  212. public void cmPluginEditAndUpdateCalledForReWrite() throws Exception {
  213. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"), "!define CM_SYSTEM {fitnesse.wiki.FileSystemPageTest xxx}");
  214. cmMethodCalls.clear();
  215. page.commit(page.getData());
  216. assertEquals(4, cmMethodCalls.size());
  217. assertEquals("edit " + defaultPath + "/RooT/TestPage/content.txt|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(0));
  218. assertEquals("update " + defaultPath + "/RooT/TestPage/content.txt|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(1));
  219. assertEquals("edit " + defaultPath + "/RooT/TestPage/properties.xml|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(2));
  220. assertEquals("update " + defaultPath + "/RooT/TestPage/properties.xml|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(3));
  221. }
  222. @Test
  223. public void cmPluginEditNotCalledIfNewPage() throws Exception {
  224. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"), "!define CM_SYSTEM {fitnesse.wiki.FileSystemPageTest xxx}");
  225. cmMethodCalls.clear();
  226. crawler.addPage(page, PathParser.parse("NewPage"),"raw content");
  227. assertEquals("update " + defaultPath + "/RooT/TestPage/NewPage|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(0));
  228. assertEquals("update " + defaultPath + "/RooT/TestPage/NewPage/content.txt|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(1));
  229. assertEquals("update " + defaultPath + "/RooT/TestPage/NewPage/properties.xml|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(2));
  230. assertEquals(3, cmMethodCalls.size());
  231. }
  232. @Test
  233. public void cmPluginCalledForDelete() throws Exception {
  234. WikiPage page = crawler.addPage(root, PathParser.parse("TestPage"), "!define CM_SYSTEM {fitnesse.wiki.FileSystemPageTest xxx}");
  235. page.addChildPage("CreatedPage");
  236. cmMethodCalls.clear();
  237. page.removeChildPage("CreatedPage");
  238. assertEquals(1, cmMethodCalls.size());
  239. assertEquals("delete " + defaultPath + "/RooT/TestPage/CreatedPage|fitnesse.wiki.FileSystemPageTest xxx", cmMethodCalls.get(0));
  240. }
  241. }