/* * 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.IsInstanceOf.instanceOf; import static org.hamcrest.core.IsEqual.equalTo; 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.slf4jext.Level; 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 FieldChecksTest03 { 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(); } /** * testValidateLong01() <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 testValidateLong01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateLong(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateLong02() <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 testValidateLong02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateLong("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateLong03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"-9223372036854775808"<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、longに変換できる場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateLong03() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateLong("-9223372036854775808", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateLong04() <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の値が、longに変換できない場合、エラーを追加して、 falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateLong04() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateLong("あ", 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)); } /** * testValidateFloat01() <br> * <br> * (正常系) <br> * 観点:F,G <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 testValidateFloat01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateFloat(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateFloat02() <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 testValidateFloat02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateFloat("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateFloat03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"1.4E-45"<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、floatに変換できる場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateFloat03() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateFloat("1.4E-45", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateFloat04() <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の値が、floatに変換できない場合、エラーを追加して、falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateFloat04() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateFloat("あ", 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)); } /** * testValidateDouble01() <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 testValidateDouble01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDouble(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDouble02() <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 testValidateDouble02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDouble("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDouble03() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"4.9E-324"<br> * (引数) va:not null<br> * (引数) field:not null<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * 引数のbeanの値が、doubleに変換できる場合、trueが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDouble03() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDouble("4.9E-324", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDouble04() <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の値が、doubleに変換できない場合、エラーを追加して、falseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDouble04() throws Exception { // テスト実施 // 判定 assertFalse(new FieldChecks().validateDouble("あ", 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)); } /** * testValidateDate01() <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 testValidateDate01() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDate(null, va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDate02() <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 testValidateDate02() throws Exception { // テスト実施 // 判定 assertTrue(new FieldChecks().validateDate("", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDate03() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/17"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern=null<br> * datePatternStrict=null<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. ", new IllegalArgumentException()<br> * <br> * datePattern、datePatternStrictが両方ともnullの場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate03() throws Exception { // テスト実施 // 判定 try { logger.setEnabledLevels(Level.ERROR); new FieldChecks().validateDate("2005/11/17", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- datePattern or datePatternStrict is invalid." + " You'll have to check it over. "; assertEquals(message, e.getMessage()); assertThat(logger.getLoggingEvents().get(0).getMessage(), is( equalTo(message))); } } /** * testValidateDate04() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/17"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern=""<br> * datePatternStrict=""<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. ", new IllegalArgumentException()<br> * <br> * datePattern、datePatternStrictが両方ともnullの場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate04() 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 { logger.setEnabledLevels(Level.ERROR); new FieldChecks().validateDate("2005/11/17", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- datePattern or datePatternStrict is invalid." + " 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(IllegalArgumentException.class)); } } /** * testValidateDate05() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/17"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="abc"<br> * datePatternStrict=""<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. ", new IllegalArgumentException()<br> * <br> * datePatternに日付形式として解釈できない文字が含まれる場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate05() throws Exception { // 前準備 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("abc"); field.addVar(var1); Var var2 = new Var(); var2.setName("datePatternStrict"); var2.setValue(""); field.addVar(var2); // テスト実施 // 判定 try { new FieldChecks().validateDate("2005/11/17", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- datePattern or datePatternStrict is invalid." + " 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(IllegalArgumentException.class)); } } /** * testValidateDate06() <br> * <br> * (異常系) <br> * 観点:F,G <br> * <br> * 入力値:(引数) bean:"2005/11/17"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern=null<br> * datePatternStrict="abc"<br> * (引数) errors:not null<br> * <br> * 期待値:(状態変化) 例外:ValidatorException<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. "<br> * (状態変化) ログ:ログレベル:エラー<br> * メッセージ:"Mistake on validation definition file. - datePattern or datePatternStrict is invalid. You'll have to check it * over. ", new IllegalArgumentException()<br> * <br> * datePatternStrictに日付形式として解釈できない文字が含まれる場合、 ValidatorExceptionがスローされることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate06() throws Exception { // 前準備 Var var = new Var(); var.setName("datePatternStrict"); var.setValue("abc"); field.addVar(var); // テスト実施 // 判定 try { new FieldChecks().validateDate("2005/11/17", va, field, errors); fail(); } catch (ValidatorException e) { String message = "Mistake on validation definition file. " + "- datePattern or datePatternStrict is invalid." + " 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(IllegalArgumentException.class)); } } /** * testValidateDate07() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/1/1"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePattern="yyyy/MM/dd"<br> * datePatternStrict="yyyy.MM.dd"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:true<br> * (状態変化) errors:呼び出されない<br> * <br> * datePattern、datePatternStrictの両方に正しい日付形式が指定される場合、 datePatternの形式で入力値の解釈が行われることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate07() throws Exception { // 前準備 Var var1 = new Var(); var1.setName("datePattern"); var1.setValue("yyyy/MM/dd"); field.addVar(var1); Var var2 = new Var(); var2.setName("datePatternStrict"); var2.setValue("yyyy.MM.dd"); field.addVar(var2); // テスト実施 // 判定 assertTrue(new FieldChecks().validateDate("2005/1/1", va, field, errors)); // addErrors確認 assertEquals(0, errors.addErrorCount); } /** * testValidateDate08() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/1/1"<br> * (引数) va:not null<br> * (引数) field:var:<br> * datePatternStrict="yyyy/MM/dd"<br> * (引数) errors:not null<br> * <br> * 期待値:(戻り値) boolean:false<br> * (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br> * <br> * datePatternStrictに日付形式が指定されており、形式が完全に一致しない場合、エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate08() throws Exception { // 前準備 Var var = new Var(); var.setName("datePatternStrict"); var.setValue("yyyy/MM/dd"); field.addVar(var); // テスト実施 // 判定 assertFalse(new FieldChecks().validateDate("2005/1/1", va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertEquals("2005/1/1", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } /** * testValidateDate09() <br> * <br> * (正常系) <br> * 観点:F <br> * <br> * 入力値:(引数) bean:"2005/2/29"<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> * 存在しない日付が入力された場合、エラーを追加してfalseが返却されることを確認する。 <br> * @throws Exception このメソッドで発生した例外 */ @Test public void testValidateDate09() throws Exception { // 前準備 Var var = new Var(); var.setName("datePattern"); var.setValue("yyyy/MM/dd"); field.addVar(var); // テスト実施 // 判定 assertFalse(new FieldChecks().validateDate("2005/2/29", va, field, errors)); // addErrors確認 assertEquals(1, errors.addErrorCount); assertEquals("2005/2/29", errors.beanList.get(0)); assertSame(va, errors.vaList.get(0)); assertSame(field, errors.fieldList.get(0)); } }