PageRenderTime 86ms CodeModel.GetById 38ms RepoModel.GetById 0ms app.codeStats 0ms

/core/src/test/java/com/ocpsoft/pretty/faces/url/URLPatternParserTest.java

https://github.com/fcaputo/prettyfaces
Java | 295 lines | 247 code | 30 blank | 18 comment | 0 complexity | 63ac52c5d900caaab72992050c39047e MD5 | raw file
  1. /*
  2. * Copyright 2010 Lincoln Baxter, III
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.ocpsoft.pretty.faces.url;
  17. import static org.junit.Assert.assertEquals;
  18. import static org.junit.Assert.assertFalse;
  19. import static org.junit.Assert.assertNotSame;
  20. import static org.junit.Assert.assertTrue;
  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. import org.junit.Test;
  26. import com.ocpsoft.pretty.PrettyException;
  27. import com.ocpsoft.pretty.faces.config.mapping.PathParameter;
  28. /**
  29. * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
  30. */
  31. public class URLPatternParserTest
  32. {
  33. @Test
  34. public void testSimplestMatch() throws Exception
  35. {
  36. URLPatternParser parser = new URLPatternParser("/");
  37. assertTrue(parser.matches(new URL("/")));
  38. List<PathParameter> parameters = parser.parse(new URL("/"));
  39. assertEquals(0, parameters.size());
  40. }
  41. @Test
  42. public void testGetNamedParameterList()
  43. {
  44. URLPatternParser namedParamParser = new URLPatternParser("/foo/#{named}/");
  45. List<PathParameter> params = namedParamParser.parse(new URL("/foo/love/"));
  46. assertEquals(1, params.size());
  47. PathParameter p = params.get(0);
  48. assertEquals(0, p.getPosition());
  49. assertEquals("love", p.getValue());
  50. assertEquals("named", p.getName());
  51. assertEquals("#{named}", p.getExpression().getELExpression());
  52. }
  53. @Test
  54. public void testGetInjectedParameterList()
  55. {
  56. URLPatternParser namedParamParser = new URLPatternParser("/foo/#{:injected}/");
  57. List<PathParameter> params = namedParamParser.parse(new URL("/foo/love/"));
  58. assertEquals(1, params.size());
  59. PathParameter p = params.get(0);
  60. assertEquals(0, p.getPosition());
  61. assertEquals("love", p.getValue());
  62. assertEquals("#{injected}", p.getExpression().getELExpression());
  63. }
  64. @Test
  65. public void testGetNamedValuedParameterList()
  66. {
  67. URLPatternParser namedValuedParamParser = new URLPatternParser("/foo/#{named:bean.value}/");
  68. List<PathParameter> params = namedValuedParamParser.parse(new URL("/foo/love/"));
  69. assertEquals(1, params.size());
  70. PathParameter p = params.get(0);
  71. assertEquals(0, p.getPosition());
  72. assertEquals("love", p.getValue());
  73. assertEquals("named", p.getName());
  74. assertEquals("#{bean.value}", p.getExpression().getELExpression());
  75. }
  76. @Test
  77. public void testMatches()
  78. {
  79. URLPatternParser parser = new URLPatternParser(
  80. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  81. assertTrue(parser.matches(new URL("/project/starfish1/starfish2/story1")));
  82. assertFalse(parser.matches(new URL("project/starfish1/starfish2/story1")));
  83. assertFalse(parser.matches(new URL("/project/starfish1/starfish2/story1/")));
  84. assertFalse(parser.matches(new URL("project/starfish1/starfish2/story1/test")));
  85. assertFalse(parser.matches(new URL("project/starfish2/story1")));
  86. assertFalse(parser.matches(new URL("project/starfish1/starfish2")));
  87. assertFalse(parser.matches(new URL("project/starfish1/starfish2/")));
  88. }
  89. @Test
  90. public void testMatchesPrefixedSegmentExpressionInjected()
  91. {
  92. URLPatternParser parser = new URLPatternParser("/project/#{paramsBean.project}/story-#{paramsBean.story}/");
  93. assertTrue(parser.matches(new URL("/project/starfish/story-1/")));
  94. assertFalse(parser.matches(new URL("/project/starfish/story-1/-")));
  95. assertFalse(parser.matches(new URL("/project/starfish/story-/")));
  96. assertFalse(parser.matches(new URL("project/starfish/story-23/")));
  97. }
  98. @Test
  99. public void testMatchesPrefixedSegmentExpressionNamed()
  100. {
  101. URLPatternParser parser = new URLPatternParser("/project/#{paramsBean.project}/story-#{story}/");
  102. assertTrue(parser.matches(new URL("/project/starfish/story-1/")));
  103. }
  104. @Test
  105. public void testMatchesMultipleExpressionNamedSegment()
  106. {
  107. URLPatternParser parser = new URLPatternParser("/project/#{paramsBean.project}/story-#{story}-#{comment}");
  108. assertTrue(parser.matches(new URL("/project/starfish/story-1-23")));
  109. assertFalse(parser.matches(new URL("/project/starfish/story-1-23/")));
  110. }
  111. @Test
  112. public void testMatchesPrefixedSegmentExpressionNamedInjected()
  113. {
  114. URLPatternParser parser = new URLPatternParser("/project/#{paramsBean.project}/story-#{story:paramsBean.story}/");
  115. assertTrue(parser.matches(new URL("/project/starfish/story-1/")));
  116. }
  117. @Test
  118. public void testGetMappedParameters()
  119. {
  120. URLPatternParser parser = new URLPatternParser(
  121. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  122. List<PathParameter> params = parser.parse(new URL("/project/starfish1/sprint1/story1"));
  123. assertEquals(3, params.size());
  124. assertEquals("starfish1", params.get(0).getValue());
  125. assertEquals("sprint1", params.get(1).getValue());
  126. assertEquals("story1", params.get(2).getValue());
  127. }
  128. @Test
  129. public void testGetMappedParametersDuplicatesAreRepresented()
  130. {
  131. URLPatternParser duplicateParamsParser = new URLPatternParser(
  132. "/project/#{paramsBean.project}/#{paramsBean.project}/#{paramsBean.story}");
  133. List<PathParameter> params = duplicateParamsParser.parse(new URL("/project/starfish1/sprint1/story1"));
  134. assertEquals(3, params.size());
  135. assertEquals("starfish1", params.get(0).getValue());
  136. assertEquals("sprint1", params.get(1).getValue());
  137. assertEquals("story1", params.get(2).getValue());
  138. }
  139. @Test
  140. public void testGetMappedParameterList()
  141. {
  142. URLPatternParser parser = new URLPatternParser(
  143. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  144. List<PathParameter> params = parser.parse(new URL("/project/starfish1/sprint1/story1"));
  145. assertEquals(3, params.size());
  146. PathParameter p = params.get(0);
  147. assertEquals(0, p.getPosition());
  148. assertEquals("starfish1", p.getValue());
  149. assertEquals("#{paramsBean.project}", p.getExpression().getELExpression());
  150. PathParameter p1 = params.get(1);
  151. assertEquals(1, p1.getPosition());
  152. assertEquals("sprint1", p1.getValue());
  153. assertEquals("#{paramsBean.iteration}", p1.getExpression().getELExpression());
  154. PathParameter p2 = params.get(2);
  155. assertEquals(2, p2.getPosition());
  156. assertEquals("story1", p2.getValue());
  157. assertEquals("#{paramsBean.story}", p2.getExpression().getELExpression());
  158. }
  159. @Test
  160. public void testGetMappedUrl()
  161. {
  162. URLPatternParser parser = new URLPatternParser(
  163. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  164. String mappedUrl = parser.getMappedURL("p1", 22, 55).toURL();
  165. assertEquals("/project/p1/22/55", mappedUrl);
  166. }
  167. @Test
  168. public void testGetParameterCount()
  169. {
  170. URLPatternParser parser = new URLPatternParser(
  171. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  172. assertEquals(3, parser.getParameterCount());
  173. }
  174. @Test
  175. public void testGetMappedUrlWithList()
  176. {
  177. URLPatternParser parser = new URLPatternParser(
  178. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  179. List<Object> params = new ArrayList<Object>();
  180. params.add("p1");
  181. params.add(22);
  182. params.add(55);
  183. String mappedUrl = parser.getMappedURL(params).toURL();
  184. assertEquals("/project/p1/22/55", mappedUrl);
  185. params.remove(2);
  186. try
  187. {
  188. mappedUrl = parser.getMappedURL(params, 55).toURL();
  189. assertEquals("/project/p1/22/55", mappedUrl);
  190. assertTrue("Parameter count is wrong.", false);
  191. }
  192. catch (PrettyException pe)
  193. {
  194. assertTrue(true);
  195. }
  196. assertNotSame("/project/p1/22/55", parser.getMappedURL(params, 22, 55).toURL());
  197. }
  198. @Test
  199. public void testGetMappedUrlWithArray()
  200. {
  201. URLPatternParser parser = new URLPatternParser(
  202. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  203. Object[] params = new Object[3];
  204. params[0] = "p1";
  205. params[1] = 22;
  206. params[2] = 55;
  207. String mappedUrl = parser.getMappedURL(params).toURL();
  208. assertEquals("/project/p1/22/55", mappedUrl);
  209. params[2] = null;
  210. params[1] = null;
  211. try
  212. {
  213. mappedUrl = parser.getMappedURL(params, 55).toURL();
  214. assertEquals("/project/p1/22/55", mappedUrl);
  215. assertTrue("An exception should have been thrown by now", false);
  216. }
  217. catch (PrettyException pe)
  218. {
  219. assertTrue(true);
  220. }
  221. assertNotSame("/project/p1/22/55", parser.getMappedURL(params, 22, 55).toURL());
  222. }
  223. @Test
  224. public void testGetMappedUrlWithMap()
  225. {
  226. URLPatternParser parser = new URLPatternParser(
  227. "/project/#{paramsBean.project}/#{paramsBean.iteration}/#{paramsBean.story}");
  228. Map<String, String> params = new HashMap<String, String>();
  229. params.put("1", "p1");
  230. params.put("2", "22");
  231. params.put("3", "55");
  232. try
  233. {
  234. String mappedUrl = parser.getMappedURL(params).toURL();
  235. assertEquals("An exception should have been thrown: Map parameters are not supported at this time.", mappedUrl);
  236. }
  237. catch (PrettyException pe)
  238. {
  239. assertTrue(true);
  240. }
  241. assertNotSame("/project/p1/22/55", parser.getMappedURL(params, 22, 55).toURL());
  242. }
  243. @Test
  244. public void testGetMappedUrlWithListWithoutParams()
  245. {
  246. URLPatternParser noParamsParser = new URLPatternParser("/no/param");
  247. List<?> params = new ArrayList<Object>();
  248. String mappedUrl = noParamsParser.getMappedURL(params).toURL();
  249. assertEquals("Empty list failed", "/no/param", mappedUrl);
  250. }
  251. @Test
  252. public void testGetMappedUrlNullListWithoutParams()
  253. {
  254. URLPatternParser noParamsParser = new URLPatternParser("/no/param");
  255. List<?> params = null;
  256. String mappedUrl = noParamsParser.getMappedURL(params).toURL();
  257. assertEquals("Null param failed", "/no/param", mappedUrl);
  258. }
  259. @Test
  260. public void testGetMappedUrlWithRegexes()
  261. {
  262. URLPatternParser regexParser = new URLPatternParser("/(foo|bar|baz|cat|dog).jsf");
  263. List<PathParameter> params = regexParser.parse(new URL("/foo.jsf"));
  264. }
  265. }