001 /*
002 * Copyright 2002-2007 the original author or authors.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005 * use this file except in compliance with the License. You may obtain a copy of
006 * the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013 * License for the specific language governing permissions and limitations under
014 * the License.
015 */
016 package org.springframework.binding.form.support;
017
018 import java.util.Locale;
019
020 import junit.framework.TestCase;
021
022 import org.springframework.beans.TypeMismatchException;
023 import org.springframework.binding.form.FieldFace;
024 import org.springframework.binding.format.InvalidFormatException;
025 import org.springframework.binding.validation.ValidationMessage;
026 import org.springframework.binding.value.support.ValueHolder;
027 import org.springframework.context.support.MessageSourceAccessor;
028 import org.springframework.context.support.StaticMessageSource;
029 import org.springframework.richclient.core.LabelInfo;
030
031 /**
032 * Testcase for <code>DefaultBindingErrorMessageProvider</code>
033 *
034 * @author Peter De Bruycker
035 */
036 public class DefaultBindingErrorMessageProviderTests extends TestCase {
037
038 public void testGetErrorMessage() {
039 DefaultBindingErrorMessageProvider provider = new DefaultBindingErrorMessageProvider();
040
041 TestAbstractFormModel formModel = new TestAbstractFormModel(new Object()) {
042 public FieldFace getFieldFace(String field) {
043 return new DefaultFieldFace("Some Property", "", "", new LabelInfo("Some Property"), null);
044 }
045 };
046 formModel.add("someProperty", new ValueHolder("value"));
047
048 StaticMessageSource messageSource = new StaticMessageSource();
049 messageSource.addMessage("typeMismatch", Locale.getDefault(), "{0} has an invalid format \"{1}\"");
050 MessageSourceAccessor messageSourceAccessor = new MessageSourceAccessor(messageSource);
051 provider.setMessageSourceAccessor(messageSourceAccessor);
052
053 ValidationMessage message = provider.getErrorMessage(formModel, "someProperty", "new value",
054 new IllegalArgumentException());
055
056 assertNotNull(message);
057 assertEquals("someProperty", message.getProperty());
058 assertEquals("Some Property has an invalid format \"new value\"", message.getMessage());
059 }
060
061 public void testGetMessageCodeForException() {
062 DefaultBindingErrorMessageProvider provider = new DefaultBindingErrorMessageProvider();
063
064 assertEquals("typeMismatch", provider.getMessageCodeForException(new TypeMismatchException(new Object(),
065 String.class)));
066 assertEquals("required", provider.getMessageCodeForException(new NullPointerException()));
067 assertEquals("typeMismatch", provider.getMessageCodeForException(new InvalidFormatException("", "")));
068 assertEquals("typeMismatch", provider.getMessageCodeForException(new IllegalArgumentException()));
069 assertEquals("required", provider.getMessageCodeForException(new RuntimeException(new NullPointerException())));
070 assertEquals("unknown", provider.getMessageCodeForException(new UnsupportedOperationException()));
071 }
072
073 }