1 /* 2 * Copyright 2002-2007 the original author or authors. 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 17 package org.springframework.web.bind; 18 19 import static org.junit.Assert.*; 20 21 import org.junit.Test; 22 import org.springframework.mock.web.MockHttpServletRequest; 23 import org.springframework.util.StopWatch; 24 25 /** 26 * @author Juergen Hoeller 27 * @author Chris Beams 28 * @since 06.08.2003 29 */ 30 public class ServletRequestUtilsTests { 31 32 @Test testIntParameter()33 public void testIntParameter() throws ServletRequestBindingException { 34 MockHttpServletRequest request = new MockHttpServletRequest(); 35 request.addParameter("param1", "5"); 36 request.addParameter("param2", "e"); 37 request.addParameter("paramEmpty", ""); 38 39 assertEquals(ServletRequestUtils.getIntParameter(request, "param1"), new Integer(5)); 40 assertEquals(ServletRequestUtils.getIntParameter(request, "param1", 6), 5); 41 assertEquals(ServletRequestUtils.getRequiredIntParameter(request, "param1"), 5); 42 43 assertEquals(ServletRequestUtils.getIntParameter(request, "param2", 6), 6); 44 try { 45 ServletRequestUtils.getRequiredIntParameter(request, "param2"); 46 fail("Should have thrown ServletRequestBindingException"); 47 } 48 catch (ServletRequestBindingException ex) { 49 // expected 50 } 51 52 assertEquals(ServletRequestUtils.getIntParameter(request, "param3"), null); 53 assertEquals(ServletRequestUtils.getIntParameter(request, "param3", 6), 6); 54 try { 55 ServletRequestUtils.getRequiredIntParameter(request, "param3"); 56 fail("Should have thrown ServletRequestBindingException"); 57 } 58 catch (ServletRequestBindingException ex) { 59 // expected 60 } 61 62 try { 63 ServletRequestUtils.getRequiredIntParameter(request, "paramEmpty"); 64 fail("Should have thrown ServletRequestBindingException"); 65 } 66 catch (ServletRequestBindingException ex) { 67 // expected 68 } 69 } 70 71 @Test testIntParameters()72 public void testIntParameters() throws ServletRequestBindingException { 73 MockHttpServletRequest request = new MockHttpServletRequest(); 74 request.addParameter("param", new String[] {"1", "2", "3"}); 75 76 request.addParameter("param2", "1"); 77 request.addParameter("param2", "2"); 78 request.addParameter("param2", "bogus"); 79 80 int[] array = new int[] {1, 2, 3}; 81 int[] values = ServletRequestUtils.getRequiredIntParameters(request, "param"); 82 assertEquals(3, values.length); 83 for (int i = 0; i < array.length; i++) { 84 assertEquals(array[i], values[i]); 85 } 86 87 try { 88 ServletRequestUtils.getRequiredIntParameters(request, "param2"); 89 fail("Should have thrown ServletRequestBindingException"); 90 } 91 catch (ServletRequestBindingException ex) { 92 // expected 93 } 94 } 95 96 @Test testLongParameter()97 public void testLongParameter() throws ServletRequestBindingException { 98 MockHttpServletRequest request = new MockHttpServletRequest(); 99 request.addParameter("param1", "5"); 100 request.addParameter("param2", "e"); 101 request.addParameter("paramEmpty", ""); 102 103 assertEquals(ServletRequestUtils.getLongParameter(request, "param1"), new Long(5L)); 104 assertEquals(ServletRequestUtils.getLongParameter(request, "param1", 6L), 5L); 105 assertEquals(ServletRequestUtils.getRequiredIntParameter(request, "param1"), 5L); 106 107 assertEquals(ServletRequestUtils.getLongParameter(request, "param2", 6L), 6L); 108 try { 109 ServletRequestUtils.getRequiredLongParameter(request, "param2"); 110 fail("Should have thrown ServletRequestBindingException"); 111 } 112 catch (ServletRequestBindingException ex) { 113 // expected 114 } 115 116 assertEquals(ServletRequestUtils.getLongParameter(request, "param3"), null); 117 assertEquals(ServletRequestUtils.getLongParameter(request, "param3", 6L), 6L); 118 try { 119 ServletRequestUtils.getRequiredLongParameter(request, "param3"); 120 fail("Should have thrown ServletRequestBindingException"); 121 } 122 catch (ServletRequestBindingException ex) { 123 // expected 124 } 125 126 try { 127 ServletRequestUtils.getRequiredLongParameter(request, "paramEmpty"); 128 fail("Should have thrown ServletRequestBindingException"); 129 } 130 catch (ServletRequestBindingException ex) { 131 // expected 132 } 133 } 134 135 @Test testLongParameters()136 public void testLongParameters() throws ServletRequestBindingException { 137 MockHttpServletRequest request = new MockHttpServletRequest(); 138 request.setParameter("param", new String[] {"1", "2", "3"}); 139 140 request.setParameter("param2", "0"); 141 request.setParameter("param2", "1"); 142 request.addParameter("param2", "2"); 143 request.addParameter("param2", "bogus"); 144 145 long[] array = new long[] {1L, 2L, 3L}; 146 long[] values = ServletRequestUtils.getRequiredLongParameters(request, "param"); 147 assertEquals(3, values.length); 148 for (int i = 0; i < array.length; i++) { 149 assertEquals(array[i], values[i]); 150 } 151 152 try { 153 ServletRequestUtils.getRequiredLongParameters(request, "param2"); 154 fail("Should have thrown ServletRequestBindingException"); 155 } 156 catch (ServletRequestBindingException ex) { 157 // expected 158 } 159 160 request.setParameter("param2", new String[] {"1", "2"}); 161 values = ServletRequestUtils.getRequiredLongParameters(request, "param2"); 162 assertEquals(2, values.length); 163 assertEquals(1, values[0]); 164 assertEquals(2, values[1]); 165 166 request.removeParameter("param2"); 167 try { 168 ServletRequestUtils.getRequiredLongParameters(request, "param2"); 169 fail("Should have thrown ServletRequestBindingException"); 170 } 171 catch (ServletRequestBindingException ex) { 172 // expected 173 } 174 } 175 176 @Test testFloatParameter()177 public void testFloatParameter() throws ServletRequestBindingException { 178 MockHttpServletRequest request = new MockHttpServletRequest(); 179 request.addParameter("param1", "5.5"); 180 request.addParameter("param2", "e"); 181 request.addParameter("paramEmpty", ""); 182 183 assertTrue(ServletRequestUtils.getFloatParameter(request, "param1").equals(new Float(5.5f))); 184 assertTrue(ServletRequestUtils.getFloatParameter(request, "param1", 6.5f) == 5.5f); 185 assertTrue(ServletRequestUtils.getRequiredFloatParameter(request, "param1") == 5.5f); 186 187 assertTrue(ServletRequestUtils.getFloatParameter(request, "param2", 6.5f) == 6.5f); 188 try { 189 ServletRequestUtils.getRequiredFloatParameter(request, "param2"); 190 fail("Should have thrown ServletRequestBindingException"); 191 } 192 catch (ServletRequestBindingException ex) { 193 // expected 194 } 195 196 assertTrue(ServletRequestUtils.getFloatParameter(request, "param3") == null); 197 assertTrue(ServletRequestUtils.getFloatParameter(request, "param3", 6.5f) == 6.5f); 198 try { 199 ServletRequestUtils.getRequiredFloatParameter(request, "param3"); 200 fail("Should have thrown ServletRequestBindingException"); 201 } 202 catch (ServletRequestBindingException ex) { 203 // expected 204 } 205 206 try { 207 ServletRequestUtils.getRequiredFloatParameter(request, "paramEmpty"); 208 fail("Should have thrown ServletRequestBindingException"); 209 } 210 catch (ServletRequestBindingException ex) { 211 // expected 212 } 213 } 214 215 @Test testFloatParameters()216 public void testFloatParameters() throws ServletRequestBindingException { 217 MockHttpServletRequest request = new MockHttpServletRequest(); 218 request.addParameter("param", new String[] {"1.5", "2.5", "3"}); 219 220 request.addParameter("param2", "1.5"); 221 request.addParameter("param2", "2"); 222 request.addParameter("param2", "bogus"); 223 224 float[] array = new float[] {1.5F, 2.5F, 3}; 225 float[] values = ServletRequestUtils.getRequiredFloatParameters(request, "param"); 226 assertEquals(3, values.length); 227 for (int i = 0; i < array.length; i++) { 228 assertEquals(array[i], values[i], 0); 229 } 230 231 try { 232 ServletRequestUtils.getRequiredFloatParameters(request, "param2"); 233 fail("Should have thrown ServletRequestBindingException"); 234 } 235 catch (ServletRequestBindingException ex) { 236 // expected 237 } 238 } 239 240 @Test testDoubleParameter()241 public void testDoubleParameter() throws ServletRequestBindingException { 242 MockHttpServletRequest request = new MockHttpServletRequest(); 243 request.addParameter("param1", "5.5"); 244 request.addParameter("param2", "e"); 245 request.addParameter("paramEmpty", ""); 246 247 assertTrue(ServletRequestUtils.getDoubleParameter(request, "param1").equals(new Double(5.5))); 248 assertTrue(ServletRequestUtils.getDoubleParameter(request, "param1", 6.5) == 5.5); 249 assertTrue(ServletRequestUtils.getRequiredDoubleParameter(request, "param1") == 5.5); 250 251 assertTrue(ServletRequestUtils.getDoubleParameter(request, "param2", 6.5) == 6.5); 252 try { 253 ServletRequestUtils.getRequiredDoubleParameter(request, "param2"); 254 fail("Should have thrown ServletRequestBindingException"); 255 } 256 catch (ServletRequestBindingException ex) { 257 // expected 258 } 259 260 assertTrue(ServletRequestUtils.getDoubleParameter(request, "param3") == null); 261 assertTrue(ServletRequestUtils.getDoubleParameter(request, "param3", 6.5) == 6.5); 262 try { 263 ServletRequestUtils.getRequiredDoubleParameter(request, "param3"); 264 fail("Should have thrown ServletRequestBindingException"); 265 } 266 catch (ServletRequestBindingException ex) { 267 // expected 268 } 269 270 try { 271 ServletRequestUtils.getRequiredDoubleParameter(request, "paramEmpty"); 272 fail("Should have thrown ServletRequestBindingException"); 273 } 274 catch (ServletRequestBindingException ex) { 275 // expected 276 } 277 } 278 279 @Test testDoubleParameters()280 public void testDoubleParameters() throws ServletRequestBindingException { 281 MockHttpServletRequest request = new MockHttpServletRequest(); 282 request.addParameter("param", new String[] {"1.5", "2.5", "3"}); 283 284 request.addParameter("param2", "1.5"); 285 request.addParameter("param2", "2"); 286 request.addParameter("param2", "bogus"); 287 288 double[] array = new double[] {1.5, 2.5, 3}; 289 double[] values = ServletRequestUtils.getRequiredDoubleParameters(request, "param"); 290 assertEquals(3, values.length); 291 for (int i = 0; i < array.length; i++) { 292 assertEquals(array[i], values[i], 0); 293 } 294 295 try { 296 ServletRequestUtils.getRequiredDoubleParameters(request, "param2"); 297 fail("Should have thrown ServletRequestBindingException"); 298 } 299 catch (ServletRequestBindingException ex) { 300 // expected 301 } 302 } 303 304 @Test testBooleanParameter()305 public void testBooleanParameter() throws ServletRequestBindingException { 306 MockHttpServletRequest request = new MockHttpServletRequest(); 307 request.addParameter("param1", "true"); 308 request.addParameter("param2", "e"); 309 request.addParameter("param4", "yes"); 310 request.addParameter("param5", "1"); 311 request.addParameter("paramEmpty", ""); 312 313 assertTrue(ServletRequestUtils.getBooleanParameter(request, "param1").equals(Boolean.TRUE)); 314 assertTrue(ServletRequestUtils.getBooleanParameter(request, "param1", false)); 315 assertTrue(ServletRequestUtils.getRequiredBooleanParameter(request, "param1")); 316 317 assertFalse(ServletRequestUtils.getBooleanParameter(request, "param2", true)); 318 assertFalse(ServletRequestUtils.getRequiredBooleanParameter(request, "param2")); 319 320 assertTrue(ServletRequestUtils.getBooleanParameter(request, "param3") == null); 321 assertTrue(ServletRequestUtils.getBooleanParameter(request, "param3", true)); 322 try { 323 ServletRequestUtils.getRequiredBooleanParameter(request, "param3"); 324 fail("Should have thrown ServletRequestBindingException"); 325 } 326 catch (ServletRequestBindingException ex) { 327 // expected 328 } 329 330 assertTrue(ServletRequestUtils.getBooleanParameter(request, "param4", false)); 331 assertTrue(ServletRequestUtils.getRequiredBooleanParameter(request, "param4")); 332 333 assertTrue(ServletRequestUtils.getBooleanParameter(request, "param5", false)); 334 assertTrue(ServletRequestUtils.getRequiredBooleanParameter(request, "param5")); 335 assertFalse(ServletRequestUtils.getRequiredBooleanParameter(request, "paramEmpty")); 336 } 337 338 @Test testBooleanParameters()339 public void testBooleanParameters() throws ServletRequestBindingException { 340 MockHttpServletRequest request = new MockHttpServletRequest(); 341 request.addParameter("param", new String[] {"true", "yes", "off", "1", "bogus"}); 342 343 request.addParameter("param2", "false"); 344 request.addParameter("param2", "true"); 345 request.addParameter("param2", ""); 346 347 boolean[] array = new boolean[] {true, true, false, true, false}; 348 boolean[] values = ServletRequestUtils.getRequiredBooleanParameters(request, "param"); 349 assertEquals(array.length, values.length); 350 for (int i = 0; i < array.length; i++) { 351 assertEquals(array[i], values[i]); 352 } 353 354 array = new boolean[] {false, true, false}; 355 values = ServletRequestUtils.getRequiredBooleanParameters(request, "param2"); 356 assertEquals(array.length, values.length); 357 for (int i = 0; i < array.length; i++) { 358 assertEquals(array[i], values[i]); 359 } 360 } 361 362 @Test testStringParameter()363 public void testStringParameter() throws ServletRequestBindingException { 364 MockHttpServletRequest request = new MockHttpServletRequest(); 365 request.addParameter("param1", "str"); 366 request.addParameter("paramEmpty", ""); 367 368 assertEquals("str", ServletRequestUtils.getStringParameter(request, "param1")); 369 assertEquals("str", ServletRequestUtils.getStringParameter(request, "param1", "string")); 370 assertEquals("str", ServletRequestUtils.getRequiredStringParameter(request, "param1")); 371 372 assertEquals(null, ServletRequestUtils.getStringParameter(request, "param3")); 373 assertEquals("string", ServletRequestUtils.getStringParameter(request, "param3", "string")); 374 assertNull(ServletRequestUtils.getStringParameter(request, "param3", null)); 375 try { 376 ServletRequestUtils.getRequiredStringParameter(request, "param3"); 377 fail("Should have thrown ServletRequestBindingException"); 378 } 379 catch (ServletRequestBindingException ex) { 380 // expected 381 } 382 383 assertEquals("", ServletRequestUtils.getStringParameter(request, "paramEmpty")); 384 assertEquals("", ServletRequestUtils.getRequiredStringParameter(request, "paramEmpty")); 385 } 386 387 @Test testGetIntParameterWithDefaultValueHandlingIsFastEnough()388 public void testGetIntParameterWithDefaultValueHandlingIsFastEnough() { 389 MockHttpServletRequest request = new MockHttpServletRequest(); 390 StopWatch sw = new StopWatch(); 391 sw.start(); 392 for (int i = 0; i < 1000000; i++) { 393 ServletRequestUtils.getIntParameter(request, "nonExistingParam", 0); 394 } 395 sw.stop(); 396 System.out.println(sw.getTotalTimeMillis()); 397 assertTrue("getStringParameter took too long: " + sw.getTotalTimeMillis(), sw.getTotalTimeMillis() < 250); 398 } 399 400 @Test testGetLongParameterWithDefaultValueHandlingIsFastEnough()401 public void testGetLongParameterWithDefaultValueHandlingIsFastEnough() { 402 MockHttpServletRequest request = new MockHttpServletRequest(); 403 StopWatch sw = new StopWatch(); 404 sw.start(); 405 for (int i = 0; i < 1000000; i++) { 406 ServletRequestUtils.getLongParameter(request, "nonExistingParam", 0); 407 } 408 sw.stop(); 409 System.out.println(sw.getTotalTimeMillis()); 410 assertTrue("getStringParameter took too long: " + sw.getTotalTimeMillis(), sw.getTotalTimeMillis() < 250); 411 } 412 413 @Test testGetFloatParameterWithDefaultValueHandlingIsFastEnough()414 public void testGetFloatParameterWithDefaultValueHandlingIsFastEnough() { 415 MockHttpServletRequest request = new MockHttpServletRequest(); 416 StopWatch sw = new StopWatch(); 417 sw.start(); 418 for (int i = 0; i < 1000000; i++) { 419 ServletRequestUtils.getFloatParameter(request, "nonExistingParam", 0f); 420 } 421 sw.stop(); 422 System.out.println(sw.getTotalTimeMillis()); 423 assertTrue("getStringParameter took too long: " + sw.getTotalTimeMillis(), sw.getTotalTimeMillis() < 250); 424 } 425 426 @Test testGetDoubleParameterWithDefaultValueHandlingIsFastEnough()427 public void testGetDoubleParameterWithDefaultValueHandlingIsFastEnough() { 428 MockHttpServletRequest request = new MockHttpServletRequest(); 429 StopWatch sw = new StopWatch(); 430 sw.start(); 431 for (int i = 0; i < 1000000; i++) { 432 ServletRequestUtils.getDoubleParameter(request, "nonExistingParam", 0d); 433 } 434 sw.stop(); 435 System.out.println(sw.getTotalTimeMillis()); 436 assertTrue("getStringParameter took too long: " + sw.getTotalTimeMillis(), sw.getTotalTimeMillis() < 250); 437 } 438 439 @Test testGetBooleanParameterWithDefaultValueHandlingIsFastEnough()440 public void testGetBooleanParameterWithDefaultValueHandlingIsFastEnough() { 441 MockHttpServletRequest request = new MockHttpServletRequest(); 442 StopWatch sw = new StopWatch(); 443 sw.start(); 444 for (int i = 0; i < 1000000; i++) { 445 ServletRequestUtils.getBooleanParameter(request, "nonExistingParam", false); 446 } 447 sw.stop(); 448 System.out.println(sw.getTotalTimeMillis()); 449 assertTrue("getStringParameter took too long: " + sw.getTotalTimeMillis(), sw.getTotalTimeMillis() < 250); 450 } 451 452 @Test testGetStringParameterWithDefaultValueHandlingIsFastEnough()453 public void testGetStringParameterWithDefaultValueHandlingIsFastEnough() { 454 MockHttpServletRequest request = new MockHttpServletRequest(); 455 StopWatch sw = new StopWatch(); 456 sw.start(); 457 for (int i = 0; i < 1000000; i++) { 458 ServletRequestUtils.getStringParameter(request, "nonExistingParam", "defaultValue"); 459 } 460 sw.stop(); 461 System.out.println(sw.getTotalTimeMillis()); 462 assertTrue("getStringParameter took too long: " + sw.getTotalTimeMillis(), sw.getTotalTimeMillis() < 250); 463 } 464 465 } 466