blob: da57269899ff6e3dec03149755d614ea820787ed [file] [log] [blame]
// Copyright 2006, 2007, 2008 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.tapestry5;
import org.apache.tapestry5.test.TapestryTestCase;
import org.testng.annotations.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;
public class ValidationTrackerImplTest extends TapestryTestCase
{
@Test
public void empty_tracker_has_no_errors()
{
ValidationTracker tracker = new ValidationTrackerImpl();
assertTrue(tracker.getErrors().isEmpty());
assertFalse(tracker.getHasErrors());
}
@Test
public void order_added_is_maintained()
{
Field fielda = newFieldWithControlName("fieldA");
Field fieldb = newFieldWithControlName("fieldB");
replay();
ValidationTracker tracker = new ValidationTrackerImpl();
tracker.recordError("one");
tracker.recordError(fieldb, "fieldb: two");
tracker.recordError("three");
tracker.recordError(fielda, "fielda: four");
assertEquals(tracker.getErrors(), Arrays.asList(
"one",
"three",
"fieldb: two",
"fielda: four"));
verify();
}
@Test
public void record_input()
{
Field field = newFieldWithControlName("field");
replay();
ValidationTracker tracker = new ValidationTrackerImpl();
assertNull(tracker.getInput(field));
tracker.recordInput(field, "one");
assertEquals(tracker.getInput(field), "one");
tracker.recordInput(field, "two");
assertEquals(tracker.getInput(field), "two");
verify();
}
@Test
public void record_error_for_field()
{
Field field = newFieldWithControlName("field");
replay();
ValidationTracker tracker = new ValidationTrackerImpl();
assertFalse(tracker.getHasErrors());
assertFalse(tracker.inError(field));
assertNull(tracker.getError(field));
tracker.recordError(field, "one");
assertTrue(tracker.getHasErrors());
assertTrue(tracker.inError(field));
assertEquals(tracker.getError(field), "one");
tracker.recordError(field, "two");
assertEquals(tracker.getError(field), "two");
verify();
}
@Test
public void record_error_for_form()
{
ValidationTracker tracker = new ValidationTrackerImpl();
assertFalse(tracker.getHasErrors());
assertTrue(tracker.getErrors().isEmpty());
tracker.recordError("one");
assertEquals(tracker.getErrors(), Arrays.asList("one"));
tracker.recordError("two");
assertEquals(tracker.getErrors(), Arrays.asList("one", "two"));
}
@Test
public void data_survives_serialization() throws Exception
{
Field fielda = newFieldWithControlName("fieldA");
Field fieldb = newFieldWithControlName("fieldB");
Field fieldc = newFieldWithControlName("fieldC");
replay();
ValidationTracker tracker = new ValidationTrackerImpl();
tracker.recordError("one");
tracker.recordError(fieldb, "fieldb: two");
tracker.recordError("three");
tracker.recordError(fielda, "fielda: four");
ValidationTracker copy = cloneBySerialiation(tracker);
copy.recordError(fieldc, "fieldc: five");
assertEquals(copy.getErrors(), Arrays.asList(
"one",
"three",
"fieldb: two",
"fielda: four",
"fieldc: five"));
verify();
}
@Test
public void clear_removes_all()
{
Field fielda = newFieldWithControlName("fieldA");
Field fieldb = newFieldWithControlName("fieldB");
replay();
ValidationTracker tracker = new ValidationTrackerImpl();
tracker.recordError("one");
tracker.recordInput(fieldb, "input b");
tracker.recordError(fieldb, "fieldb: two");
tracker.recordError("three");
tracker.recordInput(fielda, "input a");
tracker.recordError(fielda, "fielda: four");
tracker.clear();
assertFalse(tracker.getHasErrors());
assertTrue(tracker.getErrors().isEmpty());
assertNull(tracker.getInput(fielda));
assertNull(tracker.getInput(fieldb));
verify();
}
private final Field newFieldWithControlName(String controlName)
{
Field field = mockField();
// Fields generated this way, for the purposes of this test, do not
// ever change their controlName. In real life, elementNames can change.
expect(field.getControlName()).andReturn(controlName).atLeastOnce();
return field;
}
@SuppressWarnings("unchecked")
protected final <T> T cloneBySerialiation(T input) throws Exception
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(input);
oos.close();
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
T result = (T) ois.readObject();
ois.close();
return result;
}
}