/* * Copyright 2002-2013 the original author or authors. * * 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.springframework.validation; import org.junit.Test; import org.springframework.tests.sample.beans.TestBean; import org.springframework.validation.DefaultMessageCodesResolver.Format; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; /** * Tests for {@link DefaultMessageCodesResolver}. * * @author Phillip Webb */ public class DefaultMessageCodesResolverTests { private DefaultMessageCodesResolver resolver = new DefaultMessageCodesResolver(); @Test public void shouldResolveMessageCode() throws Exception { String[] codes = resolver.resolveMessageCodes("errorCode", "objectName"); assertThat(codes, is(equalTo(new String[] { "errorCode.objectName", "errorCode" }))); } @Test public void shouldResolveFieldMessageCode() throws Exception { String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "field", TestBean.class); assertThat(codes, is(equalTo(new String[] { "errorCode.objectName.field", "errorCode.field", "errorCode.org.springframework.tests.sample.beans.TestBean", "errorCode" }))); } @Test public void shouldResolveIndexedFieldMessageCode() throws Exception { String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "a.b[3].c[5].d", TestBean.class); assertThat(codes, is(equalTo(new String[] { "errorCode.objectName.a.b[3].c[5].d", "errorCode.objectName.a.b[3].c.d", "errorCode.objectName.a.b.c.d", "errorCode.a.b[3].c[5].d", "errorCode.a.b[3].c.d", "errorCode.a.b.c.d", "errorCode.d", "errorCode.org.springframework.tests.sample.beans.TestBean", "errorCode" }))); } @Test public void shouldResolveMessageCodeWithPrefix() throws Exception { resolver.setPrefix("prefix."); String[] codes = resolver.resolveMessageCodes("errorCode", "objectName"); assertThat(codes, is(equalTo(new String[] { "prefix.errorCode.objectName", "prefix.errorCode" }))); } @Test public void shouldResolveFieldMessageCodeWithPrefix() throws Exception { resolver.setPrefix("prefix."); String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "field", TestBean.class); assertThat(codes, is(equalTo(new String[] { "prefix.errorCode.objectName.field", "prefix.errorCode.field", "prefix.errorCode.org.springframework.tests.sample.beans.TestBean", "prefix.errorCode" }))); } @Test public void shouldSupportNullPrefix() throws Exception { resolver.setPrefix(null); String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "field", TestBean.class); assertThat(codes, is(equalTo(new String[] { "errorCode.objectName.field", "errorCode.field", "errorCode.org.springframework.tests.sample.beans.TestBean", "errorCode" }))); } @Test public void shouldSupportMalformedIndexField() throws Exception { String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "field[", TestBean.class); assertThat(codes, is(equalTo(new String[] { "errorCode.objectName.field[", "errorCode.field[", "errorCode.org.springframework.tests.sample.beans.TestBean", "errorCode" }))); } @Test public void shouldSupportNullFieldType() throws Exception { String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "field", null); assertThat(codes, is(equalTo(new String[] { "errorCode.objectName.field", "errorCode.field", "errorCode" }))); } @Test public void shouldSupportPostfixFormat() throws Exception { resolver.setMessageCodeFormatter(Format.POSTFIX_ERROR_CODE); String[] codes = resolver.resolveMessageCodes("errorCode", "objectName"); assertThat(codes, is(equalTo(new String[] { "objectName.errorCode", "errorCode" }))); } @Test public void shouldSupportFieldPostfixFormat() throws Exception { resolver.setMessageCodeFormatter(Format.POSTFIX_ERROR_CODE); String[] codes = resolver.resolveMessageCodes("errorCode", "objectName", "field", TestBean.class); assertThat(codes, is(equalTo(new String[] { "objectName.field.errorCode", "field.errorCode", "org.springframework.tests.sample.beans.TestBean.errorCode", "errorCode" }))); } @Test public void shouldSupportCustomFormat() throws Exception { resolver.setMessageCodeFormatter(new MessageCodeFormatter() { @Override public String format(String errorCode, String objectName, String field) { return DefaultMessageCodesResolver.Format.toDelimitedString( "CUSTOM-" + errorCode, objectName, field); } }); String[] codes = resolver.resolveMessageCodes("errorCode", "objectName"); assertThat(codes, is(equalTo(new String[] { "CUSTOM-errorCode.objectName", "CUSTOM-errorCode" }))); } }