001 // Copyright 2005 The Apache Software Foundation 002 // 003 // Licensed under the Apache License, Version 2.0 (the "License"); 004 // you may not use this file except in compliance with the License. 005 // You may obtain a copy of the License at 006 // 007 // http://www.apache.org/licenses/LICENSE-2.0 008 // 009 // Unless required by applicable law or agreed to in writing, software 010 // distributed under the License is distributed on an "AS IS" BASIS, 011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 // See the License for the specific language governing permissions and 013 // limitations under the License. 014 015 package org.apache.tapestry.form; 016 017 import org.apache.tapestry.IBinding; 018 import org.apache.tapestry.IForm; 019 import org.apache.tapestry.IMarkupWriter; 020 import org.apache.tapestry.IRequestCycle; 021 import org.apache.tapestry.spec.ComponentSpecification; 022 import org.apache.tapestry.valid.IValidationDelegate; 023 import org.apache.tapestry.valid.ValidatorException; 024 import static org.easymock.EasyMock.expect; 025 import static org.easymock.EasyMock.expectLastCall; 026 import org.testng.annotations.Test; 027 028 /** 029 * Tests for {@link org.apache.tapestry.form.TextArea}. 030 * 031 * @author Howard M. Lewis Ship 032 * @since 4.0 033 */ 034 @Test(sequential=true) 035 public class TestTextArea extends BaseFormComponentTestCase 036 { 037 public void testRewind() 038 { 039 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 040 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 041 042 TextArea component = newInstance(TextArea.class, new Object[] 043 { "translatedFieldSupport", tfs, "validatableFieldSupport", vfs }); 044 045 IRequestCycle cycle = newCycle(); 046 IForm form = newMock(IForm.class); 047 048 IMarkupWriter writer = newWriter(); 049 050 IValidationDelegate delegate = newDelegate(); 051 052 expect(cycle.renderStackPush(component)).andReturn(component); 053 054 trainGetForm(cycle, form); 055 trainWasPrerendered(form, writer, component, false); 056 trainGetDelegate(form, delegate); 057 058 delegate.setFormComponent(component); 059 060 trainGetElementId(form, component, "barney"); 061 trainIsRewinding(form, true); 062 063 trainGetParameter(cycle, "barney", " text area value "); 064 065 try 066 { 067 expect(tfs.parse(component, " text area value ")).andReturn("text area value"); 068 069 vfs.validate(component, writer, cycle, "text area value"); 070 } 071 catch (ValidatorException e) 072 { 073 unreachable(); 074 } 075 076 expect(cycle.renderStackPop()).andReturn(component); 077 078 replay(); 079 080 component.render(writer, cycle); 081 082 verify(); 083 084 assertEquals("text area value", component.getValue()); 085 } 086 087 @SuppressWarnings("ALL") 088 public void testRewindTranslateFailed() 089 { 090 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 091 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 092 093 TextArea component = newInstance(TextArea.class, "translatedFieldSupport", tfs, "validatableFieldSupport", vfs); 094 095 IRequestCycle cycle = newCycle(); 096 IForm form = newMock(IForm.class); 097 098 IMarkupWriter writer = newWriter(); 099 100 IValidationDelegate delegate = newDelegate(); 101 102 expect(cycle.renderStackPush(component)).andReturn(component); 103 104 trainGetForm(cycle, form); 105 trainWasPrerendered(form, writer, component, false); 106 trainGetDelegate(form, delegate); 107 108 delegate.setFormComponent(component); 109 110 trainGetElementId(form, component, "barney"); 111 trainIsRewinding(form, true); 112 113 trainGetParameter(cycle, "barney", " text area value "); 114 115 ValidatorException exception = new ValidatorException("test"); 116 117 try 118 { 119 expect(tfs.parse(component, " text area value ")).andThrow(exception); 120 } 121 catch (ValidatorException e) 122 { 123 unreachable(); 124 } 125 126 delegate.record(exception); 127 128 expect(cycle.renderStackPop()).andReturn(component); 129 130 replay(); 131 132 component.render(writer, cycle); 133 134 verify(); 135 136 assertNull(component.getValue()); 137 } 138 139 @SuppressWarnings("ALL") 140 public void testRewindValidateFailed() 141 { 142 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 143 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 144 145 TextArea component = newInstance(TextArea.class, "translatedFieldSupport", tfs, "validatableFieldSupport", vfs); 146 147 IRequestCycle cycle = newCycle(); 148 IForm form = newMock(IForm.class); 149 150 IMarkupWriter writer = newWriter(); 151 152 IValidationDelegate delegate = newDelegate(); 153 154 expect(cycle.renderStackPush(component)).andReturn(component); 155 156 trainGetForm(cycle, form); 157 trainWasPrerendered(form, writer, component, false); 158 trainGetDelegate(form, delegate); 159 160 delegate.setFormComponent(component); 161 162 trainGetElementId(form, component, "barney"); 163 trainIsRewinding(form, true); 164 165 trainGetParameter(cycle, "barney", " text area value "); 166 167 ValidatorException exception = new ValidatorException("test"); 168 169 try 170 { 171 expect(tfs.parse(component, " text area value ")).andReturn("text area value"); 172 173 vfs.validate(component, writer, cycle, "text area value"); 174 expectLastCall().andThrow(exception); 175 } 176 catch (ValidatorException e) 177 { 178 unreachable(); 179 } 180 181 delegate.record(exception); 182 183 expect(cycle.renderStackPop()).andReturn(component); 184 185 replay(); 186 187 component.render(writer, cycle); 188 189 verify(); 190 191 assertNull(component.getValue()); 192 } 193 194 public void testWasPrerendered() 195 { 196 TextArea component = (TextArea) newInstance(TextArea.class); 197 IRequestCycle cycle = newCycle(); 198 IForm form = newMock(IForm.class); 199 200 IMarkupWriter writer = newWriter(); 201 202 expect(cycle.renderStackPush(component)).andReturn(component); 203 204 trainGetForm(cycle, form); 205 trainWasPrerendered(form, writer, component, true); 206 207 expect(cycle.renderStackPop()).andReturn(component); 208 209 replay(); 210 211 component.render(writer, cycle); 212 213 verify(); 214 } 215 216 public void testRewindNotForm() 217 { 218 TextArea component = (TextArea) newInstance(TextArea.class); 219 IRequestCycle cycle = newCycle(); 220 IForm form = newMock(IForm.class); 221 222 IMarkupWriter writer = newWriter(); 223 224 IValidationDelegate delegate = newDelegate(); 225 226 expect(cycle.renderStackPush(component)).andReturn(component); 227 228 trainGetForm(cycle, form); 229 trainWasPrerendered(form, writer, component, false); 230 trainGetDelegate(form, delegate); 231 232 delegate.setFormComponent(component); 233 234 trainGetElementId(form, component, "barney"); 235 trainIsRewinding(form, false); 236 trainIsRewinding(cycle, true); 237 238 expect(cycle.renderStackPop()).andReturn(component); 239 240 replay(); 241 242 component.render(writer, cycle); 243 244 verify(); 245 } 246 247 public void testRewindDisabled() 248 { 249 TextArea component = (TextArea) newInstance(TextArea.class, "disabled", Boolean.TRUE); 250 IRequestCycle cycle = newCycle(); 251 IForm form = newMock(IForm.class); 252 253 IMarkupWriter writer = newWriter(); 254 255 IValidationDelegate delegate = newDelegate(); 256 257 expect(cycle.renderStackPush(component)).andReturn(component); 258 259 trainGetForm(cycle, form); 260 trainWasPrerendered(form, writer, component, false); 261 trainGetDelegate(form, delegate); 262 263 delegate.setFormComponent(component); 264 265 trainGetElementId(form, component, "barney"); 266 trainIsRewinding(form, true); 267 268 expect(cycle.renderStackPop()).andReturn(component); 269 270 replay(); 271 272 component.render(writer, cycle); 273 274 assertNull(component.getValue()); 275 276 verify(); 277 } 278 279 public void testRender() 280 { 281 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 282 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 283 284 IRequestCycle cycle = newCycle(); 285 IForm form = newMock(IForm.class); 286 287 IMarkupWriter writer = newBufferWriter(); 288 289 MockDelegate delegate = new MockDelegate(); 290 291 TextArea component = newInstance(TextArea.class, 292 "name", "fred", 293 "translatedFieldSupport", tfs, 294 "validatableFieldSupport", vfs, 295 "value", " text area value "); 296 297 expect(cycle.renderStackPush(component)).andReturn(component); 298 299 trainGetForm(cycle, form); 300 trainWasPrerendered(form, writer, component, false); 301 trainGetDelegate(form, delegate); 302 303 delegate.setFormComponent(component); 304 305 trainGetElementId(form, component, "fred"); 306 trainIsRewinding(form, false); 307 trainIsRewinding(cycle, false); 308 309 form.setFormFieldUpdating(true); 310 delegate.setFormComponent(component); 311 312 expect(tfs.format(component, " text area value ")).andReturn("text area value"); 313 tfs.renderContributions(component, writer, cycle); 314 vfs.renderContributions(component, writer, cycle); 315 316 expect(cycle.renderStackPop()).andReturn(component); 317 318 replay(); 319 320 component.render(writer, cycle); 321 322 verify(); 323 324 assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" id=\"fred\" class=\"validation-delegate\">text area value</textarea></span>"); 325 } 326 327 public void testRenderDisabled() 328 { 329 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 330 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 331 332 IRequestCycle cycle = newCycle(); 333 IForm form = newMock(IForm.class); 334 335 IMarkupWriter writer = newBufferWriter(); 336 337 MockDelegate delegate = new MockDelegate(); 338 339 TextArea component = newInstance(TextArea.class, 340 "name", "fred", 341 "translatedFieldSupport", tfs, 342 "validatableFieldSupport", vfs, 343 "value", " text area value ", 344 "disabled", Boolean.TRUE); 345 346 expect(cycle.renderStackPush(component)).andReturn(component); 347 348 trainGetForm(cycle, form); 349 trainWasPrerendered(form, writer, component, false); 350 trainGetDelegate(form, delegate); 351 352 delegate.setFormComponent(component); 353 354 trainGetElementId(form, component, "fred"); 355 trainIsRewinding(form, false); 356 trainIsRewinding(cycle, false); 357 358 form.setFormFieldUpdating(true); 359 360 delegate.setFormComponent(component); 361 362 expect(tfs.format(component, " text area value ")).andReturn("text area value"); 363 tfs.renderContributions(component, writer, cycle); 364 vfs.renderContributions(component, writer, cycle); 365 366 expect(cycle.renderStackPop()).andReturn(component); 367 368 replay(); 369 370 component.render(writer, cycle); 371 372 verify(); 373 374 assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" disabled=\"disabled\" id=\"fred\" class=\"validation-delegate\">text area value</textarea></span>"); 375 } 376 377 public void testRenderWithInformalParameters() 378 { 379 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 380 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 381 382 IRequestCycle cycle = newCycle(); 383 IForm form = newMock(IForm.class); 384 385 IMarkupWriter writer = newBufferWriter(); 386 387 MockDelegate delegate = new MockDelegate(); 388 389 IBinding binding = newBinding("informal-value"); 390 391 TextArea component = newInstance(TextArea.class, 392 "name", "fred", 393 "translatedFieldSupport", tfs, 394 "validatableFieldSupport", vfs, 395 "value", " text area value ", 396 "specification", new ComponentSpecification()); 397 398 component.setBinding("informal", binding); 399 400 expect(cycle.renderStackPush(component)).andReturn(component); 401 402 trainGetForm(cycle, form); 403 trainWasPrerendered(form, writer, component, false); 404 trainGetDelegate(form, delegate); 405 406 delegate.setFormComponent(component); 407 408 trainGetElementId(form, component, "fred"); 409 trainIsRewinding(form, false); 410 trainIsRewinding(cycle, false); 411 412 form.setFormFieldUpdating(true); 413 414 delegate.setFormComponent(component); 415 416 expect(tfs.format(component, " text area value ")).andReturn("text area value"); 417 418 tfs.renderContributions(component, writer, cycle); 419 vfs.renderContributions(component, writer, cycle); 420 421 expect(cycle.renderStackPop()).andReturn(component); 422 423 replay(); 424 425 component.render(writer, cycle); 426 427 verify(); 428 429 assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" id=\"fred\" class=\"validation-delegate\" informal=\"informal-value\">text area value</textarea></span>"); 430 } 431 432 public void testRenderNullValue() 433 { 434 TranslatedFieldSupport tfs = newMock(TranslatedFieldSupport.class); 435 ValidatableFieldSupport vfs = newMock(ValidatableFieldSupport.class); 436 437 IRequestCycle cycle = newCycle(); 438 IForm form = newMock(IForm.class); 439 440 IMarkupWriter writer = newBufferWriter(); 441 442 MockDelegate delegate = new MockDelegate(); 443 444 TextArea component = newInstance(TextArea.class, 445 "name", "fred", 446 "translatedFieldSupport", tfs, 447 "validatableFieldSupport", vfs); 448 449 expect(cycle.renderStackPush(component)).andReturn(component); 450 451 trainGetForm(cycle, form); 452 trainWasPrerendered(form, writer, component, false); 453 trainGetDelegate(form, delegate); 454 455 delegate.setFormComponent(component); 456 457 trainGetElementId(form, component, "fred"); 458 trainIsRewinding(form, false); 459 trainIsRewinding(cycle, false); 460 461 form.setFormFieldUpdating(true); 462 463 delegate.setFormComponent(component); 464 465 expect(tfs.format(component, null)).andReturn(""); 466 tfs.renderContributions(component, writer, cycle); 467 vfs.renderContributions(component, writer, cycle); 468 469 expect(cycle.renderStackPop()).andReturn(component); 470 471 replay(); 472 473 component.render(writer, cycle); 474 475 verify(); 476 477 assertBuffer("<span class=\"prefix\"><textarea name=\"fred\" id=\"fred\" class=\"validation-delegate\"></textarea></span>"); 478 } 479 }