/src/com/atlassian/uwc/converters/socialtext/SearchConverterTest.java

https://bitbucket.org/iTux/universal-wiki-converter · Java · 318 lines · 269 code · 47 blank · 2 comment · 0 complexity · 2de12a8ec618a240ef5052e573eb707e MD5 · raw file

  1. package com.atlassian.uwc.converters.socialtext;
  2. import java.util.HashMap;
  3. import java.util.Properties;
  4. import junit.framework.TestCase;
  5. import org.apache.log4j.Logger;
  6. import org.apache.log4j.PropertyConfigurator;
  7. import com.atlassian.uwc.ui.Page;
  8. public class SearchConverterTest extends TestCase {
  9. Logger log = Logger.getLogger(this.getClass());
  10. SearchConverter tester = null;
  11. protected void setUp() throws Exception {
  12. PropertyConfigurator.configure("log4j.properties");
  13. tester = new SearchConverter();
  14. Properties props = new Properties();
  15. props.setProperty("taglist-to-contentbylabel", "true");
  16. tester.setProperties(props);
  17. }
  18. public void testConvertSearch_keyword() {
  19. String input, expected, actual;
  20. input = "*search with a keyword*\n" +
  21. "{search: keyword}";
  22. expected = "*search with a keyword*\n" +
  23. "{search: keyword}";
  24. actual = tester.convertSearch(input);
  25. assertNotNull(actual);
  26. assertEquals(expected, actual);
  27. }
  28. public void testConvertSearch_tags() {
  29. String input, expected, actual;
  30. input = "*search with a tag*\n" +
  31. "{search: tag: category}\n" +
  32. "{search: tag:loremipsum}\n" +
  33. "{search: tag:\"something\"}\n" +
  34. "";
  35. expected = "*search with a tag*\n" +
  36. "{contentbylabel:labels=category}\n" +
  37. "{contentbylabel:labels=loremipsum}\n" +
  38. "{contentbylabel:labels=\"something\"}\n";
  39. actual = tester.convertSearch(input);
  40. assertNotNull(actual);
  41. assertEquals(expected, actual);
  42. }
  43. public void testConvertSearch_and() {
  44. String input, expected, actual;
  45. input = "*search with booleans and tags*\n" +
  46. "{search: tag: foo AND tag: bar}\n" +
  47. "{search: tag: abc and tag: def}";
  48. expected = "*search with booleans and tags*\n" +
  49. "{contentbylabel:labels=+foo,+bar}\n" +
  50. "{contentbylabel:labels=+abc,+def}";
  51. actual = tester.convertSearch(input);
  52. assertNotNull(actual);
  53. assertEquals(expected, actual);
  54. }
  55. public void testConvertSearch_or() {
  56. String input, expected, actual;
  57. input = "{search: tag: abc OR tag: def}";
  58. expected = "{contentbylabel:labels=abc,def}";
  59. actual = tester.convertSearch(input);
  60. assertNotNull(actual);
  61. assertEquals(expected, actual);
  62. }
  63. public void testConvertSearch_params() {
  64. String input, expected, actual;
  65. Properties props = new Properties();
  66. props.put("search-spaces","@self");
  67. tester.setProperties(props);
  68. input = "{search: tag: category}\n";
  69. expected = "{contentbylabel:labels=category|spaces=@self}\n";
  70. actual = tester.convertSearch(input);
  71. assertNotNull(actual);
  72. assertEquals(expected, actual);
  73. props.clear();
  74. props.put("search-title","true");
  75. props.put("search-spaces","@self");
  76. props.put("search-sort","creation");
  77. props.put("search-reverse","true");
  78. input = "*search with a tag*\n" +
  79. "{search: tag: category}\n" +
  80. "\n" +
  81. "*search with booleans and tags*\n" +
  82. "{search: tag: foo AND tag: bar}\n" +
  83. "";
  84. expected = "*search with a tag*\n" +
  85. "{contentbylabel:labels=category|title=Category|reverse=true|spaces=@self|sort=creation}\n" +
  86. "\n" +
  87. "*search with booleans and tags*\n" +
  88. "{contentbylabel:labels=+foo,+bar|title=Foo and Bar|reverse=true|spaces=@self|sort=creation}\n";
  89. actual = tester.convertSearch(input);
  90. assertNotNull(actual);
  91. assertEquals(expected, actual);
  92. }
  93. public void testGetOptions() {
  94. HashMap<String, String> actual = tester.getOptions();
  95. assertNotNull(actual);
  96. assertTrue(actual.isEmpty());
  97. Properties props = new Properties();
  98. props.put("search-spaces","@self");
  99. tester.setProperties(props);
  100. actual = tester.getOptions();
  101. assertNotNull(actual);
  102. assertEquals(1, actual.size());
  103. assertEquals("@self", actual.get("spaces"));
  104. props.clear();
  105. props.put("search-title","true");
  106. props.put("search-spaces","@self");
  107. props.put("search-sort","creation");
  108. props.put("search-reverse","true");
  109. actual = tester.getOptions();
  110. assertNotNull(actual);
  111. assertEquals(4, actual.size());
  112. assertEquals("true", actual.get("title"));
  113. assertEquals("@self", actual.get("spaces"));
  114. assertEquals("creation", actual.get("sort"));
  115. assertEquals("true", actual.get("reverse"));
  116. }
  117. public void testHasMultipleTags() {
  118. String input;
  119. boolean expected, actual;
  120. input = " category";
  121. expected = false;
  122. actual = tester.hasMultipleTags(input);
  123. assertNotNull(actual);
  124. assertEquals(expected, actual);
  125. input = "loremipsum";
  126. expected = false;
  127. actual = tester.hasMultipleTags(input);
  128. assertNotNull(actual);
  129. assertEquals(expected, actual);
  130. input = " foo AND tag: bar";
  131. expected = true;
  132. actual = tester.hasMultipleTags(input);
  133. assertNotNull(actual);
  134. assertEquals(expected, actual);
  135. input = " abc and tag: def";
  136. expected = true;
  137. actual = tester.hasMultipleTags(input);
  138. assertNotNull(actual);
  139. assertEquals(expected, actual);
  140. input = " abc OR tag: def";
  141. expected = true;
  142. actual = tester.hasMultipleTags(input);
  143. assertNotNull(actual);
  144. assertEquals(expected, actual);
  145. }
  146. public void testBuildMultipleLabelsString() {
  147. String input, expected, actual;
  148. input = " foo AND tag: bar";
  149. expected = "+foo,+bar";
  150. actual = tester.buildMultipleLabelsString(input);
  151. assertNotNull(actual);
  152. assertEquals(expected, actual);
  153. input = " abc and tag: def";
  154. expected = "+abc,+def";
  155. actual = tester.buildMultipleLabelsString(input);
  156. assertNotNull(actual);
  157. assertEquals(expected, actual);
  158. input = " abc OR tag: def";
  159. expected = "abc,def";
  160. actual = tester.buildMultipleLabelsString(input);
  161. assertNotNull(actual);
  162. assertEquals(expected, actual);
  163. }
  164. public void testBuildParams() {
  165. String input, expected, actual;
  166. HashMap<String,String> options = new HashMap<String, String>();
  167. input = "abc";
  168. expected = "";
  169. actual = tester.buildParams(input, options);
  170. assertNotNull(actual);
  171. assertEquals(expected, actual);
  172. options.put("title", "true");
  173. expected = "|title=Abc";
  174. actual = tester.buildParams(input, options);
  175. assertNotNull(actual);
  176. assertEquals(expected, actual);
  177. input = "+abc,+def";
  178. expected = "|title=Abc and Def";
  179. actual = tester.buildParams(input, options);
  180. assertNotNull(actual);
  181. assertEquals(expected, actual);
  182. input = "abc,def";
  183. expected = "|title=Abc or Def";
  184. actual = tester.buildParams(input, options);
  185. assertNotNull(actual);
  186. assertEquals(expected, actual);
  187. input = "abc";
  188. options.put("spaces", "@self");
  189. expected = "|title=Abc|spaces=@self";
  190. actual = tester.buildParams(input, options);
  191. assertNotNull(actual);
  192. assertEquals(expected, actual);
  193. options.put("spaces", "@all");
  194. expected = "|title=Abc|spaces=@all";
  195. actual = tester.buildParams(input, options);
  196. assertNotNull(actual);
  197. assertEquals(expected, actual);
  198. options.put("sort", "creation");
  199. expected = "|title=Abc|spaces=@all|sort=creation";
  200. actual = tester.buildParams(input, options);
  201. assertNotNull(actual);
  202. assertEquals(expected, actual);
  203. options.put("reverse", "true");
  204. expected = "|title=Abc|reverse=true|spaces=@all|sort=creation";
  205. actual = tester.buildParams(input, options);
  206. assertNotNull(actual);
  207. assertEquals(expected, actual);
  208. }
  209. public void testConvertSearch_badchars() {
  210. String input, expected, actual;
  211. input = "{search: tag:no space}\n" +
  212. "";
  213. expected = "{contentbylabel:labels=nospace}\n";
  214. actual = tester.convertSearch(input);
  215. assertNotNull(actual);
  216. assertEquals(expected, actual);
  217. //with params
  218. Properties props = new Properties();
  219. props.put("label-trans-1", " =-");
  220. props.put("label-trans-2", "@=at");
  221. tester.setProperties(props);
  222. tester.clearOptions();
  223. expected = "{contentbylabel:labels=no-space}\n";
  224. actual = tester.convertSearch(input);
  225. assertNotNull(actual);
  226. assertEquals(expected, actual);
  227. //and mult tags
  228. tester.clearOptions();
  229. input = "{search: tag: foo@! AND tag:lor:em ipsum}\n";
  230. expected = "{contentbylabel:labels=+fooat,+loremipsum}\n";
  231. actual = tester.convertSearch(input);
  232. assertNotNull(actual);
  233. assertEquals(expected, actual);
  234. }
  235. public void testConvert_Taglist() {
  236. Properties props = new Properties();
  237. props.setProperty("taglist-to-contentbylabel", "true");
  238. tester.setProperties(props);
  239. String input, expected, actual;
  240. input = "{tag_list: test}\n" +
  241. "\n" +
  242. "What if the label has illegalchars?\n" +
  243. "{tag_list: abc!#&()*,.:;<>?@[]^def}\n" +
  244. "{tag_list: has white space}\n" +
  245. "(These chars are ok: but what about braces?)\n" +
  246. "{tag_list: abc$%-_+={}\\|\"\'~}\n" +
  247. "\n" +
  248. "What if there\'s more than one label?\n" +
  249. "{tag_list: a OR b}\n" +
  250. "{tag_list: foo OR tag_list:bar OR tag_list:meh OR tag_list:abc}\n" +
  251. "";
  252. expected = "{contentbylabel:labels=test}\n" +
  253. "\n" +
  254. "What if the label has illegalchars?\n" +
  255. "{contentbylabel:labels=abcdef}\n" +
  256. "{contentbylabel:labels=haswhitespace}\n" +
  257. "(These chars are ok: but what about braces?)\n" +
  258. "{contentbylabel:labels=abc$%-_+={}\\|\"\'~}\n" +
  259. "\n" +
  260. "What if there\'s more than one label?\n" +
  261. "{contentbylabel:labels=a,b}\n" +
  262. "{contentbylabel:labels=foo,bar,meh,abc}\n" +
  263. "";
  264. Page page = new Page(null);
  265. page.setOriginalText(input);
  266. tester.convert(page);
  267. actual = page.getConvertedText();
  268. assertNotNull(actual);
  269. assertEquals(expected, actual);
  270. }
  271. }