/* * 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.assertNull; 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.List; 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 FieldChecksTest10 { 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(); } /** * 終了処理を行う。 */ @After public void tearDown() { logger.clear(); } /** * testValidateDateRange01() <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 testValidateDateRange01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDateRange(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDateRange02() <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 testValidateDateRange02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDateRange("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDateRange03() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var<br> * datePattern="abc"<br> * datePatternStrict="yyyy.MM.dd"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:Illegal pattern character 'b'<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:Illegal pattern character 'b'<br> * <br> * varのdatePatternに不正なパターン文字が含まれる場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange03() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("abc"); field.addVar(var1); Var var2 = new Var(); var2.setName("datePatternStrict"); var2.setValue("yyyy.MM.dd"); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateDateRange("2005/11/22", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("Illegal pattern character 'b'", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "Illegal pattern character 'b'")))); } } /** * testValidateDateRange04() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var<br> * datePatternStrict="abc"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:Illegal pattern character 'b'<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:Illegal pattern character 'b'<br> * <br> * varのdatePatternStrictに不正なパターン文字が含まれる場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange04() throws Exception { // 前処理 Var var = new Var(); var.setName("datePatternStrict"); var.setValue("abc"); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateDateRange("2005/11/22", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("Illegal pattern character 'b'", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "Illegal pattern character 'b'")))); } } /** * testValidateDateRange05() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern=null<br> * datePatternStrict=null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:datePattern or datePatternStrict must be specified.<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:datePattern or datePatternStrict must be specified.<br> * <br> * varのdatePattern、datePatternStrictがnullの場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange05() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue(null); field.addVar(var1); Var var2 = new Var(); var2.setName("datePatternStrict"); var2.setValue(null); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateDateRange("2005/11/22", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("datePattern or datePatternStrict must be specified.", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "datePattern or datePatternStrict must be specified.")))); } } /** * testValidateDateRange06() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern=""<br> * datePatternStrict=""<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:datePattern or datePatternStrict must be specified.<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:datePattern or datePatternStrict must be specified.<br> * <br> * varのdatePattern、datePatternStrictが空文字の場合、ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange06() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue(""); field.addVar(var1); Var var2 = new Var(); var2.setName("datePatternStrict"); var2.setValue(""); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateDateRange("2005/11/22", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("datePattern or datePatternStrict must be specified.", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "datePattern or datePatternStrict must be specified.")))); } } /** * testValidateDateRange07() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"test"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br> * <br> * beanが日付に変換できない場合、エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange07() throws Exception { // 前処理 Var var = new Var(); var.setName("datePattern"); var.setValue("yyyy/MM/dd"); field.addVar(var); // テスト実施 // 判定 assertFalse(new FieldChecks().validateDateRange("test", va, field, errors)); assertEquals(1, errors.addErrorCount); assertEquals("test", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateDateRange08() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * startDate="test"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:startDate is unparseable[test]<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:startDate is unparseable[test]<br> * <br> * startDateが日付に変換できない場合、ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange08() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("startDate"); var2.setValue("test"); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateDateRange("2005/11/22", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("startDate is unparseable[test]", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "startDate is unparseable[test]")))); } } /** * testValidateDateRange09() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * endDate="test"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:endDate is unparseable[test]<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:endDate is unparseable[test]<br> * <br> * endDateが日付に変換できない場合、ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange09() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("endDate"); var2.setValue("test"); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateDateRange("2005/11/22", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("endDate is unparseable[test]", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "endDate is unparseable[test]")))); } } /** * testValidateDateRange10() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * startDate="2005/11/23"<br> * endDate="2005/12/31"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br> * <br> * beanの日付がstartDateの日付以前の場合、 エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange10() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("startDate"); var2.setValue("2005/11/23"); field.addVar(var2); Var var3 = new Var(); var3.setName("endDate"); var3.setValue("2005/12/31"); field.addVar(var3); // テスト実施 // 判定 assertFalse(new FieldChecks().validateDateRange("2005/11/22", va, field, errors)); assertEquals(1, errors.addErrorCount); assertEquals("2005/11/22", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateDateRange11() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * startDate="2005/1/1"<br> * endDate="2005/11/21"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br> * <br> * beanの日付がendDateの日付以降の場合、エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange11() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("startDate"); var2.setValue("2005/1/1"); field.addVar(var2); Var var3 = new Var(); var3.setName("endDate"); var3.setValue("2005/11/21"); field.addVar(var3); // テスト実施 // 判定 assertFalse(new FieldChecks().validateDateRange("2005/11/22", va, field, errors)); assertEquals(1, errors.addErrorCount); assertEquals("2005/11/22", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateDateRange12() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/11/22"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * startDate="2005/11/22"<br> * endDate="2005/11/22"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * beanの日付とstartDate,endDateの日付が等しい場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange12() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("startDate"); var2.setValue("2005/11/22"); field.addVar(var2); Var var3 = new Var(); var3.setName("endDate"); var3.setValue("2005/11/22"); field.addVar(var3); // テスト実施 // 判定 assertTrue(new FieldChecks().validateDateRange("2005/11/22", va, field, errors)); assertEquals(0, errors.addErrorCount); } /** * testValidateDateRange13() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/1/1"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePatternStrict="yyyy/MM/dd"<br> * startDate="2005/01/01"<br> * endDate="2005/01/01"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br> * <br> * beanの日付とdatePatternStrictのパターンの文字数が等しくない場合、 エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDateRange13() throws Exception { // 前処理 Var var1 = new Var(); var1.setName("datePatternStrict"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("startDate"); var2.setValue("2005/01/01"); field.addVar(var2); Var var3 = new Var(); var3.setName("endDate"); var3.setValue("2005/01/01"); field.addVar(var3); // テスト実施 // 判定 assertFalse(new FieldChecks().validateDateRange("2005/1/1", va, field, errors)); assertEquals(1, errors.addErrorCount); assertEquals("2005/1/1", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateArraysIndex01() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:null<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"validation target bean is null."<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"validation target bean is null."<br> * <br> * 引数のbeanがnullの場合、ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex01() throws Exception { // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(null, va, field, errors); } catch (ValidatorException e) { assertEquals("validation target bean is null.", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "validation target bean is null.")))); } } /** * testValidateArraysIndex02() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:not null<br> * (引数) va:mehodParams=""<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation rule file. - Can not get argument class. You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation rule file. - Can not get argument class. You'll have to check it over. "<br> * <br> * vaからmethodParamsが取得できない場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex02() throws Exception { // 前処理 va.setMethodParams(""); // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(new Object(), va, field, errors); } catch (ValidatorException e) { String expect = "Mistake on validation rule file. " + "- Can not get argument class. You'll have to check it over. "; assertEquals(expect, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(expect)))); } } /** * testValidateArraysIndex03() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:not null<br> * (引数) va:mehodParams="aaaaa"<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation rule file. - Can not get argument class. You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation rule file. - Can not get argument class. You'll have to check it over. "<br> * <br> * vaからmethodParamsが取得できない場合、ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex03() throws Exception { // 前処理 va.setMethodParams("aaaaa"); // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(new Object(), va, field, errors); } catch (ValidatorException e) { String expect = "Mistake on validation rule file. " + "- Can not get argument class. You'll have to check it over. "; assertEquals(expect, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(expect)))); } } /** * testValidateArraysIndex04() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:not null<br> * (引数) va:mehodParams="java.lang.String"<br> * name="hoge"<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation rule file. - Can not get validateMethod. You'll have to check it over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation rule file. - Can not get validateMethod. You'll have to check it over. "<br> * <br> * vaに設定されたnameのメソッドが存在しない場合、ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex04() throws Exception { // 前処理 va.setMethodParams("java.lang.String"); va.setName("hoge"); // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(new Object(), va, field, errors); } catch (ValidatorException e) { String expect = "Mistake on validation rule file. " + "- Can not get validateMethod. You'll have to check it over. "; assertEquals(expect, e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(expect)))); } } /** * testValidateArraysIndex05() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String[] array = {<br> * "a", "b", "c"<br> * };<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:property="array"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * varのプロパティで指定されたフィールドが配列型のフィールドで、 全てのフィールドについてvaのnameで指定されたチェック違反がない場合、 trueが取得できることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex05() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setArray(new String[] { "a", "b", "c" }); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field.setProperty("array"); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArraysIndex(bean, va, field, errors)); assertEquals(0, errors.addErrorCount); } /** * testValidateArraysIndex06() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * List list = {<br> * "a", null, null, "d"<br> * };<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:property="list"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:2回呼び出される<br> * 1:bean=引数のbeanと同一<br> * field:<br> * key="lsit[1]"<br> * property="list[1]"<br> * va=引数のvaと同一<br> * 2:bean=引数のbeanと同一l<br> * field:<br> * key="list[2]"<br> * property="list[2]"<br> * va=引数のvaと同一<br> * <br> * varのプロパティで指定されたフィールドがCollection型のフィールドで、 vaのnameで指定されたチェックの違反が複数存在する場合、 その回数分errorsのaddErrorsが呼び出されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex06() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); List<String> list = new ArrayList<String>(); list.add("a"); list.add(null); list.add(null); list.add("d"); bean.setList(list); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field.setProperty("list"); // テスト実施 // 判定 assertFalse(new FieldChecks().validateArraysIndex(bean, va, field, errors)); assertEquals(2, errors.addErrorCount); assertSame(bean, errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertEquals("list[1]", ((Field) errors.fieldList.get(0)).getKey()); assertEquals("list[1]", ((Field) errors.fieldList.get(0)) .getProperty()); assertSame(bean, errors.beanList.get(1)); assertSame(va, errors.vaList.get(1)); assertEquals("list[2]", ((Field) errors.fieldList.get(1)).getKey()); assertEquals("list[2]", ((Field) errors.fieldList.get(1)) .getProperty()); } /** * testValidateArraysIndex07() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * int[] intArray = {<br> * 0,2,5<br> * };<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="intRangeArray"<br> * (引数) field:property="intArray"<br> * var:<br> * intRangeMin=1<br> * intRangeMax=3<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:2回呼び出される<br> * 1:bean=引数のbeanと同一<br> * field:<br> * key="intArray[0]"<br> * property="intArray[0]"<br> * var:<br> * intRangeMin="1"<br> * intRangeMax="3"<br> * va=引数のvaと同一<br> * 2:bean=引数のbeanと同一<br> * field:<br> * key="intArray[2]"<br> * property="intArray[2]"<br> * var:<br> * intRangeMin="1"<br> * intRangeMax="3"<br> * va=引数のvaと同一<br> * <br> * varのプロパティで指定されたフィールドがプリミティブ配列型のフィールドで、 vaのnameで指定されたチェックの違反が複数存在する場合、 その回数分errorsのaddErrorsが呼び出されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex07() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setIntArray(new int[] { 0, 2, 5 }); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("intRangeArray"); // Field field.setProperty("intArray"); Var var1 = new Var(); var1.setName("intRangeMin"); var1.setValue("1"); field.addVar(var1); Var var2 = new Var(); var2.setName("intRangeMax"); var2.setValue("3"); field.addVar(var2); // テスト実施 // 判定 assertFalse(new FieldChecks().validateArraysIndex(bean, va, field, errors)); assertEquals(2, errors.addErrorCount); assertSame(bean, errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertEquals("intArray[0]", ((Field) errors.fieldList.get(0)).getKey()); assertEquals("intArray[0]", ((Field) errors.fieldList.get(0)) .getProperty()); assertSame(bean, errors.beanList.get(1)); assertSame(va, errors.vaList.get(1)); assertEquals("intArray[2]", ((Field) errors.fieldList.get(1)).getKey()); assertEquals("intArray[2]", ((Field) errors.fieldList.get(1)) .getProperty()); } /** * testValidateArraysIndex08() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String field = null;<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:property="field"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean=引数のbeanと同一<br> * field:<br> * key="field"<br> * property="field"<br> * va=引数のvaと同一<br> * <br> * varのプロパティで指定されたフィールドが配列、Collection型ではない場合、 そのフィールドに対してのチェックが行われることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex08() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setField(null); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field.setProperty("field"); // テスト実施 // 判定 assertFalse(new FieldChecks().validateArraysIndex(bean, va, field, errors)); assertEquals(1, errors.addErrorCount); assertSame(bean, errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertEquals("field", ((Field) errors.fieldList.get(0)).getKey()); assertEquals("field", ((Field) errors.fieldList.get(0)).getProperty()); } /** * testValidateArraysIndex09() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * ∟JavaBean[] beanArray※要素数3<br> * ∟JavaBean[0]<br> * String[] array = {<br> * "a", null, "c"<br> * };<br> * ∟JavaBean[1]=null<br> * ∟JavaBean[2]<br> * String[] array = {<br> * "a", null, null<br> * };<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:property="beanArray.array"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:3回呼び出される<br> * 1:bean=引数のbeanと同一<br> * field:<br> * key="beanArray[0].array[1]"<br> * property="beanArray[0].array[1]"<br> * va=引数のvaと同一<br> * 2:bean=引数のbeanと同一<br> * field:<br> * key="beanArray[2].array[1]"<br> * property="beanArray[2].array[1]"<br> * va=引数のvaと同一<br> * 3:bean=引数のbeanと同一<br> * field:<br> * key="beanArray[2].array[2]"<br> * property="beanArray[2].array[2]"<br> * va=引数のvaと同一<br> * <br> * varのプロパティで指定されたフィールドが配列型のフィールドで、 全てのフィールドについてvaのnameで指定されたチェック違反がない場合、 trueが取得できることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex09() throws Exception { // 前処理 // JavaBean-beanArray[0] FieldChecks_JavaBeanStub01 beanArray0 = new FieldChecks_JavaBeanStub01(); beanArray0.setArray(new String[] { "a", null, "c" }); // JavaBean-beanArray[1] FieldChecks_JavaBeanStub01 beanArray1 = null; // JavaBean-beanArray[2] FieldChecks_JavaBeanStub01 beanArray2 = new FieldChecks_JavaBeanStub01(); beanArray2.setArray(new String[] { "a", null, null }); // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setBeanArray(new Object[] { beanArray0, beanArray1, beanArray2 }); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field.setProperty("beanArray.array"); // テスト実施 // 判定 assertFalse(new FieldChecks().validateArraysIndex(bean, va, field, errors)); assertEquals(3, errors.addErrorCount); assertSame(bean, errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertEquals("beanArray[0].array[1]", ((Field) errors.fieldList.get(0)) .getKey()); assertEquals("beanArray[0].array[1]", ((Field) errors.fieldList.get(0)) .getProperty()); assertSame(bean, errors.beanList.get(1)); assertSame(va, errors.vaList.get(1)); assertEquals("beanArray[2].array[1]", ((Field) errors.fieldList.get(1)) .getKey()); assertEquals("beanArray[2].array[1]", ((Field) errors.fieldList.get(1)) .getProperty()); assertSame(bean, errors.beanList.get(2)); assertSame(va, errors.vaList.get(1)); assertEquals("beanArray[2].array[2]", ((Field) errors.fieldList.get(2)) .getKey()); assertEquals("beanArray[2].array[2]", ((Field) errors.fieldList.get(2)) .getProperty()); } /** * testValidateArraysIndex10() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String[] array = {};<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:property="array"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * varのプロパティで指定されたフィールドが配列型のフィールドで、 要素がない場合trueが取得できることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex10() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setArray(new String[] {}); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field.setProperty("array"); // テスト実施 // 判定 assertTrue(new FieldChecks().validateArraysIndex(bean, va, field, errors)); assertEquals(0, errors.addErrorCount); } /** * testValidateArraysIndex11() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String[] array = {};<br> * (引数) va:null<br> * ※本来ありえないがカバレッジの為条件に追加<br> * (引数) field:property="array"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:null<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:null<br> * 例外:NullPointerException<br> * <br> * 処理中にValidatorException、InvocationTargetException以外の例外が発生した場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex11() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setArray(new String[] {}); // ValidatorAction va = null; // Field field.setProperty("array"); // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(bean, va, field, errors); fail(); } catch (ValidatorException e) { // OK assertNull(e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo("null"))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NullPointerException.class)); } } /** * testValidateArraysIndex12() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String[] array = {<br> * "a"<br> * };<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="maskArray"<br> * (引数) field:property="array"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"var[mask] must be specified."<br> * <br> * 処理中にValidatorExceptionをラップしたInvocationTargetExceptionが発生した場合、 ラップしたValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex12() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setArray(new String[] { "a" }); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("maskArray"); // Field field.setProperty("array"); // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(bean, va, field, errors); fail(); } catch (ValidatorException e) { // OK assertEquals("var[mask] must be specified.", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error(e .getMessage())))); } } /** * testValidateArraysIndex13() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String[] array = {"a", null, "c"}<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:property="array"<br> * (引数) errors:addErrorsでRuntimeExceptionが発生<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:RuntimeException.getMessage();<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:RuntimeException.getMessage();<br> * 例外:RuntimeException<br> * <br> * 処理中にValidatorException以外の例外をラップした InvocationTargetExceptionが発生した場合、 ラップした例外のメッセージを保持したValidatorExceptionがスローされることを確認する。 * <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex13() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setArray(new String[] { "a", null, "c" }); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field.setProperty("array"); // errors (エラー追加時に例外が発生する) FieldChecks_ValidationErrorsImpl02 errors2 = new FieldChecks_ValidationErrorsImpl02(); // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(bean, va, field, errors2); fail(); } catch (ValidatorException e) { // OK assertEquals(new RuntimeException().getMessage(), e.getMessage()); } } /** * testValidateArraysIndex14() <br> * <br> * (異常系) <br> * 観点:G <br> * <br> * 入力値:(引数) bean:JavaBean<br> * String[] array = {};<br> * (引数) va:methodParams="java.lang.Object, org.apache.commons.validator.ValidatorAction, org.apache.commons.validator.Field, * jp.terasoluna.fw.validation.ValidationErrors"<br> * name="requiredArray"<br> * (引数) field:null<br> * ※本来ありえないがカバレッジの為条件に追加<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:null<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:null<br> * 例外:NullPointerException<br> * <br> * 処理中にValidatorException、InvocationTargetException以外の例外が発生した場合、 ValidatorExceptionが発生することを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateArraysIndex14() throws Exception { // 前処理 // JavaBean FieldChecks_JavaBeanStub01 bean = new FieldChecks_JavaBeanStub01(); bean.setArray(new String[] {}); // ValidatorAction va.setMethodParams("java.lang.Object," + "org.apache.commons.validator.ValidatorAction," + "org.apache.commons.validator.Field," + "jp.terasoluna.fw.validation.ValidationErrors"); va.setName("requiredArray"); // Field field = null; // テスト実施 // 判定 try { new FieldChecks().validateArraysIndex(bean, va, field, errors); fail(); } catch (ValidatorException e) { // OK assertNull(e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo("null"))); assertThat(logger.getLoggingEvents().get(0).getThrowable().get(), instanceOf(NullPointerException.class)); } } }