/* * 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; } }