blob: fc08d6c1ff4bd3280defa789842e348ef993891c [file] [log] [blame]
// Copyright 2004 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry.junit.valid;
import java.util.List;
import junit.framework.TestCase;
import org.apache.tapestry.IRender;
import org.apache.tapestry.form.IFormComponent;
import org.apache.tapestry.valid.IFieldTracking;
import org.apache.tapestry.valid.RenderString;
import org.apache.tapestry.valid.ValidationConstraint;
import org.apache.tapestry.valid.ValidationDelegate;
import org.apache.tapestry.valid.ValidatorException;
/**
* Test the class {@link ValidationDelegate}.
*
*
* @author Howard Lewis Ship
* @since 1.0.8
*
**/
public class TestValidationDelegate extends TestCase
{
private ValidationDelegate d = new ValidationDelegate();
public TestValidationDelegate(String name)
{
super(name);
}
public void testHasErrorsEmpty()
{
assertEquals(false, d.getHasErrors());
}
public void testFirstErrorEmpty()
{
assertNull(d.getFirstError());
}
public void testInvalidInput()
{
IFormComponent f = new MockField("testAdd");
String errorMessage = "Need a bigger one.";
d.setFormComponent(f);
d.recordFieldInputValue("Bad Stuff");
d.record(new ValidatorException(errorMessage, ValidationConstraint.TOO_LARGE));
List fieldTracking = d.getFieldTracking();
assertEquals(1, fieldTracking.size());
IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
assertEquals(f, t.getComponent());
checkRender(errorMessage, t);
assertEquals("testAdd", t.getFieldName());
assertEquals("Bad Stuff", t.getInput());
assertEquals(ValidationConstraint.TOO_LARGE, t.getConstraint());
assertTrue(d.getHasErrors());
assertEquals(errorMessage, ((RenderString) (d.getFirstError())).getString());
}
public void testValidatorErrorRenderer()
{
IFormComponent f = new MockField("testValidatorErrorRenderer");
IRender errorRenderer = new RenderString("Just don't like it.");
d.setFormComponent(f);
d.recordFieldInputValue("Bad Stuff");
d.record(
new ValidatorException(
"Just don't like it.",
errorRenderer,
ValidationConstraint.CONSISTENCY));
List fieldTracking = d.getFieldTracking();
assertEquals(1, fieldTracking.size());
IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
assertEquals(f, t.getComponent());
assertEquals(errorRenderer, t.getErrorRenderer());
assertEquals("testValidatorErrorRenderer", t.getFieldName());
assertEquals("Bad Stuff", t.getInput());
assertEquals(ValidationConstraint.CONSISTENCY, t.getConstraint());
assertTrue(d.getHasErrors());
assertEquals(errorRenderer, d.getFirstError());
}
public void testNoError()
{
IFormComponent f = new MockField("testNoError");
d.setFormComponent(f);
d.recordFieldInputValue("Futurama");
List fieldTracking = d.getFieldTracking();
assertEquals(1, fieldTracking.size());
IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
assertEquals(f, t.getComponent());
assertEquals(null, t.getErrorRenderer());
assertEquals(false, t.isInError());
assertEquals("Futurama", t.getInput());
assertEquals(null, t.getConstraint());
assertEquals(false, d.getHasErrors());
assertNull(d.getFirstError());
}
public void testUnassociatedErrors()
{
IFormComponent f = new MockField("testUnassociatedErrors");
d.setFormComponent(f);
d.recordFieldInputValue("Bender");
d.setFormComponent(null);
d.record("Overload!", ValidationConstraint.CONSISTENCY);
assertEquals(true, d.getHasErrors());
List fieldTracking = d.getFieldTracking();
assertEquals(2, fieldTracking.size());
IFieldTracking t0 = (IFieldTracking) fieldTracking.get(0);
assertEquals(false, t0.isInError());
assertEquals(f, t0.getComponent());
IFieldTracking t1 = (IFieldTracking) fieldTracking.get(1);
assertEquals(null, t1.getComponent());
assertEquals(true, t1.isInError());
checkRender("Overload!", t1);
checkRender("Overload!", d.getFirstError());
List trackings = d.getUnassociatedTrackings();
assertEquals(1, trackings.size());
assertEquals(t1, trackings.get(0));
trackings = d.getAssociatedTrackings();
assertEquals(1, trackings.size());
assertEquals(t0, trackings.get(0));
}
/**
* In rare cases, you may add errors even though the page hasn't rendered and that's
* was causing a NPE.
*/
public void testComponentNotRecorded()
{
// This mock field neaver rendered, so it does not have a Form-assigned name.
IFormComponent f = new MockField(null);
d.setFormComponent(f);
d.record("Never rendered.", ValidationConstraint.CONSISTENCY);
assertEquals(true, d.getHasErrors());
List fieldTracking = d.getFieldTracking();
assertEquals(1, fieldTracking.size());
List trackings = d.getUnassociatedTrackings();
assertEquals(1, trackings.size());
IFieldTracking t = (IFieldTracking) trackings.get(0);
assertEquals(null, t.getComponent());
assertEquals(true, t.isInError());
checkRender("Never rendered.", t);
}
private void checkRender(String errorMessage, IFieldTracking tracking)
{
IRender render = tracking.getErrorRenderer();
checkRender(errorMessage, render);
}
private void checkRender(String errorMessage, IRender render)
{
assertEquals(errorMessage, ((RenderString) render).getString());
}
public void testMultipleInvalidInput()
{
IFormComponent f1 = new MockField("input1");
String e1 = "And now for something completely different.";
IFormComponent f2 = new MockField("input2");
String e2 = "A man with three buttocks.";
d.setFormComponent(f1);
d.recordFieldInputValue("Monty");
d.record(new ValidatorException(e1, null));
d.setFormComponent(f2);
d.recordFieldInputValue("Python");
d.record(new ValidatorException(e2, null));
List fieldTracking = d.getFieldTracking();
assertEquals(2, fieldTracking.size());
IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
assertEquals(f1, t.getComponent());
checkRender(e1, t);
t = (IFieldTracking) fieldTracking.get(1);
assertEquals("Python", t.getInput());
checkRender(e2, t);
assertEquals(f2, t.getComponent());
}
public void testReset()
{
IFormComponent f1 = new MockField("input1");
String e1 = "And now for something completely different.";
IFormComponent f2 = new MockField("input2");
String e2 = "A man with three buttocks.";
d.setFormComponent(f1);
d.recordFieldInputValue("Monty");
d.record(new ValidatorException(e1, null));
d.setFormComponent(f2);
d.recordFieldInputValue("Python");
d.record(new ValidatorException(e2, null));
// Now, wipe out info on f1
d.setFormComponent(f1);
d.reset();
List fieldTracking = d.getFieldTracking();
assertEquals(1, fieldTracking.size());
IFieldTracking t = (IFieldTracking) fieldTracking.get(0);
assertEquals("Python", t.getInput());
checkRender(e2, t);
assertEquals(f2, t.getComponent());
}
public void testResetAll()
{
IFormComponent f1 = new MockField("input1");
String e1 = "And now for something completely different.";
IFormComponent f2 = new MockField("input2");
String e2 = "A man with three buttocks.";
d.setFormComponent(f1);
d.record(new ValidatorException(e1, null));
d.setFormComponent(f2);
d.record(new ValidatorException(e2, null));
d.setFormComponent(f1);
d.reset();
d.setFormComponent(f2);
d.reset();
assertEquals(null, d.getFieldTracking());
assertEquals(false, d.getHasErrors());
assertNull(d.getFirstError());
}
public void testClearErrors()
{
IFormComponent f = new MockField("input");
d.setFormComponent(f);
d.recordFieldInputValue("hello");
d.record("An error in the input field.", null);
assertEquals(true, d.getHasErrors());
assertNotNull(d.getFirstError());
d.clearErrors();
assertEquals(false, d.getHasErrors());
d.setFormComponent(f);
assertEquals("hello", d.getFieldInputValue());
}
}