001 /** 002 * Copyright 2005-2011 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package edu.samplu.travel.krad.test; 017 018 import edu.samplu.common.UpgradedSeleniumITBase; 019 import org.junit.Assert; 020 import org.junit.Test; 021 022 /** 023 * tests that regex validation works as expected on input fields where it is configured 024 * 025 * @author Kuali Rice Team (rice.collab@kuali.org) 026 */ 027 public class UIFComponentValidationRegexPatternIT extends UpgradedSeleniumITBase { 028 029 @Override 030 public String getTestUrl() { 031 return "/kr-krad/uicomponents?viewId=UifCompView_KNS&methodToCall=start&readOnlyFields=field91"; 032 } 033 034 @Test 035 public void testValidCharacterConstraint() throws Exception { 036 037 /* 038 * Timestamp pattern validation message says it allows years from 1900 - 2099 039 * In fact it also allows 2999 as the upper limit. This needs to be sorted out. 040 * Test failing this condition is commented in the below code section for Timestamp Validation. Once resolved can be uncommented 041 * 042 */ 043 044 waitAndClick("//a[contains(text(),'Validation - Regex')]"); 045 046 //---------------------------------------------Fixed Point------------------------------// 047 048 049 waitAndType("name=field50", "123.123"); 050 fireEvent("name=field50", "blur"); 051 validateErrorImage(true); 052 053 waitAndType("//input[@name='field50']", "1234.4"); 054 fireEvent("name=field50", "blur"); 055 validateErrorImage(true); 056 057 058 waitAndType("//input[@name='field50']", "1234.434"); 059 fireEvent("name=field50", "blur"); 060 validateErrorImage(true); 061 062 waitAndType("//input[@name='field50']", "123.67"); 063 fireEvent("name=field50", "blur"); 064 validateErrorImage(false); 065 066 //---------------------------------------------Floating Point------------------------------// 067 068 waitAndType("//input[@name='field51']", "127."); 069 fireEvent("//input[@name='field51']", "blur"); 070 validateErrorImage(true); 071 072 waitAndType("//input[@name='field51']", "1234()98"); 073 fireEvent("//input[@name='field51']", "blur"); 074 validateErrorImage(true); 075 076 waitAndType("//input[@name='field51']", "-123.67"); 077 fireEvent("//input[@name='field51']", "blur"); 078 validateErrorImage(false); 079 080 //---------------------------------------------Integer Pattern constraint------------------------------// 081 082 waitAndType("//input[@name='field77']", "127."); 083 fireEvent("//input[@name='field77']", "blur"); 084 validateErrorImage(true); 085 086 waitAndType("//input[@name='field77']", "1234.4123"); 087 fireEvent("//input[@name='field77']", "blur"); 088 validateErrorImage(true); 089 090 waitAndType("//input[@name='field77']", "123E123"); 091 fireEvent("//input[@name='field77']", "blur"); 092 validateErrorImage(true); 093 094 waitAndType("//input[@name='field77']", "-123"); 095 fireEvent("//input[@name='field77']", "blur"); 096 validateErrorImage(false); 097 098 //---------------------------------------------Phone Text------------------------------// 099 waitAndType("//input[@name='field52']", "1271231234"); 100 fireEvent("//input[@name='field52']", "blur"); 101 validateErrorImage(true); 102 103 waitAndType("//input[@name='field52']", "123-123-123"); 104 fireEvent("//input[@name='field52']", "blur"); 105 validateErrorImage(true); 106 107 waitAndType("//input[@name='field52']", "12-12-123445"); 108 fireEvent("//input[@name='field52']", "blur"); 109 validateErrorImage(true); 110 111 waitAndType("//input[@name='field52']", "1234-12-1234"); 112 fireEvent("//input[@name='field52']", "blur"); 113 validateErrorImage(true); 114 115 waitAndType("//input[@name='field52']", "123.123.1234"); 116 fireEvent("//input[@name='field52']", "blur"); 117 validateErrorImage(true); 118 119 waitAndType("//input[@name='field52']", "123-123-12345"); 120 fireEvent("//input[@name='field52']", "blur"); 121 validateErrorImage(true); 122 123 waitAndType("//input[@name='field52']", "123-123-1234"); 124 fireEvent("//input[@name='field52']", "blur"); 125 validateErrorImage(false); 126 127 //---------------------------------------------JavaClass Text------------------------------// 128 waitAndType("//input[@name='field53']", "127"); 129 fireEvent("//input[@name='field53']", "blur"); 130 validateErrorImage(true); 131 132 waitAndType("//input[@name='field53']", "TestJava!@#Class"); 133 fireEvent("//input[@name='field53']", "blur"); 134 validateErrorImage(true); 135 136 waitAndType("//input[@name='field53']", "Test JavaClass"); 137 fireEvent("//input[@name='field53']", "blur"); 138 validateErrorImage(true); 139 140 waitAndType("//input[@name='field53']", "Test JavaClass"); 141 fireEvent("//input[@name='field53']", "blur"); 142 validateErrorImage(true); 143 144 waitAndType("//input[@name='field53']", "TestJavaClass"); 145 fireEvent("//input[@name='field53']", "blur"); 146 validateErrorImage(false); 147 148 //---------------------------------------------Email Text------------------------------// 149 waitAndType("//input[@name='field54']", "123@123.123"); 150 fireEvent("//input[@name='field54']", "blur"); 151 validateErrorImage(true); 152 153 waitAndType("//input[@name='field54']", "email.com@emailServer"); 154 fireEvent("//input[@name='field54']", "blur"); 155 validateErrorImage(true); 156 157 waitAndType("//input[@name='field54']", "emailemailServer@.com"); 158 fireEvent("//input[@name='field54']", "blur"); 159 validateErrorImage(true); 160 161 waitAndType("//input[@name='field54']", "email@emailServercom"); 162 fireEvent("//input[@name='field54']", "blur"); 163 validateErrorImage(true); 164 165 waitAndType("//input[@name='field54']", "email@emailServer.com"); 166 fireEvent("//input[@name='field54']", "blur"); 167 validateErrorImage(false); 168 169 //---------------------------------------------URL pattern Text------------------------------// 170 waitAndType("//input[@name='field84']", "www.google.com"); 171 fireEvent("//input[@name='field84']", "blur"); 172 validateErrorImage(true); 173 174 waitAndType("//input[@name='field84']", "https:www.google.com"); 175 fireEvent("//input[@name='field84']", "blur"); 176 validateErrorImage(true); 177 178 waitAndType("//input[@name='field84']", "ftp://www.google.comsdfa123!#@"); 179 fireEvent("//input[@name='field84']", "blur"); 180 validateErrorImage(true); 181 182 waitAndType("//input[@name='field84']", "ftp:/www.google.coms"); 183 fireEvent("//input[@name='field84']", "blur"); 184 validateErrorImage(true); 185 186 waitAndType("//input[@name='field84']", "ftp://www.google.com"); 187 fireEvent("//input[@name='field84']", "blur"); 188 validateErrorImage(false); 189 190 waitAndType("//input[@name='field84']", "https://www.google.com"); 191 fireEvent("//input[@name='field84']", "blur"); 192 validateErrorImage(false); 193 194 waitAndType("//input[@name='field84']", "http://www.google.com"); 195 fireEvent("//input[@name='field84']", "blur"); 196 validateErrorImage(false); 197 198 199 //---------------------------------------------Date pattern Text------------------------------// 200 //-------------invalid formats 201 waitAndType("//input[@name='field55']", "12/12/2112 12:12:87 am"); 202 fireEvent("//input[@name='field55']", "blur"); 203 validateErrorImage(true); 204 205 waitAndType("//input[@name='field55']", "12-12-2112 12:12 am"); 206 fireEvent("//input[@name='field55']", "blur"); 207 validateErrorImage(true); 208 209 waitAndType("//input[@name='field55']", "12-12-2112 12:12"); 210 fireEvent("//input[@name='field55']", "blur"); 211 validateErrorImage(true); 212 213 waitAndType("//input[@name='field55']", "12/12/2112 12:12"); 214 fireEvent("//input[@name='field55']", "blur"); 215 validateErrorImage(true); 216 217 waitAndType("//input[@name='field55']", "12-12-2112 12:12:78"); 218 fireEvent("//input[@name='field55']", "blur"); 219 validateErrorImage(true); 220 221 waitAndType("//input[@name='field55']", "12 Sept"); 222 fireEvent("//input[@name='field55']", "blur"); 223 validateErrorImage(true); 224 225 waitAndType("//input[@name='field55']", "Sept 12 12:12"); 226 fireEvent("//input[@name='field55']", "blur"); 227 validateErrorImage(true); 228 229 waitAndType("//input[@name='field55']", "221299 12:12:13"); 230 fireEvent("//input[@name='field55']", "blur"); 231 validateErrorImage(true); 232 233 waitAndType("//input[@name='field55']", "111222 12:12"); 234 fireEvent("//input[@name='field55']", "blur"); 235 validateErrorImage(true); 236 237 waitAndType("//input[@name='field55']", "9/9/2012 12:12 am"); 238 fireEvent("//input[@name='field55']", "blur"); 239 validateErrorImage(true); 240 241 //-------------valid formats 242 waitAndType("//input[@name='field55']", "09/09/2012 12:12 pm"); 243 fireEvent("//input[@name='field55']", "blur"); 244 validateErrorImage(false); 245 246 waitAndType("//input[@name='field55']", "090923"); 247 fireEvent("//input[@name='field55']", "blur"); 248 validateErrorImage(false); 249 250 251 waitAndType("//input[@name='field55']", "Sept 12"); 252 fireEvent("//input[@name='field55']", "blur"); 253 validateErrorImage(false); 254 255 waitAndType("//input[@name='field55']", "2034"); 256 fireEvent("//input[@name='field55']", "blur"); 257 validateErrorImage(false); 258 259 waitAndType("//input[@name='field55']", "12/12/2012 23:12:59"); 260 fireEvent("//input[@name='field55']", "blur"); 261 validateErrorImage(false); 262 263 waitAndType("//input[@name='field55']", "12-12-12 23:12:59"); 264 fireEvent("//input[@name='field55']", "blur"); 265 validateErrorImage(false); 266 267 waitAndType("//input[@name='field55']", "121212 23:12:32"); 268 fireEvent("//input[@name='field55']", "blur"); 269 validateErrorImage(false); 270 271 waitAndType("//input[@name='field55']", "Sept 12 23:45:50"); 272 fireEvent("//input[@name='field55']", "blur"); 273 validateErrorImage(false); 274 275 waitAndType("//input[@name='field55']", "2011 12:23:32"); 276 fireEvent("//input[@name='field55']", "blur"); 277 validateErrorImage(false); 278 279 //---------------------------------------------BasicDate pattern Text------------------------------// 280 waitAndType("//input[@name='field75']", "12122012"); 281 fireEvent("//input[@name='field75']", "blur"); 282 validateErrorImage(true); 283 284 waitAndType("//input[@name='field75']", "13-12-34"); 285 fireEvent("//input[@name='field75']", "blur"); 286 validateErrorImage(true); 287 288 waitAndType("//input[@name='field75']", "12:12:2034"); 289 fireEvent("//input[@name='field75']", "blur"); 290 validateErrorImage(true); 291 292 waitAndType("//input[@name='field75']", "12-12-2034"); 293 fireEvent("//input[@name='field75']", "blur"); 294 validateErrorImage(false); 295 296 //---------------------------------------------Time12H Pattern Text------------------------------// 297 waitAndType("//input[@name='field82']", "13:00:12"); 298 fireEvent("//input[@name='field82']", "blur"); 299 validateErrorImage(true); 300 301 waitAndType("//input[@name='field82']", "09:00:"); 302 fireEvent("//input[@name='field82']", "blur"); 303 validateErrorImage(true); 304 305 waitAndType("//input[@name='field82']", "3-00:12"); 306 fireEvent("//input[@name='field82']", "blur"); 307 validateErrorImage(true); 308 309 waitAndType("//input[@name='field82']", "3:00:34"); 310 fireEvent("//input[@name='field82']", "blur"); 311 validateErrorImage(false); 312 313 waitAndType("//input[@name='field82']", "3:00"); 314 fireEvent("//input[@name='field82']", "blur"); 315 validateErrorImage(false); 316 317 //---------------------------------------------Time24H Pattern Text------------------------------// 318 waitAndType("//input[@name='field83']", "24:00:12"); 319 fireEvent("//input[@name='field83']", "blur"); 320 validateErrorImage(true); 321 322 waitAndType("//input[@name='field83']", "14:00:"); 323 fireEvent("//input[@name='field83']", "blur"); 324 validateErrorImage(true); 325 326 waitAndType("//input[@name='field83']", "13:00:76"); 327 fireEvent("//input[@name='field83']", "blur"); 328 validateErrorImage(true); 329 330 waitAndType("//input[@name='field83']", "13:00:23"); 331 fireEvent("//input[@name='field83']", "blur"); 332 validateErrorImage(false); 333 334 waitAndType("//input[@name='field83']", "23:00:12"); 335 fireEvent("//input[@name='field83']", "blur"); 336 validateErrorImage(false); 337 338 //---------------------------------------------Timestamp pattern Text------------------------------// 339 waitAndType("//input[@name='field56']", "1000-12-12 12:12:12.103"); 340 fireEvent("//input[@name='field56']", "blur"); 341 validateErrorImage(true); 342 343 waitAndType("//input[@name='field56']", "2000/12/12 12-12-12.87"); 344 fireEvent("//input[@name='field56']", "blur"); 345 validateErrorImage(true); 346 347 waitAndType("//input[@name='field56']", "2000/12/12 12-12-12.87"); 348 fireEvent("//input[@name='field56']", "blur"); 349 validateErrorImage(true); 350 351 waitAndType("//input[@name='field56']", "2011-08-12 12:12:12"); 352 fireEvent("//input[@name='field56']", "blur"); 353 validateErrorImage(true); 354 355 //--------this should not be allowed 356 /* 357 clearTimeStampText(); 358 waitAndType("//input[@name='field56']", "2999-12-12 12:12:12.103"); 359 focus("//input[@name='field57']"); 360 Thread.sleep(100); 361 assertTrue(isTextPresent("Must be a date/time in the format of yyyy-mm-dd hh:mm:ss.ms, between the years of 1900 and 2099, inclusive. \"ms\" represents milliseconds, and must be included.")); 362 363 */ 364 waitAndType("//input[@name='field56']", "2099-12-12 12:12:12.103"); 365 fireEvent("//input[@name='field56']", "blur"); 366 validateErrorImage(false); 367 368 //---------------------------------------------Year Pattern Text------------------------------// 369 waitAndType("//input[@name='field57']", "1599"); 370 fireEvent("//input[@name='field57']", "blur"); 371 validateErrorImage(true); 372 373 waitAndType("//input[@name='field57']", "2200"); 374 fireEvent("//input[@name='field57']", "blur"); 375 validateErrorImage(true); 376 377 waitAndType("//input[@name='field57']", "20000"); 378 fireEvent("//input[@name='field57']", "blur"); 379 validateErrorImage(true); 380 381 waitAndType("//input[@name='field57']", "-202"); 382 fireEvent("//input[@name='field57']", "blur"); 383 validateErrorImage(true); 384 385 waitAndType("//input[@name='field57']", "2000"); 386 fireEvent("//input[@name='field57']", "blur"); 387 validateErrorImage(false); 388 389 //---------------------------------------------Month Pattern Text------------------------------// 390 waitAndType("//input[@name='field58']", "0"); 391 fireEvent("//input[@name='field58']", "blur"); 392 validateErrorImage(true); 393 394 waitAndType("//input[@name='field58']", "-12"); 395 fireEvent("//input[@name='field58']", "blur"); 396 validateErrorImage(true); 397 398 waitAndType("//input[@name='field58']", "100"); 399 fireEvent("//input[@name='field58']", "blur"); 400 validateErrorImage(true); 401 402 waitAndType("//input[@name='field58']", "12"); 403 fireEvent("//input[@name='field58']", "blur"); 404 validateErrorImage(false); 405 406 //---------------------------------------------ZipCode Pattern Text------------------------------// 407 408 waitAndType("//input[@name='field61']", "123"); 409 fireEvent("//input[@name='field61']", "blur"); 410 validateErrorImage(true); 411 412 waitAndType("//input[@name='field61']", "2341 12"); 413 fireEvent("//input[@name='field61']", "blur"); 414 validateErrorImage(true); 415 416 waitAndType("//input[@name='field61']", "0-1231"); 417 fireEvent("//input[@name='field61']", "blur"); 418 validateErrorImage(true); 419 420 waitAndType("//input[@name='field61']", "12345"); 421 fireEvent("//input[@name='field61']", "blur"); 422 validateErrorImage(false); 423 424 //---------------------------------------------Alpha Numeric w/o options Text------------------------------// 425 waitAndType("//input[@name='field62']", "123 23 @#"); 426 fireEvent("//input[@name='field62']", "blur"); 427 validateErrorImage(true); 428 429 waitAndType("//input[@name='field62']", "-asd123"); 430 fireEvent("//input[@name='field62']", "blur"); 431 validateErrorImage(true); 432 433 waitAndType("//input[@name='field62']", "asd/123"); 434 fireEvent("//input[@name='field62']", "blur"); 435 validateErrorImage(true); 436 437 waitAndType("//input[@name='field62']", "asd123"); 438 fireEvent("//input[@name='field62']", "blur"); 439 validateErrorImage(false); 440 441 //---------------------------------------------Alpha Numeric with options Text------------------------------// 442 waitAndType("//input[@name='field63']", "123^we"); 443 fireEvent("//input[@name='field63']", "blur"); 444 validateErrorImage(true); 445 446 waitAndType("//input[@name='field63']", "-123_asd"); 447 fireEvent("//input[@name='field63']", "blur"); 448 validateErrorImage(true); 449 450 waitAndType("//input[@name='field63']", "123 23 @#"); 451 fireEvent("//input[@name='field63']", "blur"); 452 453 waitAndType("//input[@name='field63']", "as_de 456/123"); 454 fireEvent("//input[@name='field63']", "blur"); 455 validateErrorImage(false); 456 457 //---------------------------------------------Alpha with Whitespace and commas Text------------------------------// 458 waitAndType("//input[@name='field64']", "123^we"); 459 fireEvent("//input[@name='field64']", "blur"); 460 validateErrorImage(true); 461 462 waitAndType("//input[@name='field64']", "asd_pqr"); 463 fireEvent("//input[@name='field64']", "blur"); 464 validateErrorImage(true); 465 466 waitAndType("//input[@name='field64']", "asd/def"); 467 fireEvent("//input[@name='field64']", "blur"); 468 validateErrorImage(true); 469 470 waitAndType("//input[@name='field64']", "asd ,pqr"); 471 fireEvent("//input[@name='field64']", "blur"); 472 validateErrorImage(false); 473 474 //---------------------------------------------AlphaPatterrn with disallowed charset Text------------------------------// 475 waitAndType("//input[@name='field76']", "123"); 476 fireEvent("//input[@name='field76']", "blur"); 477 validateErrorImage(true); 478 479 waitAndType("//input[@name='field76']", "`abcd`"); 480 fireEvent("//input[@name='field76']", "blur"); 481 validateErrorImage(true); 482 483 waitAndType("//input[@name='field76']", "|abcd|"); 484 fireEvent("//input[@name='field76']", "blur"); 485 validateErrorImage(true); 486 487 waitAndType("//input[@name='field76']", "~abcd~"); 488 fireEvent("//input[@name='field76']", "blur"); 489 validateErrorImage(true); 490 491 waitAndType("//input[@name='field76']", " ab_c d_ef "); 492 fireEvent("//input[@name='field76']", "blur"); 493 validateErrorImage(false); 494 495 //---------------------------------------------Anything with No Whitespace Text------------------------------// 496 waitAndType("//input[@name='field65']", "123 ^we"); 497 fireEvent("//input[@name='field65']", "blur"); 498 validateErrorImage(true); 499 500 waitAndType("//input[@name='field65']", "123^we!@#^&*~:"); 501 fireEvent("//input[@name='field65']", "blur"); 502 validateErrorImage(false); 503 504 //---------------------------------------------CharacterSet Text------------------------------// 505 waitAndType("//input[@name='field66']", "123 ^we"); 506 fireEvent("//input[@name='field66']", "blur"); 507 validateErrorImage(true); 508 509 waitAndType("//input[@name='field66']", "123_^we"); 510 fireEvent("//input[@name='field66']", "blur"); 511 validateErrorImage(true); 512 513 waitAndType("//input[@name='field66']", "abc ABC"); 514 fireEvent("//input[@name='field66']", "blur"); 515 validateErrorImage(true); 516 517 waitAndType("//input[@name='field66']", "aAbBcC"); 518 fireEvent("//input[@name='field66']", "blur"); 519 validateErrorImage(false); 520 521 //---------------------------------------------Numeric Character Text------------------------------// 522 waitAndType("//input[@name='field67']", "123 ^we"); 523 fireEvent("//input[@name='field67']", "blur"); 524 validateErrorImage(true); 525 526 waitAndType("//input[@name='field67']", "123/10"); 527 fireEvent("//input[@name='field67']", "blur"); 528 validateErrorImage(true); 529 530 waitAndType("//input[@name='field67']", "(123.00)"); 531 fireEvent("//input[@name='field67']", "blur"); 532 validateErrorImage(true); 533 534 waitAndType("//input[@name='field67']", "(12-3)"); 535 fireEvent("//input[@name='field67']", "blur"); 536 validateErrorImage(false); 537 538 //---------------------------------------------Valid Chars Custom Text------------------------------// 539 waitAndType("//input[@name='field68']", "123.123"); 540 fireEvent("//input[@name='field68']", "blur"); 541 validateErrorImage(true); 542 543 waitAndType("//input[@name='field68']", "a.b"); 544 fireEvent("//input[@name='field68']", "blur"); 545 validateErrorImage(true); 546 547 waitAndType("//input[@name='field68']", "123 qwe"); 548 fireEvent("//input[@name='field68']", "blur"); 549 validateErrorImage(true); 550 551 waitAndType("//input[@name='field68']", "5.a"); 552 fireEvent("//input[@name='field68']", "blur"); 553 validateErrorImage(true); 554 555 waitAndType("//input[@name='field68']", "a.0,b.4"); 556 fireEvent("//input[@name='field68']", "blur"); 557 validateErrorImage(true); 558 559 waitAndType("//input[@name='field68']", "a.0"); 560 fireEvent("//input[@name='field68']", "blur"); 561 validateErrorImage(false); 562 563 } 564 565 public void validateErrorImage(boolean validateVisible) throws Exception { 566 Thread.sleep(500); 567 for (int second = 0;; second++) { 568 if (second >= 5) 569 Assert.fail("timeout"); 570 try { 571 if (validateVisible) { 572 573 if (isVisible("css=img.uif-validationImage")); 574 break; 575 } else { 576 577 if (! isVisible("css=img.uif-validationImage")) 578 break; 579 } 580 581 } catch (Exception e) {} 582 Thread.sleep(1000); 583 } 584 if (validateVisible) { 585 Assert.assertTrue(isVisible("css=img.uif-validationImage")); 586 } else { 587 Assert.assertTrue(! isVisible("css=img.uif-validationImage")); 588 } 589 } 590 }