/*
* 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 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 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;
import static uk.org.lidalia.slf4jtest.LoggingEvent.error;
import java.nio.charset.Charset;
import static java.util.Arrays.asList;
/**
* {@link jp.terasoluna.fw.validation.FieldChecks} クラスのブラックボックステスト。
* <p>
* <h4>【クラスの概要】</h4> TERASOLUNAの入力チェック機能で共通に使用される検証ルールクラス。
* <p>
* @see jp.terasoluna.fw.validation.FieldChecks
*/
public class FieldChecksTest09 {
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();
}
/**
* testValidateUrl01() <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 testValidateUrl01() throws Exception {
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(null, va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl02() <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 testValidateUrl02() throws Exception {
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl("", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl03() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html#fragment<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes=true<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのallowallschemesがtrueのとき、beanのスキーマ名が不正な場合でもtrueが取得できることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl03() throws Exception {
// 前処理
Var var = new Var();
var.setName("allowallschemes");
var.setValue("true");
field.addVar(var);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html#fragment", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl04() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes=null<br>
* schemes=http,ftp<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br>
* <br>
* varのallowallschemesがnullで、beanのスキーマ名がvarのschemesに指定されたスキーマと一致しない場合、エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl04() throws Exception {
// 前処理
Var var = new Var();
var.setName("schemes");
var.setValue("http,ftp");
field.addVar(var);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com/index.html", errors.beanList.get(0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl05() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes=""<br>
* schemes=http,ftp<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* varのallowallschemesが空文字で、 beanのスキーマ名がvarのschemesに指定されたスキーマと一致しない場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl05() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("");
field.addVar(var1);
Var var2 = new Var();
var2.setName("schemes");
var2.setValue("http,ftp");
field.addVar(var2);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com/index.html", errors.beanList.get(0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl06() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="test"<br>
* schemes=http,ftp<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* varのallowallschemesがtrue以外の文字列で、 beanのスキーマ名がvarのschemesに指定されたスキーマと一致しない場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl06() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("test");
field.addVar(var1);
Var var2 = new Var();
var2.setName("schemes");
var2.setValue("http,ftp");
field.addVar(var2);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com/index.html", errors.beanList.get(0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl07() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="test"<br>
* schemes=http,ftp,abc<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのallowallschemesがtrue以外の文字列で、 beanのスキーマ名がvarのschemesに指定されたスキーマと一致する場合、 trueが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl07() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("test");
field.addVar(var1);
Var var2 = new Var();
var2.setName("schemes");
var2.setValue("http,ftp,abc");
field.addVar(var2);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl08() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com//index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* allow2slashes="true"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのallow2slashesがtrueのとき、beanのurlの区切りり文字に「//」が含まれていてもtrueが取得できることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl08() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("true");
field.addVar(var1);
Var var2 = new Var();
var2.setName("allow2slashes");
var2.setValue("true");
field.addVar(var2);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(
"abc://terasoluna.com//index.html", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl09() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com//index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* allow2slashes=null<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* varのallow2slashesがnullで、 beanのurlの区切りり文字に「//」が含まれている場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl09() throws Exception {
// 前処理
Var var = new Var();
var.setName("allowallschemes");
var.setValue("true");
field.addVar(var);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com//index.html", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com//index.html", errors.beanList.get(
0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl10() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com//index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* allow2slashes=""<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* varのallow2slashesが空文字で、 beanのurlの区切りり文字に「//」が含まれている場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl10() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("true");
field.addVar(var1);
Var var2 = new Var();
var2.setName("allow2slashes");
var2.setValue("");
field.addVar(var2);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com//index.html", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com//index.html", errors.beanList.get(
0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl11() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com//index.html<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* allow2slashes="test"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* varのallow2slashesがtrue以外の文字列で、 beanのurlの区切りり文字に「//」が含まれている場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl11() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("true");
field.addVar(var1);
Var var2 = new Var();
var2.setName("allow2slashes");
var2.setValue("test");
field.addVar(var2);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com//index.html", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com//index.html", errors.beanList.get(
0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl12() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html#fragment<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* nofragments="true"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* varのnofragmentsがtrueで、beanのurlにフラグメントが存在する場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl12() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("true");
field.addVar(var1);
Var var2 = new Var();
var2.setName("nofragments");
var2.setValue("true");
field.addVar(var2);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html#fragment", va, field, errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("abc://terasoluna.com/index.html#fragment", errors.beanList
.get(0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateUrl13() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html#fragment<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* nofragments=null<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのnofragmentsがnullで、beanのurlにフラグメントが存在する場合、trueが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl13() throws Exception {
// 前処理
Var var = new Var();
var.setName("allowallschemes");
var.setValue("true");
field.addVar(var);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html#fragment", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl14() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html#fragment<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* nofragments=""<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのnofragmentsが空文字で、beanのurlにフラグメントが存在する場合、trueが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl14() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("true");
field.addVar(var1);
Var var2 = new Var();
var2.setName("nofragments");
var2.setValue("");
field.addVar(var2);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html#fragment", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateUrl15() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:abc://terasoluna.com/index.html#fragment<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* allowallschemes="true"<br>
* nofragments="test"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのnofragmentsがtrue以外の文字列で、 beanのurlにフラグメントが存在する場合、trueが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateUrl15() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("allowallschemes");
var1.setValue("true");
field.addVar(var1);
Var var2 = new Var();
var2.setName("nofragments");
var2.setValue("test");
field.addVar(var2);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateUrl(
"abc://terasoluna.com/index.html#fragment", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange01() <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 testValidateByteRange01() throws Exception {
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange(null, va, field,
errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange02() <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 testValidateByteRange02() throws Exception {
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange("", va, field, errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange03() <br>
* <br>
* (異常系) <br>
* 観点:F,G <br>
* <br>
* 入力値:(引数) bean:"test"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* minByteLength="test"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(状態変化) 例外:ValidatorException<br>
* メッセージ:"Mistake on validation definition file. - minByteLength is not number. You'll have to check it over. "<br>
* (状態変化) ログ:ログレベル:エラー<br>
* メッセージ:"Mistake on validation definition file. - minByteLength is not number. You'll have to check it over. ", new
* NumberFormatException()<br>
* <br>
* varのmaxByteLengthの値が数値に変換できない場合、 ValidatorExceptionが発生することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange03() throws Exception {
// 前処理
Var var = new Var();
var.setName("minByteLength");
var.setValue("test");
field.addVar(var);
// テスト実施
// 判定
try {
new FieldChecks().validateByteRange("test", va, field, errors);
fail();
} catch (ValidatorException e) {
String message = "Mistake on validation definition file. "
+ "- minByteLength 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));
}
}
/**
* testValidateByteRange04() <br>
* <br>
* (異常系) <br>
* 観点:F,G <br>
* <br>
* 入力値:(引数) bean:"test"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* maxByteLength="test"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(状態変化) 例外:ValidatorException<br>
* メッセージ:"Mistake on validation definition file. - maxByteLength is not number. You'll have to check it over. "<br>
* (状態変化) ログ:ログレベル:エラー<br>
* メッセージ:"Mistake on validation definition file. - maxByteLength is not number. You'll have to check it over. ", new
* NumberFormatException()<br>
* <br>
* varのmaxByteLengthの値が数値に変換できない場合、 ValidatorExceptionが発生することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange04() throws Exception {
// 前処理
Var var = new Var();
var.setName("maxByteLength");
var.setValue("test");
field.addVar(var);
// テスト実施
// 判定
try {
new FieldChecks().validateByteRange("test", va, field, errors);
fail();
} catch (ValidatorException e) {
String message = "Mistake on validation definition file. "
+ "- maxByteLength 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));
}
}
/**
* testValidateByteRange05() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"test"<br>
* (引数) va:not null<br>
* (引数) field:not null<br>
* minByteLength=null<br>
* maxByteLength=null<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのminByteLength、maxByteLengthがnullの場合、 範囲が0~Integer.MAX_LENGTHとしてチェックが行われることを確認する。<br>
* ※境界値テストは物理的に不可能なため省略する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange05() throws Exception {
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange("test", va, field,
errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange06() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"test"<br>
* (引数) va:not null<br>
* (引数) field:not null<br>
* minByteLength=""<br>
* maxByteLength=""<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのminByteLength、maxByteLengthが空文字の場合、 範囲が0~Integer.MAX_LENGTHとしてチェックが行われることを確認する。<br>
* ※境界値テストは物理的に不可能なため省略する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange06() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("minByteLength");
var1.setValue("");
field.addVar(var1);
Var var2 = new Var();
var2.setName("minByteLength");
var2.setValue("");
field.addVar(var2);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange("test", va, field,
errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange07() <br>
* <br>
* (異常系) <br>
* 観点:F,G <br>
* <br>
* 入力値:(引数) bean:"test"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* encoding="test"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(状態変化) 例外:ValidatorException<br>
* メッセージ:"encoding[test] is not supported."<br>
* (状態変化) ログ:ログレベル:エラー<br>
* メッセージ:"encoding[test] is not supported."<br>
* <br>
* varのencodingがサポートされないエンコーディングの場合、 ValidatorExceptionが発生することを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange07() throws Exception {
// 前処理
Var var = new Var();
var.setName("encoding");
var.setValue("test");
field.addVar(var);
// テスト実施
// 判定
try {
new FieldChecks().validateByteRange("test", va, field, errors);
fail();
} catch (ValidatorException e) {
String message = "encoding[test] is not supported.";
assertEquals(message, e.getMessage());
assertThat(logger.getLoggingEvents(), is(asList(error(message))));
}
}
/**
* testValidateByteRange08() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"あいう"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* minByteLength="6"<br>
* maxByteLength="6"<br>
* encoding=null<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのencodingがnullの場合、 デフォルトのエンコーディングでエンコードが行われることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange08() throws Exception {
// 前処理
String stringLength = new Integer("あいう".getBytes(Charset
.defaultCharset().name()).length).toString();
Var var1 = new Var();
var1.setName("minByteLength");
var1.setValue(stringLength);
field.addVar(var1);
Var var2 = new Var();
var2.setName("maxByteLength");
var2.setValue(stringLength);
field.addVar(var2);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange("あいう", va, field,
errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange09() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"あいう"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* minByteLength="6"<br>
* maxByteLength="6"<br>
* encoding=""<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* varのencodingが空文字の場合、 デフォルトのエンコーディングでエンコードが行われることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange09() throws Exception {
// 前処理
String stringLength = new Integer("あいう".getBytes(Charset
.defaultCharset().name()).length).toString();
Var var1 = new Var();
var1.setName("minByteLength");
var1.setValue(stringLength);
field.addVar(var1);
Var var2 = new Var();
var2.setName("maxByteLength");
var2.setValue(stringLength);
field.addVar(var2);
Var var3 = new Var();
var3.setName("encoding");
var3.setValue("");
field.addVar(var3);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange("あいう", va, field,
errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange10() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"あいう"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* minByteLength="7"<br>
* maxByteLength="10"<br>
* encoding="UTF-8"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:true<br>
* (状態変化) errors:呼び出されない<br>
* <br>
* beanの値が指定したエンコーディングで範囲内である場合、 trueが取得できることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange10() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("minByteLength");
var1.setValue("7");
field.addVar(var1);
Var var2 = new Var();
var2.setName("maxByteLength");
var2.setValue("10");
field.addVar(var2);
Var var3 = new Var();
var3.setName("encoding");
var3.setValue("UTF-8");
field.addVar(var3);
// テスト実施
// 判定
assertTrue(new FieldChecks().validateByteRange("あいう", va, field,
errors));
// addErrors確認
assertEquals(0, errors.addErrorCount);
}
/**
* testValidateByteRange11() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"あいう"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* minByteLength="7"<br>
* maxByteLength="10"<br>
* encoding="Windows-31J"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* beanの値をvarのencodingでエンコードしたバイト数が minByteLengthの値より小さい場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange11() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("minByteLength");
var1.setValue("7");
field.addVar(var1);
Var var2 = new Var();
var2.setName("maxByteLength");
var2.setValue("10");
field.addVar(var2);
Var var3 = new Var();
var3.setName("encoding");
var3.setValue("Windows-31J");
field.addVar(var3);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateByteRange("あいう", va, field,
errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("あいう", errors.beanList.get(0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
/**
* testValidateByteRange12() <br>
* <br>
* (正常系) <br>
* 観点:F <br>
* <br>
* 入力値:(引数) bean:"あいう"<br>
* (引数) va:not null<br>
* (引数) field:var:<br>
* minByteLength="5"<br>
* maxByteLength="8"<br>
* encoding="UTF-8"<br>
* (引数) errors:not null<br>
* <br>
* 期待値:(戻り値) boolean:false<br>
* (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br>
* <br>
* beanの値をvarのencodingでエンコードしたバイト数が maxByteLengthの値より大きい場合、 エラーを追加してfalseが返却されることを確認する。 <br>
* @throws Exception このメソッドで発生した例外
*/
@Test
public void testValidateByteRange12() throws Exception {
// 前処理
Var var1 = new Var();
var1.setName("minByteLength");
var1.setValue("5");
field.addVar(var1);
Var var2 = new Var();
var2.setName("maxByteLength");
var2.setValue("8");
field.addVar(var2);
Var var3 = new Var();
var3.setName("encoding");
var3.setValue("UTF-8");
field.addVar(var3);
// テスト実施
// 判定
assertFalse(new FieldChecks().validateByteRange("あいう", va, field,
errors));
// addErrors確認
assertEquals(1, errors.addErrorCount);
assertEquals("あいう", errors.beanList.get(0));
assertSame(va, errors.vaList.get(0));
assertSame(field, errors.fieldList.get(0));
}
}