/* * Copyright (c) 2007 NTT DATA Corporation * * 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 jp.terasoluna.fw.validation; import static java.util.Arrays.asList; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsEqual.equalTo; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static uk.org.lidalia.slf4jtest.LoggingEvent.error; import java.util.ArrayList; import java.util.Collection; import jp.terasoluna.fw.util.PropertyAccessException; import org.apache.commons.validator.Field; import org.apache.commons.validator.ValidatorAction; import org.apache.commons.validator.ValidatorException; import org.apache.commons.validator.Var; import org.junit.After; import org.junit.Before; import org.junit.Test; import uk.org.lidalia.slf4jtest.TestLogger; import uk.org.lidalia.slf4jtest.TestLoggerFactory; /** * {@link jp.terasoluna.fw.validation.FieldChecks} クラスのブラックボックステスト。 * <p> * <h4>【クラスの概要】</h4> TERASOLUNAの入力チェック機能で共通に使用される検証ルールクラス。 * <p> * @see jp.terasoluna.fw.validation.FieldChecks */ public class FieldChecksTest08 { private TestLogger logger = TestLoggerFactory.getTestLogger( FieldChecks.class); /** * テスト用インスタンス。 */ private ValidatorAction va = null; /** * テスト用インスタンス。 */ private Field field = null; /** * テスト用インスタンス。 */ private FieldChecks_ValidationErrorsImpl01 errors = null; /** * 初期化処理を行う。 */ @Before public void setUp() { va = new ValidatorAction(); field = new Field(); errors = new FieldChecks_ValidationErrorsImpl01(); } /** * 終了処理を行う。 * @throws Exception このメソッドで発生した例外 */ @After public void tearDown() { logger.clear(); } /** * testValidateNumericString01() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:null<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanがnullの場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateNumericString01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateNumericString(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateNumericString02() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:""<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanが空文字の場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateNumericString02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateNumericString("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateNumericString03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:100.05<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br> * <br> * 引数のbeanに数字以外の文字が含まれる場合、エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateNumericString03() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateNumericString("100.05", va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertEquals("100.05", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateNumericString04() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:1234567890<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanが数字のみで構成されている場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateNumericString04() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateNumericString("1234567890", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateStringLength01() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:null<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanがnullの場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateStringLength(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateStringLength02() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:""<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanが空文字の場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateStringLength("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateStringLength03() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * stringLength=null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. "; * <br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. ", * new NumberFormatException()<br> * <br> * varのstringLengthがnullの場合、ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength03() throws Exception { // テスト実施 // 判定 try { new FieldChecks().validateStringLength("test", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. "; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NumberFormatException.class)); } } /** * testValidateStringLength04() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * stringLength=""<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. ", * new NumberFormatException()<br> * <br> * varのstringLengthが空文字の場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength04() throws Exception { // 前処理 Var var = new Var(); var.setName("stringLength"); var.setValue(""); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateStringLength("test", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. "; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NumberFormatException.class)); } } /** * testValidateStringLength05() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * stringLength="test"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - stringLength is not number. You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - stringLength is not number. You'll have to check it over. ", new * NumberFormatException()<br> * <br> * varのstringLengthが数値に変換できない場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength05() throws Exception { // 前処理 Var var = new Var(); var.setName("stringLength"); var.setValue("test"); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateStringLength("test", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- stringLength is not number. " + "You'll have to check it over. "; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NumberFormatException.class)); } } /** * testValidateStringLength06() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * stringLength="3"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br> * <br> * 引数のbeanの桁数が、varのstringLengthの値より大きい場合、 エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength06() throws Exception { // 前処理 Var var = new Var(); var.setName("stringLength"); var.setValue("3"); field.addVar(var); // テスト実施 // 判定 assertFalse(new FieldChecks().validateStringLength("test", va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertEquals("test", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateStringLength07() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * stringLength="5"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br> * <br> * 引数のbeanの桁数が、varのstringLengthの値より小さい場合、 エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength07() throws Exception { // 前処理 Var var = new Var(); var.setName("stringLength"); var.setValue("5"); field.addVar(var); // テスト実施 // 判定 assertFalse(new FieldChecks().validateStringLength("test", va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertEquals("test", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateStringLength08() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * stringLength="4"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの桁数が、varのstringLengthの値と一致する場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateStringLength08() throws Exception { // 前処理 Var var = new Var(); var.setName("stringLength"); var.setValue("4"); field.addVar(var); // テスト実施 // 判定 assertTrue(new FieldChecks().validateStringLength("test", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateArrayRange01() <br> * <br> * (正常系) <br> * 観点:C,F,G <br> * <br> * 入力値:(引数) bean:null<br> * (引数) va:not null<br> * (引数) field:property="field"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ: "target of validateArrayRange must be not null."<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ: "target of validateArrayRange must be not null."<br> * <br> * 引数のbeanがnullの場合、ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange01() throws Exception { // 前処理 field.setProperty("field"); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(null, va, field, errors); fail(); } catch (ValidatorException e) { String message = "target of validateArrayRange must be not null."; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(message)))); } } /** * testValidateArrayRange02() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * testField属性が存在しない<br> * (引数) va:not null<br> * (引数) field:property="testField"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Cannot get property type[" + JavaBean.class.getName+".testField]"<br> * (状態変化) ログ:ValidatorException<br> * メッセージ:"Cannot get property type[" + JavaBean.class.getName+".testField]"<br> * <br> * fieldのproperty属性で指定された属性がbeanに存在しない場合、 ValidatorExceptionがスローされることを確認する。<br> * ※BeanUtil.getPropertyTypeがnullを返却する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange02() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); field.setProperty("testField"); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "Cannot get property type[" + bean.getClass() .getName() + ".testField]"; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(message)))); } } /** * testValidateArrayRange03() <br> * <br> * (異常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * (引数) va:not null<br> * (引数) field:property=null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Cannot get property type[" + JavaBean.class.getName+".null]"<br> * (状態変化) ログ:ValidatorException<br> * メッセージ:"Cannot get property type[" + JavaBean.class.getName+".null]", new PropertyAccessException(new * IllegalArgumentException())<br> * <br> * fieldのproperty属性がnullの場合、 ValidatorExceptionがスローされることを確認する。<br> * ※BeanUtil.getPropertyTypeがPropertyAccessExceptionをスローする。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange03() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "Cannot get property type[" + bean.getClass() .getName() + ".null]"; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(PropertyAccessException.class)); assertThat(logger.getLoggingEvents().get(0).getThrowable().get() .getCause(), instanceOf(IllegalArgumentException.class)); } } /** * testValidateArrayRange04() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * (引数) va:not null<br> * (引数) field:property=""<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Cannot get property type[" + JavaBean.class.getName+".testField]"<br> * (状態変化) ログ:ValidatorException<br> * メッセージ:"Cannot get property type[" + JavaBean.class.getName+".testField]"<br> * <br> * fieldのproperty属性が空文字の場合、 ValidatorExceptionがスローされることを確認する。<br> * ※BeanUtil.getPropertyTypeがnullを返却する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange04() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); field.setProperty(""); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "Cannot get property type[" + bean.getClass() .getName() + ".]"; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(message)))); } } /** * testValidateArrayRange05() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)=null<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * minArrayLength="test"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - minArrayLength is not number. You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - minArrayLength is not number. You'll have to check it over. ", new * NumberFormatException()<br> * <br> * varのminArrayLengthが数値に変換できない場合、ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange05() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField1(null); field.setProperty("field1"); Var var = new Var(); var.setName("minArrayLength"); var.setValue("test"); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- minArrayLength is not number. " + "You'll have to check it over. "; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NumberFormatException.class)); } } /** * testValidateArrayRange06() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)=null<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * maxArrayLength="test"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - maxArrayLength is not number. You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - maxArrayLength is not number. You'll have to check it over. ", new * NumberFormatException()<br> * <br> * varのmaxArrayLengthが数値に変換できない場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange06() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField1(null); field.setProperty("field1"); Var var = new Var(); var.setName("maxArrayLength"); var.setValue("test"); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- maxArrayLength is not number. " + "You'll have to check it over. "; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NumberFormatException.class)); } } /** * testValidateArrayRange07() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)=null<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * minArrayLength="0"<br> * maxArrayLength="0"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * beanのチェック対象のフィールド値がnullの場合、 配列サイズ「0」としてチェックが行われることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange07() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField1(null); field.setProperty("field1"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue("0"); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue("0"); field.addVar(var2); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateArrayRange08() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field2(String型)="test"<br> * (引数) va:not null<br> * (引数) field:property="field2"<br> * var:<br> * minArrayLength=Integer.MAX_VALUE<br> * maxArrayLength=Integer.MAX_VALUE<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"property [" + JavaBean.class.getName + ".field2] must be instance of Array or Collection." (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"property [" + JavaBean.class.getName + ".field2] must be instance of Array or Collection." <br> * beanのチェック対象のフィールドが配列・Collection型ではない場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange08() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField1(null); field.setProperty("field2"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue(String.valueOf(Integer.MAX_VALUE)); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue(String.valueOf(Integer.MAX_VALUE)); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "property [" + bean.getClass().getName() + ".field2] must be instance of Array or Collection."; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(message)))); } } /** * testValidateArrayRange09() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)={}<br> * ※要素なし<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * maxArrayLength=Integer.MAX_VALUE<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * varのminArrayLengthが取得できない場合、 範囲の最小値が0でチェックが行われることを確認。<br> * ※maxArrayLengthが省略された場合はInteger.MAX_LENGTHが最大値になるが 物理的に不可能なためテストは行わない。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange09() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField1(null); field.setProperty("field1"); Var var = new Var(); var.setName("maxArrayLength"); var.setValue(String.valueOf(Integer.MAX_VALUE)); field.addVar(var); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateArrayRange10() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)={}<br> * ※要素なし<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * minArrayLength=""<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * varのminArrayLengthが空文字の場合、範囲の最小値が0でチェックが 行われることを確認。<br> * ※maxArrayLengthが空文字の場合はInteger.MAX_LENGTHが最大値になるが 物理的に不可能なためテストは行わない。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange10() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField1(null); field.setProperty("field1"); Var var = new Var(); var.setName("minArrayLength"); var.setValue(""); field.addVar(var); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateArrayRange11() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)={<br> * "test1","test2","test3"<br> * }<br> * ※要素3<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * minArrayLength="1"<br> * maxArrayLength="5"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * beanのチェック対象の配列フィールドの要素数が、 varのminArrayLengthとmaxArrayLengthの範囲内のとき、 trueが取得できることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange11() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); String[] array = { "test1", "test2", "test3" }; bean.setField1(array); field.setProperty("field1"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue("1"); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue("5"); field.addVar(var2); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateArrayRange12() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field3(Collection型)={<br> * "test1","test2","test3"<br> * }<br> * ※要素3<br> * (引数) va:not null<br> * (引数) field:property="field3"<br> * var:<br> * minArrayLength="4"<br> * maxArrayLength="10"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br> * <br> * beanのチェック対象のCollection型フィールドの要素数が、 varのminArrayLengthとmaxArrayLengthの範囲より少ない場合、 エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange12() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); Collection<String> list = new ArrayList<String>(); list.add("test1"); list.add("test2"); list.add("test3"); bean.setField3(list); field.setProperty("field3"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue("4"); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue("10"); field.addVar(var2); // テスト実施 // 判定 assertFalse(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertSame(bean, errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateArrayRange13() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field4(int[]型)={<br> * 1,2,3,4,5,6,7,8,9,0<br> * }<br> * ※要素10<br> * (引数) va:not null<br> * (引数) field:property="field4"<br> * var:<br> * minArrayLength="1"<br> * maxArrayLength="5"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br> * <br> * beanのチェック対象のプリミティブ配列型フィールドの要素数が、 varのminArrayLengthとmaxArrayLengthの範囲より大きい場合、 エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange13() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; bean.setField4(array); field.setProperty("field4"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue("1"); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue("5"); field.addVar(var2); // テスト実施 // 判定 assertFalse(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertSame(bean, errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateArrayRange14() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field1(String[]型)={<br> * "test1","test2","test3"<br> * }<br> * ※要素3<br> * (引数) va:not null<br> * (引数) field:property="field1"<br> * var:<br> * minArrayLength="3"<br> * maxArrayLength="3"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * beanのチェック対象の配列フィールドの要素数と、 varのminArrayLengthとmaxArrayLengthの値が等しいとき、 trueが取得できることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange14() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); String[] array = { "test1", "test2", "test3" }; bean.setField1(array); field.setProperty("field1"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue("3"); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue("3"); field.addVar(var2); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArrayRange(bean, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateArrayRange15() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * field5(Stiring[]型)<br> * getField5で例外が発生する。<br> * (引数) va:not null<br> * (引数) field:property="field5"<br> * var:<br> * minArrayLength="3"<br> * maxArrayLength="3"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Cannot get property [" + JavaBean.class.getName+".field5]"<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Cannot get property [" + JavaBean.class.getName+".field5]", new PropertyAccessException(new * IllegalArgumentException())));<br> * <br> * チェック対象のプロパティの取得時に例外が発生した場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArrayRange15() throws Exception { // 前処理 FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); field.setProperty("field5"); Var var1 = new Var(); var1.setName("minArrayLength"); var1.setValue("3"); field.addVar(var1); Var var2 = new Var(); var2.setName("maxArrayLength"); var2.setValue("3"); field.addVar(var2); // テスト実施 // 判定 try { logger.clear(); new FieldChecks().validateArrayRange(bean, va, field, errors); fail(); } catch (ValidatorException e) { String message = "Cannot get property [" + bean.getClass().getName() + ".field5]"; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(PropertyAccessException.class)); assertThat(logger.getLoggingEvents().get(0).getThrowable().get() .getCause(), instanceOf(RuntimeException.class)); } } }