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