/*
 * 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 org.apache.commons.validator.Field;
import org.apache.commons.validator.ValidatorAction;
import org.apache.commons.validator.ValidatorException;
import org.apache.commons.validator.Var;
import jp.terasoluna.utlib.LogUTUtil;
import jp.terasoluna.fw.validation.FieldChecks;
import junit.framework.TestCase;

/**
 * {@link jp.terasoluna.fw.validation.FieldChecks}
 * クラスのブラックボックステスト。
 *
 * <p>
 * <h4>【クラスの概要】</h4>
 * TERASOLUNAの入力チェック機能で共通に使用される検証ルールクラス。
 * <p>
 *
 * @see jp.terasoluna.fw.validation.FieldChecks
 */
public class FieldChecksTest04 extends TestCase {

    /**
     * テスト用インスタンス。
     */
    private ValidatorAction va = null;

    /**
     * テスト用インスタンス。
     */
    private Field field = null;

    /**
     * テスト用インスタンス。
     */
    private FieldChecks_ValidationErrorsImpl01 errors = null;

    /**
     * このテストケースを実行する為の
     * GUI アプリケーションを起動する。
     *
     * @param args java コマンドに設定されたパラメータ
     */
    public static void main(String[] args) {
        junit.swingui.TestRunner.run(FieldChecksTest04.class);
    }

    /**
     * 初期化処理を行う。
     *
     * @throws Exception このメソッドで発生した例外
     * @see junit.framework.TestCase#setUp()
     */
    @Override
    protected void setUp() throws Exception {
        super.setUp();
        va = new ValidatorAction();
        field = new Field();
        errors = new FieldChecks_ValidationErrorsImpl01();
    }

    /**
     * 終了処理を行う。
     *
     * @throws Exception このメソッドで発生した例外
     * @see junit.framework.TestCase#tearDown()
     */
    @Override
    protected void tearDown() throws Exception {
        super.tearDown();
    }

    /**
     * コンストラクタ。
     *
     * @param name このテストケースの名前。
     */
    public FieldChecksTest04(String name) {
        super(name);
    }

    /**
     * testValidateIntRange01()
     * <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 このメソッドで発生した例外
     */
    public void testValidateIntRange01() throws Exception {
        // テスト実施
        // 判定
        assertTrue(new FieldChecks().validateIntRange(null, va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateIntRange02()
     * <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 このメソッドで発生した例外
     */
    public void testValidateIntRange02() throws Exception {
        // テスト実施
        // 判定
        assertTrue(new FieldChecks().validateIntRange("", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateIntRange03()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"1.5"<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 このメソッドで発生した例外
     */
    public void testValidateIntRange03() throws Exception {
        // テスト実施
        // 判定
        assertFalse(new FieldChecks().validateIntRange("1.5", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("1.5", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateIntRange04()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"-2147483648"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin=null<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのintRangeMinがnullの場合、
     * 範囲の最小値がInteger.MIN_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange04() throws Exception {
        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateIntRange("-2147483648", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateIntRange05()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"-2147483649"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin=null<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数として
     *                           addErrorsが呼び出される。<br>
     *
     * <br>
     * varのintRangeMinがnullの場合、
     * 範囲の最小値がInteger.MIN_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange05() throws Exception {
        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateIntRange("-2147483649", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("-2147483649", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateIntRange06()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"-2147483648"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin=""<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのintRangeMinが空文字の場合、
     * 範囲の最小値がInteger.MIN_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange06() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("intRangeMin");
        var.setValue("");
        field.addVar(var);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateIntRange("-2147483648", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateIntRange07()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"-2147483649"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin=""<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数として
     *                           addErrorsが呼び出される。<br>
     *
     * <br>
     * varのintRangeMinが空文字の場合、
     * 範囲の最小値がInteger.MIN_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange07() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("intRangeMin");
        var.setValue("");
        field.addVar(var);

        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateIntRange("-2147483649", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("-2147483649", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateIntRange08()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"2147483647"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMax=null<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのintRangeMaxがnullの場合、
     * 範囲の最大値がInteger.MAX_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange08() throws Exception {
        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateIntRange("2147483647", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateIntRange09()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"2147483648"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMax=null<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数として
     *                           addErrorsが呼び出される。<br>
     *
     * <br>
     * varのintRangeMaxがnullの場合、
     * 範囲の最大値がInteger.MAX_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange09() throws Exception {
        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateIntRange("2147483648", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("2147483648", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateIntRange10()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"2147483647"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMax=""<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのintRangeMaxが空文字の場合、
     * 範囲の最大値がInteger.MAX_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange10() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("intRangeMin");
        var.setValue("");
        field.addVar(var);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateIntRange("2147483647", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateIntRange11()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"2147483648"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMax=""<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数として
     *                           addErrorsが呼び出される。<br>
     *
     * <br>
     * varのintRangeMaxが空文字の場合、
     * 範囲の最大値がInteger.MAX_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange11() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("intRangeMin");
        var.setValue("");
        field.addVar(var);

        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateIntRange("2147483648", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("2147483648", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateIntRange12()
     * <br><br>
     *
     * (異常系)
     * <br>
     * 観点：F,G
     * <br><br>
     * 入力値：(引数) bean:"5"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin="1.5"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(状態変化) 例外:ValidatorException<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - intRangeMin is not number.
     *                    You'll have to check it over. "<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - intRangeMin is not number.
     *                    You'll have to check it over. ", new NumberFormatException()<br>
     *
     * <br>
     * varのintRangeMinの値がint型に変換できない場合、
     * ValidatorExceptionが発生することを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange12() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("intRangeMin");
        var.setValue("1.5");
        field.addVar(var);

        // テスト実施
        // 判定
        try {
            new FieldChecks().validateIntRange("5", va, field, errors);
            fail();
        } catch (ValidatorException e) {
            String message = "Mistake on validation definition file. " +
                    "- intRangeMin is not number. You'll have to check " +
                    "it over. ";
            assertEquals(message, e.getMessage());
            assertTrue(LogUTUtil.checkError(message, new NumberFormatException()));
        }
    }

    /**
     * testValidateIntRange13()
     * <br><br>
     *
     * (異常系)
     * <br>
     * 観点：F,G
     * <br><br>
     * 入力値：(引数) bean:"5"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMax="5.5"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(状態変化) 例外:ValidatorException<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - intRangeMax is not number.
     *                    You'll have to check it over. "<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - intRangeMax is not number.
     *                    You'll have to check it over. ", new NumberFormatException()<br>
     *
     * <br>
     * varのintRangeMaxの値がint型に変換できない場合、
     * ValidatorExceptionが発生することを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange13() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("intRangeMax");
        var.setValue("5.5");
        field.addVar(var);

        // テスト実施
        // 判定
        try {
            new FieldChecks().validateIntRange("5", va, field, errors);
            fail();
        } catch (ValidatorException e) {
            String message = "Mistake on validation definition file. " +
                    "- intRangeMax is not number. You'll have to check " +
                    "it over. ";
            assertEquals(message, e.getMessage());
            assertTrue(LogUTUtil.checkError(message, new NumberFormatException()));
        }
    }

    /**
     * testValidateIntRange14()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"5"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin="1"<br>
     *                intRangeMax="10"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * beanの値が、intRangeMinとintRangeMaxの範囲内の値の場合、
     * trueが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange14() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("intRangeMin");
        var1.setValue("1");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("intRangeMax");
        var2.setValue("10");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateIntRange("5", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);

    }

    /**
     * testValidateIntRange15()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"5"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin="6"<br>
     *                intRangeMax="10"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数として
     *                           addErrorsが呼び出される。<br>
     *
     * <br>
     * beanの値が、intRangeMinの値より小さい場合、
     * エラーを追加してfalseが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange15() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("intRangeMin");
        var1.setValue("6");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("intRangeMax");
        var2.setValue("10");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateIntRange("5", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("5", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));

    }

    /**
     * testValidateIntRange16()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"5"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin="1"<br>
     *                intRangeMax="4"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数として
     *                           addErrorsが呼び出される。<br>
     *
     * <br>
     * beanの値が、intRangeMaxの値より大きい場合、
     * エラーを追加してfalseが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange16() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("intRangeMin");
        var1.setValue("1");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("intRangeMax");
        var2.setValue("4");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateIntRange("5", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("5", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));

    }

    /**
     * testValidateIntRange17()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"5"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                intRangeMin="5"<br>
     *                intRangeMax="5"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * beanの値と、intRangeMax,intRangeMinの値と等しい場合、
     * trueが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateIntRange17() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("intRangeMin");
        var1.setValue("5");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("intRangeMax");
        var2.setValue("5");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateIntRange("5", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);

    }

    /**
     * testValidateDoubleRange01()
     * <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 このメソッドで発生した例外
     */
    public void testValidateDoubleRange01() throws Exception {
        // テスト実施
        // 判定
        assertTrue(new FieldChecks().validateDoubleRange(null, va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateDoubleRange02()
     * <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 このメソッドで発生した例外
     */
    public void testValidateDoubleRange02() throws Exception {
        // テスト実施
        // 判定
        assertTrue(new FieldChecks().validateDoubleRange("", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateDoubleRange03()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"test"<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 このメソッドで発生した例外
     */
    public void testValidateDoubleRange03() throws Exception {
        // テスト実施
        // 判定
        assertFalse(new FieldChecks().validateDoubleRange("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));
    }

    /**
     * testValidateDoubleRange04()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"4.9E-324"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin=null<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのdoubleRangeMinがnullの場合、
     * 範囲の最小値がDouble.MIN_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange04() throws Exception {
        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateDoubleRange("4.9E-324", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateDoubleRange05()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"4.9E-324"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin=""<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのdoubleRangeMinが空文字の場合、
     * 範囲の最小値がDouble.MIN_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange05() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("doubleRangeMin");
        var.setValue("");
        field.addVar(var);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateDoubleRange("4.9E-324", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateDoubleRange06()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"1.7976931348623157E308"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMax=null<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのdoubleRangeMaxがnullの場合、範囲の最大値がDouble.MAX_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange06() throws Exception {
        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateDoubleRange(
                        "1.7976931348623157E308", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateDoubleRange07()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"1.7976931348623157E308"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMax=""<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * varのdoubleRangeMaxが空文字の場合、範囲の最大値がDouble.MAX_VALUEであることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange07() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("doubleRangeMax");
        var.setValue("");
        field.addVar(var);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateDoubleRange(
                        "1.7976931348623157E308", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

    /**
     * testValidateDoubleRange08()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"0.5E1"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin="test"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(状態変化) 例外:ValidatorException<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - doubleRangeMin is not number.
     *                    You'll have to check it over. "<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - doubleRangeMin is not number.
     *                    You'll have to check it over. ", new NumberFormatException()<br>
     *
     * <br>
     * varのdoubleRangeMinの値がdouble型に変換できない場合、
     * ValidatorExceptionが発生することを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange08() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("doubleRangeMin");
        var.setValue("test");
        field.addVar(var);

        // テスト実施
        // 判定
        try {
            new FieldChecks().validateDoubleRange("0.5E1", va, field, errors);
            fail();
        } catch (ValidatorException e) {
            String message = "Mistake on validation definition file. " +
                    "- doubleRangeMin is not number. You'll have to check " +
                    "it over. ";
            assertEquals(message, e.getMessage());
            assertTrue(LogUTUtil.checkError(message, new NumberFormatException()));
        }
    }

    /**
     * testValidateDoubleRange09()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"0.5E1"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMax="test"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(状態変化) 例外:ValidatorException<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - doubleRangeMax is not number.
     *                    You'll have to check it over. "<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    メッセージ："Mistake on validation definition file.
     *                    - doubleRangeMax is not number.
     *                    You'll have to check it over. ", new NumberFormatException()<br>
     *
     * <br>
     * varのdoubleRangeMaxの値がdouble型に変換できない場合、
     * ValidatorExceptionが発生することを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange09() throws Exception {
        // 前処理
        Var var = new Var();
        var.setName("doubleRangeMax");
        var.setValue("test");
        field.addVar(var);

        // テスト実施
        // 判定
        try {
            new FieldChecks().validateDoubleRange("0.5E1", va, field, errors);
            fail();
        } catch (ValidatorException e) {
            String message = "Mistake on validation definition file. " +
                    "- doubleRangeMax is not number. You'll have to check " +
                    "it over. ";
            assertEquals(message, e.getMessage());
            assertTrue(LogUTUtil.checkError(message, new NumberFormatException()));
        }
    }

    /**
     * testValidateDoubleRange10()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"0.5E1"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin="0.1E1"<br>
     *                doubleRangeMax="0.1E2"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * beanの値が、doubleRangeMinとdoubleRangeMaxの範囲内の値の場合、
     * trueが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange10() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("doubleRangeMin");
        var1.setValue("0.1E1");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("doubleRangeMax");
        var2.setValue("0.1E2");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateDoubleRange("0.5E1", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);

    }

    /**
     * testValidateDoubleRange11()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"0.5E1"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin="0.1E2"<br>
     *                doubleRangeMax="0.1E3"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br>
     *
     * <br>
     * beanの値が、doubleRangeMinの値より小さい場合、エラーを追加してfalseが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange11() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("doubleRangeMin");
        var1.setValue("0.1E2");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("doubleRangeMax");
        var2.setValue("0.1E3");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateDoubleRange("0.5E1", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("0.5E1", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateDoubleRange12()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"0.5E1"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin="0.1E1"<br>
     *                doubleRangeMax="0.4E1"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         (状態変化) errors:bean,field,vaを引数としてaddErrorsが呼び出される。<br>
     *
     * <br>
     * beanの値が、doubleRangeMaxの値より大きい場合、エラーを追加してfalseが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange12() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("doubleRangeMin");
        var1.setValue("0.1E1");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("doubleRangeMax");
        var2.setValue("0.4E1");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertFalse(
                new FieldChecks().validateDoubleRange("0.5E1", va, field, errors));

        // addErrors確認
        assertEquals(1, errors.addErrorCount);
        assertEquals("0.5E1", errors.beanList.get(0));
        assertSame(va, errors.vaList.get(0));
        assertSame(field, errors.fieldList.get(0));
    }

    /**
     * testValidateDoubleRange13()
     * <br><br>
     *
     * (正常系)
     * <br>
     * 観点：F
     * <br><br>
     * 入力値：(引数) bean:"0.5E1"<br>
     *         (引数) va:not null<br>
     *         (引数) field:var:<br>
     *                doubleRangeMin="0.5E1"<br>
     *                doubleRangeMax="0.5E1"<br>
     *         (引数) errors:not null<br>
     *
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         (状態変化) errors:呼び出されない<br>
     *
     * <br>
     * beanの値と、doubleRangeMax,doubleRangeMinの値と等しい場合、trueが返却されることを確認する。
     * <br>
     *
     * @throws Exception このメソッドで発生した例外
     */
    public void testValidateDoubleRange13() throws Exception {
        // 前処理
        Var var1 = new Var();
        var1.setName("doubleRangeMin");
        var1.setValue("0.5E1");
        field.addVar(var1);
        
        Var var2 = new Var();
        var2.setName("doubleRangeMax");
        var2.setValue("0.5E1");
        field.addVar(var2);

        // テスト実施
        // 判定
        assertTrue(
                new FieldChecks().validateDoubleRange("0.5E1", va, field, errors));

        // addErrors確認
        assertEquals(0, errors.addErrorCount);
    }

}
