PageRenderTime 39ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 1ms

/src/com/atlassian/uwc/converters/sharepoint/LinkConverterTest.java

https://bitbucket.org/atlassianlabs/universal-wiki-connector
Java | 482 lines | 413 code | 56 blank | 13 comment | 1 complexity | 5a4663ea5f83fb45ef80ed0996476ab9 MD5 | raw file
  1. package com.atlassian.uwc.converters.sharepoint;
  2. import java.io.File;
  3. import java.util.List;
  4. import java.util.Properties;
  5. import junit.framework.TestCase;
  6. import org.apache.log4j.Logger;
  7. import org.apache.log4j.PropertyConfigurator;
  8. import org.dom4j.Element;
  9. import org.dom4j.Node;
  10. import org.dom4j.Text;
  11. import com.atlassian.uwc.converters.sharepoint.LinkConverter.Link;
  12. import com.atlassian.uwc.ui.Page;
  13. public class LinkConverterTest extends TestCase {
  14. LinkConverter tester = null;
  15. Logger log = Logger.getLogger(this.getClass());
  16. protected void setUp() throws Exception {
  17. tester = new LinkConverter();
  18. PropertyConfigurator.configure("log4j.properties");
  19. }
  20. public void testConvertExternalLinks() {
  21. String input = "<html>" +
  22. "before <a href=\"http://www.google.com\">Google</a> after" +
  23. "</html>";
  24. String expected = "<html>before [Google|http://www.google.com] after</html>";
  25. String actual = tester.convertLinks(input);
  26. assertNotNull(actual);
  27. assertEquals(expected, actual);
  28. }
  29. public void testConvertInternalLinks() {
  30. //internal link
  31. String input = "<html>" +
  32. "<a href=\"/test%20wiki/Test%20Page%2042.aspx\">Test Page 42</a>" +
  33. "</html>";
  34. String expected = "<html>" + //FIXME
  35. "[Test Page 42|testwiki2:Test Page 42]" +
  36. "</html>";
  37. String actual = tester.convertLinks(input);
  38. assertNotNull(actual);
  39. assertEquals(expected, actual);
  40. }
  41. public void testGetNextReplacement() {
  42. String input = "<html>" +
  43. "<p>Some text " +
  44. "<a href=\"http://abc.com\">A link</a>" +
  45. "Some more text" +
  46. " Some <b>bold</b> text" +
  47. "A <b>" +
  48. "<a href=\"http://www.google.com\">" +
  49. "bold link" +
  50. "</a>" +
  51. "</b>" +
  52. "</p>" +
  53. "</html>";
  54. Element root = tester.getRootElement(input, false);
  55. String expected = "[A link|http://abc.com]";
  56. List actualList = tester.getNextReplacement(root);
  57. String actual = concatList(actualList);
  58. assertNotNull(actual);
  59. assertEquals(expected, actual);
  60. input = "<html>" +
  61. "<p>Some text " +
  62. "[A link|http://abc.com]" +
  63. "Some more text" +
  64. " Some <b>bold</b> text" +
  65. "A <b>" +
  66. "<a href=\"http://www.google.com\">" +
  67. "bold link" +
  68. "</a>" +
  69. "</b>" +
  70. "</p>" +
  71. "</html>";
  72. root = null;
  73. root = tester.getRootElement(input, false);
  74. expected = "[bold link|http://www.google.com]";
  75. actualList = tester.getNextReplacement(root);
  76. actual = concatList(actualList);
  77. assertNotNull(actual);
  78. assertEquals(expected, actual);
  79. input = "<html>" +
  80. "<p>Some text " +
  81. "[A link|http://abc.com]" +
  82. "Some more text" +
  83. " Some <b>bold</b> text" +
  84. "A <b>" +
  85. "[bold link|http://www.google.com]" +
  86. "</b>" +
  87. "</p>" +
  88. "</html>";
  89. root = tester.getRootElement(input, false);
  90. actualList = tester.getNextReplacement(root);
  91. assertNull(actualList);
  92. }
  93. public static String concatList(List actualList) {
  94. String output = "";
  95. for (int i = 0; i < actualList.size(); i++) {
  96. Node node = (Node) actualList.get(i);
  97. output += node.asXML();
  98. }
  99. return output;
  100. }
  101. public void testCreateInternalLink() {
  102. //internal
  103. String input = "/test%20wiki/How%20To%20Use%20This%20Wiki%20Library.aspx";
  104. String expected = "[test|testwiki2:How To Use This Wiki Library]";
  105. String alias = "test";
  106. String actual = tester.createLink(input, alias, "");
  107. assertNotNull(actual);
  108. assertEquals(expected, actual);
  109. //external
  110. input = "http://testing";
  111. expected = "[test|http://testing]";
  112. actual = tester.createLink(input, alias, null);
  113. assertNotNull(actual);
  114. assertEquals(expected, actual);
  115. //attachments
  116. String attdir = "http://testing";
  117. tester.setAttachmentDirectory(attdir);
  118. input = "/Shared%20Documents/certmemo.pdf";
  119. expected = "[test|" + attdir + input + "]";
  120. actual = tester.createLink(input, alias, "");
  121. assertNotNull(actual);
  122. assertEquals(expected, actual);
  123. //anchor
  124. input = "#";
  125. String name = "AnchorName";
  126. expected = "{anchor:" + name + "}";
  127. actual = tester.createLink(input, alias, name);
  128. assertNotNull(actual);
  129. assertEquals(expected, actual);
  130. //toanchor
  131. input = "#Lorem Ipsum 2";
  132. expected = "[test|" + input + "]";
  133. actual = tester.createLink(input, alias, "");
  134. assertNotNull(actual);
  135. assertEquals(expected, actual);
  136. }
  137. public void testGetLinkType() {
  138. //attachment
  139. String href = "/Shared%20Documents/certmemo.pdf";
  140. Link expected = LinkConverter.Link.ATTACHMENT;
  141. Link actual = tester.getLinkType(href, "");
  142. assertNotNull(actual);
  143. assertEquals(expected, actual);
  144. //anchor
  145. href = "#";
  146. String name = "AnchorName";
  147. expected = LinkConverter.Link.ANCHOR;
  148. actual = tester.getLinkType(href, name);
  149. assertNotNull(actual);
  150. assertEquals(expected, actual);
  151. //toanchor
  152. href = "#Lorem Ipsum 2";
  153. expected = LinkConverter.Link.TO_ANCHOR;
  154. actual = tester.getLinkType(href, null);
  155. assertNotNull(actual);
  156. assertEquals(expected, actual);
  157. //external
  158. href = "http://www.google.com";
  159. expected = LinkConverter.Link.EXTERNAL;
  160. actual = tester.getLinkType(href, "");
  161. assertNotNull(actual);
  162. assertEquals(expected, actual);
  163. //wikipage
  164. href = "/my%20test%20wiki/Test%20Page%2072.aspx";
  165. expected = LinkConverter.Link.WIKIPAGE;
  166. actual = tester.getLinkType(href, null);
  167. assertNotNull(actual);
  168. assertEquals(expected, actual);
  169. }
  170. public void testGetAttachmentLink() {
  171. String attdir = "http://testing";
  172. tester.setAttachmentDirectory(attdir);
  173. String input = "/Shared%20Documents/certmemo.pdf";
  174. String expected = attdir + input;
  175. String actual = tester.getAttachmentLink(input);
  176. assertNotNull(actual);
  177. assertEquals(expected, actual);
  178. attdir = "http://testing/";
  179. tester.setAttachmentDirectory(attdir);
  180. actual = tester.getAttachmentLink(input);
  181. assertNotNull(actual);
  182. assertEquals(expected, actual);
  183. input = "certmemo.pdf";
  184. expected = attdir + input;
  185. actual = tester.getAttachmentLink(input);
  186. assertNotNull(actual);
  187. assertEquals(expected, actual);
  188. attdir = "http://testing";
  189. tester.setAttachmentDirectory(attdir);
  190. actual = tester.getAttachmentLink(input);
  191. assertNotNull(actual);
  192. assertEquals(expected, actual);
  193. }
  194. public void testGetAnchorLink() {
  195. String aname = "AnchorName";
  196. String expected = "{anchor:" + aname + "}";
  197. Text actualText = tester.getAnchorLink(aname);
  198. assertNotNull(actualText);
  199. String actual = actualText.getText();
  200. assertNotNull(actual);
  201. assertEquals(expected, actual);
  202. }
  203. public void testGetWikiPageLink() {
  204. String input = "/test%20wiki/Test%20Page%2072.aspx";
  205. String expected = "testwiki2:Test Page 72";
  206. String actual = tester.getWikipageLink(input);
  207. assertNotNull(actual);
  208. assertEquals(expected, actual);
  209. }
  210. public void testConvertLinks2() {
  211. String input = "<html>For Link Testing. We\'re going to link to this from <a href=\"/test%20wiki/How%20To%20Use%20This%20Wiki%20Library.aspx\">another page</a>.\n" +
  212. "Here\'s an <a href=\"/Shared%20Documents/certmemo.pdf\">attachment</a>\n" +
  213. "And apparently, there\'s an internal link syntax too: [[Home]]</html>";
  214. tester.setAttachmentDirectory("");
  215. String expected = "<html>For Link Testing. We\'re going to link to this from " +
  216. "[another page|testwiki2:How To Use This Wiki Library]" +
  217. ".\n" +
  218. "Here\'s an " +
  219. "[attachment|/Shared%20Documents/certmemo.pdf]" +
  220. "\n" +
  221. "And apparently, there\'s an internal link syntax too: [[Home]]</html>";
  222. Page page = new Page(new File(""));
  223. page.setOriginalText(input);
  224. tester.convert(page);
  225. String actual = page.getConvertedText();
  226. assertNotNull(actual);
  227. assertEquals(expected, actual);
  228. input = "<html><font size=\"2\">\n" +
  229. "<a href=\"http://www.google.com\" title=\"Search Engine Extraordinaire\">\n" +
  230. "Google</a>\n" +
  231. "</font></html>";
  232. expected = "<html><font size=\"2\">\n" +
  233. "[Google|http://www.google.com]\n" +
  234. "</font></html>";
  235. actual = tester.convertLinks(input);
  236. assertNotNull(actual);
  237. assertEquals(expected, actual);
  238. }
  239. public void testRemoveJTidyNewlines() {
  240. String input = "<html>" +
  241. "<a href=\"http://www.google.com\" shape=\"rect\">Lorem Ipsum 2 in\n" +
  242. "page</a>" +
  243. "</html>";
  244. String expected = "<html>[Lorem Ipsum 2 in page|http://www.google.com]</html>";
  245. String actual = tester.convertLinks(input);
  246. assertNotNull(actual);
  247. assertEquals(expected, actual);
  248. }
  249. public void testConvertLinks3() {
  250. String input, expected, actual;
  251. input = "<html>" +
  252. "<font size=\"5\"><font size=\"2\">\n" +
  253. "<a id=\"Lorem Ipsum 2\" href=\"#\" name=\"Lorem Ipsum 2\" shape=\"rect\">(anchor here)\n" +
  254. "\n" +
  255. "<font size=\"5\"><font size=\"2\"><font size=\"7\">Lorem Ipsum 2</font>\n" +
  256. "</font></font></font></font>\n" +
  257. "</html>";
  258. expected = "<html>" +
  259. "<font size=\"5\"><font size=\"2\">\n" +
  260. "<a id=\"Lorem Ipsum 2\" href=\"#\" name=\"Lorem Ipsum 2\" shape=\"rect\"/>(anchor here)\n" +
  261. "\n" +
  262. "<font size=\"5\"><font size=\"2\"><font size=\"7\">Lorem Ipsum 2</font>\n" +
  263. "</font></font></font></font>\n" +
  264. "</html>";
  265. actual = tester.cleanUnclosedAnchorLinks(input);
  266. assertNotNull(actual);
  267. assertEquals(expected, actual);
  268. expected = "<html>" +
  269. "<font size=\"5\"><font size=\"2\">\n" +
  270. "{anchor:Lorem Ipsum 2} (anchor here)\n" +
  271. "\n" +
  272. "<font size=\"5\"><font size=\"2\"><font size=\"7\">Lorem Ipsum 2</font>\n" +
  273. "</font></font></font></font>\n" +
  274. "</html>";
  275. actual = tester.convertLinks(expected);
  276. assertNotNull(actual);
  277. assertEquals(expected, actual);
  278. }
  279. public void testConverLinks4() {
  280. String input, expected, actual;
  281. input = "<html><a id=\"OLE_LINK1\" name=\"OLE_LINK1\" shape=\"rect\"/></html>";
  282. expected = "<html>{anchor:OLE_LINK1}</html>";
  283. actual = tester.convertLinks(input);
  284. assertNotNull(actual);
  285. assertEquals(expected, actual);
  286. }
  287. public void testConvertLinks5() { //font effects in link alias have to be moved outside the link
  288. String input = "<html>\n" +
  289. "<font face=\"Arial\">*_xxxxxx_*xxxxxx</font>" +
  290. "<a href=\"xxxxxx\" shape=\"rect\">" +
  291. "<font face=\"Arial\">xxxxxx</font>" +
  292. "</a>\n" +
  293. "</html>";
  294. String expected = "<html>\n" +
  295. "<font face=\"Arial\">*_xxxxxx_*xxxxxx</font>" +
  296. "<font face=\"Arial\">" +
  297. "[xxxxxx|/xxxxxx]" +
  298. "</font>\n" +
  299. "</html>";
  300. String actual = tester.convertLinks(input);
  301. assertNotNull(actual);
  302. assertEquals(expected, actual);
  303. }
  304. public void testConvertLinks6() { //using an image as a link alias
  305. String input = "<html>\n" +
  306. "<a href=\"http://abc.com\" shape=\"rect\">" +
  307. "<img src=\"image.jpg\" align=\"center\"/>" +
  308. "</a>\n" +
  309. "</html>";
  310. String expected = "<html>\n" +
  311. "[<img src=\"image.jpg\" align=\"center\"/>|" +
  312. "http://abc.com]\n" +
  313. "</html>";
  314. String actual = tester.convertLinks(input);
  315. assertNotNull(actual);
  316. assertEquals(expected, actual);
  317. //and just to double check
  318. SimpleImageConverter imager = new SimpleImageConverter();
  319. imager.setAttachmentDirectory("http://images.com/");
  320. input = actual;
  321. expected = "<html>\n" +
  322. "[!http://images.com/image.jpg|align=\"center\"!|" +
  323. "http://abc.com]\n" +
  324. "</html>";
  325. actual = imager.convertImages(input);
  326. assertNotNull(actual);
  327. assertEquals(expected, actual);
  328. }
  329. public void testConvertLinks7() {
  330. String input, expected, actual;
  331. input = "<html><a class=\"ms-wikilink\" href=\"/test%20wiki/Page%20With%20Bad%20;Char.aspx\" shape=\"rect\">Page With Bad ;Char</a></html>";
  332. expected = "<html>[Page With Bad Char|testwiki2:Page With Bad Char]</html>";
  333. actual = tester.convertLinks(input);
  334. assertNotNull(actual);
  335. assertEquals(expected, actual);
  336. }
  337. public void testExtractElement() {
  338. String input = "<html><a href=\"abc\"><font att=\"val\">abcdef</font></a></html>";
  339. String expected = "<html><font att=\"val\"><a href=\"abc\">abcdef</a></font></html>";
  340. Element root = tester.getRootElement(input, false);
  341. Element el = root.element("a").element("font");
  342. tester.extractElement(el);
  343. String actual = root.asXML();
  344. assertNotNull(actual);
  345. assertEquals(expected, actual);
  346. }
  347. public void testMailToLinks() {
  348. String input, expected, actual;
  349. input = "<html>\n" +
  350. "<a href=\"mailto:a@b.com\">a@b.com</a>\n" +
  351. "</html>";
  352. expected = "<html>\n" +
  353. "[a@b.com|mailto:a@b.com]\n" +
  354. "</html>";
  355. actual = tester.convertLinks(input);
  356. assertNotNull(actual);
  357. assertEquals(expected, actual);
  358. input = "<html>\n" +
  359. "<a href=\"mailto:a@b.com\" shape=\"rect\"><span style=\"FONT-WEIGHT: normal\">" +
  360. "<a href=\"mailto:a@b.com\" shape=\"rect\"><font face=\"Trebuchet MS\" size=\"2\">" +
  361. "a@b.com</font></a></span></a>\n" +
  362. "</html>";
  363. actual = tester.convertLinks(input);
  364. assertNotNull(actual);
  365. assertEquals(expected, actual);
  366. input = "<html>\n" +
  367. "<span>" +
  368. "<font face=\"trebuchet ms\" size=\"2\">" +
  369. "lars oscarsson at" +
  370. "</font>" +
  371. "<a href=\"mailto:lars.oscarsson@bonver.com\" shape=\"rect\">" +
  372. "<span style=\"font-weight: normal\">" +
  373. "<a href=\"mailto:lars.oscarsson@bonver.com\" shape=\"rect\">" +
  374. "<font face=\"trebuchet ms\" size=\"2\">" +
  375. "lars.oscarsson@bonver.com" +
  376. "</font>" +
  377. "</a>" +
  378. "</span>" +
  379. "</a>" +
  380. "</span>\n" +
  381. "</html>";
  382. expected = "<html>\n" +
  383. "<span>" +
  384. "<font face=\"trebuchet ms\" size=\"2\">" +
  385. "lars oscarsson at" +
  386. "</font>" +
  387. " [lars.oscarsson@bonver.com|mailto:lars.oscarsson@bonver.com]" +
  388. "</span>\n" +
  389. "</html>";
  390. actual = tester.convertLinks(input);
  391. assertNotNull(actual);
  392. assertEquals(expected, actual);
  393. input = "<html>" +
  394. "<a href=\"mailto:Colin_Perren@paramount.com\" shape=\"rect\">" +
  395. "<font face=\"Trebuchet MS\" size=\"2\">Colin_Perren@paramount.com</font></a>" +
  396. "</html>";
  397. expected = "<html>" +
  398. "<font face=\"Trebuchet MS\" size=\"2\">" +
  399. "[Colin_Perren@paramount.com|mailto:Colin_Perren@paramount.com]" +
  400. "</font>" +
  401. "</html>";
  402. actual = tester.convertLinks(input);
  403. assertNotNull(actual);
  404. assertEquals(expected, actual);
  405. input = "Abc Def at<span>[abc.com|mailto:abc@def.com]</span>";
  406. expected = "Abc Def at<span> [abc.com|mailto:abc@def.com]</span>";
  407. actual = tester.addWSAsNecessary(input);
  408. assertNotNull(actual);
  409. assertEquals(expected, actual);
  410. }
  411. public void testOptOutAutoSpaces() {
  412. Properties props = new Properties();
  413. props.setProperty("links-samespace", "true");
  414. tester.setProperties(props);
  415. //internal link
  416. String input = "<html>" +
  417. "<a href=\"/test%20wiki/Test%20Page%2042.aspx\">Test Page 42</a>" +
  418. "</html>";
  419. String expected = "<html>" + //FIXME
  420. "[Test Page 42|Test Page 42]" +
  421. "</html>";
  422. String actual = tester.convertLinks(input);
  423. assertNotNull(actual);
  424. assertEquals(expected, actual);
  425. }
  426. }