blob: 0fefa31357a2db42917e2845881f172e7fdb5f25 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.wicket.resource.loader;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.IMarkupResourceStreamProvider;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.PasswordTextField;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.form.validation.IFormValidator;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.lang.Objects;
import org.apache.wicket.util.resource.IResourceStream;
import org.apache.wicket.util.resource.StringResourceStream;
import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTestCase;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
import org.junit.Test;
/**
* Tests for ValidatorStringResourceLoader
*
* @since 1.5.5
*/
public class ValidatorStringResourceLoaderTest extends WicketTestCase
{
/**
* Tests that resource bundle is properly loaded for implementations of
* IValidator need to be wrapped in ValidatorAdapter
*
* https://issues.apache.org/jira/browse/WICKET-4379
*/
@Test
public void interfaceValidator()
{
tester.startPage(new ValidatorLoaderPage(new InterfaceValidator()));
FormTester formTester = tester.newFormTester("form");
formTester.setValue("passwd", "anything");
formTester.submit();
tester.assertErrorMessages("Interface error loaded OK");
}
/**
* Tests that resource bundle is properly loaded for implementations of
* AbstractValidator
*
* https://issues.apache.org/jira/browse/WICKET-4379
*/
@Test
public void classValidator()
{
tester.startPage(new ValidatorLoaderPage(new ClassValidator()));
FormTester formTester = tester.newFormTester("form");
formTester.setValue("passwd", "anything");
formTester.submit();
tester.assertErrorMessages("Class error loaded OK");
}
@Test
public void formValidator()
{
tester.startPage(new FormValidatorPage());
FormTester formTester = tester.newFormTester("form");
formTester.setValue("field1", "value1");
formTester.setValue("field2", "value2");
formTester.submit();
tester.assertErrorMessages("Form Validator loaded OK");
}
private static class ValidatorLoaderPage extends WebPage implements IMarkupResourceStreamProvider
{
private ValidatorLoaderPage(IValidator<String> validator)
{
Form<Void> form = new Form<Void>("form");
add(form);
PasswordTextField passwordTextField = new PasswordTextField("passwd", Model.of(""));
form.add(passwordTextField);
passwordTextField.add(validator);
}
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
{
return new StringResourceStream("<html><body><form wicket:id='form'><input type='password' wicket:id='passwd' /></form></body></html>");
}
}
private static class ClassValidator implements IValidator<String>
{
@Override
public void validate(IValidatable<String> validatable)
{
ValidationError error = new ValidationError();
error.addKey("testError");
validatable.error(error);
}
}
private static class InterfaceValidator implements IValidator<String>
{
@Override
public void validate(IValidatable<String> validatable)
{
ValidationError error = new ValidationError();
error.addKey("testError");
validatable.error(error);
}
}
private static class FormValidatorPage extends WebPage implements IMarkupResourceStreamProvider
{
private FormValidatorPage()
{
FormValidatorEntity entity = new FormValidatorEntity();
CompoundPropertyModel<FormValidatorEntity> model = new CompoundPropertyModel<FormValidatorEntity>(entity);
Form<FormValidatorEntity> form = new Form<FormValidatorEntity>("form", model);
add(form);
TextField<String> field1 = new TextField<String>("field1");
TextField<String> field2 = new TextField<String>("field2");
form.add(field1, field2);
form.add(new FormValidator(field1, field2));
}
@Override
public IResourceStream getMarkupResourceStream(MarkupContainer container, Class<?> containerClass)
{
return new StringResourceStream("<html><body><form wicket:id='form'><input wicket:id='field1'/><input wicket:id='field2'/></form></body></html>");
}
}
private static class FormValidator implements IFormValidator
{
private final FormComponent<?> fc1;
private final FormComponent<?> fc2;
private FormValidator(FormComponent<?> fc1, FormComponent<?> fc2)
{
this.fc1 = fc1;
this.fc2 = fc2;
}
@Override
public FormComponent<?>[] getDependentFormComponents()
{
return new FormComponent<?>[] {fc1, fc2};
}
@Override
public void validate(Form<?> form)
{
if (Objects.equal(fc1.getRawInput(), fc2.getRawInput()) == false)
{
form.error(form.getString("formValidatorFailed"));
}
}
}
private static class FormValidatorEntity
{
private String field1;
private String field2;
}
}