/* * 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.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 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 FieldChecksTest02 { 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(); } /** * testValidateRequired01() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:null<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がnullの場合、エラーを追加し、falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateRequired01() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateRequired(null, va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertNull(errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateRequired02() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:""<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 testValidateRequired02() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateRequired("", 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)); } /** * testValidateRequired03() <br> * <br> * (正常系) <br> * 観点:C,F <br> * <br> * 入力値:(引数) bean:" "<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 testValidateRequired03() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateRequired(" ", 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)); } /** * testValidateRequired04() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"test"<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 testValidateRequired04() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateRequired("test", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateMask01() <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 testValidateMask01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateMask(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateMask02() <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 testValidateMask02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateMask("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateMask03() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"ABC"<br> * (引数) va:not null<br> * (引数) field:var:mask=null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"var[mask] must be specified."<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"var[mask] must be specified."<br> * <br> * fieldのvarからmaskが取得できない場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateMask03() throws Exception { // テスト実施 // 判定 try { new FieldChecks().validateMask("ABC", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("var[mask] must be specified.", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "var[mask] must be specified.")))); } } /** * testValidateMask04() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"ABC"<br> * (引数) va:not null<br> * (引数) field:var:mask=""(空文字)<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"var[mask] must be specified."<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"var[mask] must be specified."<br> * <br> * fieldのvarからmaskが取得できない場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateMask04() throws Exception { // 前処理 Var var = new Var(); var.setName("mask"); var.setValue(""); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateMask("ABC", va, field, errors); fail(); } catch (ValidatorException e) { assertEquals("var[mask] must be specified.", e.getMessage()); assertThat(logger.getLoggingEvents(), is(asList(error( "var[mask] must be specified.")))); } } /** * testValidateMask05() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"ABC"<br> * (引数) va:not null<br> * (引数) field:var:mask=""^([0-9]|[a-z]|[A-Z])*$""<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、指定された正規表現と一致する場合、 trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateMask05() throws Exception { // 前処理 Var var = new Var(); var.setName("mask"); var.setValue("^([0-9]|[a-z]|[A-Z])*$"); field.addVar(var); // テスト実施 // 判定 assertTrue(new FieldChecks().validateMask("ABC", va, field, errors)); assertEquals(0, errors.addErrorCount); } /** * testValidateMask06() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"あいう"<br> * (引数) va:not null<br> * (引数) field:var:mask=""^([0-9]|[a-z]|[A-Z])*$""<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数として addErrorsが呼び出される。<br> * <br> * 引数のbeanの値が、指定された正規表現と一致しない場合、エラーを追加して、 falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateMask06() throws Exception { // 前処理 Var var = new Var(); var.setName("mask"); var.setValue("^([0-9]|[a-z]|[A-Z])*$"); field.addVar(var); // テスト実施 // 判定 assertFalse(new FieldChecks().validateMask("あいう", va, field, errors)); assertEquals(1, errors.addErrorCount); assertEquals("あいう", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateByte01() <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 testValidateByte01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateByte(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateByte02() <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 testValidateByte02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateByte("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateByte03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"0"<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、byteに変換できる場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateByte03() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateByte("0", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateByte04() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"あ"<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の値が、byteに変換できない場合、エラーを追加して、falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateByte04() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateByte("あ", 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)); } /** * testValidateShort01() <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 testValidateShort01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateShort(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateShort02() <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 testValidateShort02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateShort("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateShort03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"0"<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、shortに変換できる場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateShort03() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateShort("0", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateShort04() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"あ"<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の値が、shortに変換できない場合、エラーを追加して、falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateShort04() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateShort("あ", 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)); } /** * testValidateInteger01() <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 testValidateInteger01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateInteger(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateInteger02() <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 testValidateInteger02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateInteger("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateInteger03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"-2147483648"<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、intに変換できる場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateInteger03() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateInteger("-2147483648", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateInteger04() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"あ"<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の値が、intに変換できない場合、エラーを追加して、 falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateInteger04() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateInteger("あ", 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)); } }