/*
 * 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.beans;

import jp.terasoluna.utlib.LogUTUtil;
import junit.framework.TestCase;

/**
 * {@link jp.terasoluna.fw.beans.JXPathIndexedBeanWrapperImpl} クラスのブラックボックステスト。
 * 
 * <p>
 * <h4>【クラスの概要】</h4>
 * JavaBeanの配列・コレクション型属性にアクセスできるクラス。<br>
 * 前提条件：<br>
 * 当クラスのprotectedメソッドの引数nodeは not null である。
 * <p>
 * 
 * @see jp.terasoluna.fw.beans.JXPathIndexedBeanWrapperImpl
 */
public class JXPathIndexedBeanWrapperImplTest03 extends TestCase {

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

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

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

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

    /**
     * testToPropertyName01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) xpath:".[@name='bbb']"<br>
     *         (状態) スタブisMapObject()の戻り値:true<br>
     *         (状態) スタブextractMapKey()の戻り値:"bbb"<br>
     *         (状態) スタブextractDecrementIndex()の戻り値:""<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"bbb"<br>
     *         (状態変化) isMapObject()の引数:".[@name='bbb']"<br>
     *         (状態変化) extractMapKey()の引数:".[@name='bbb']"<br>
     *         (状態変化) extractDecrementIndex()の引数:".[@name='bbb']"<br>
     *         
     * <br>
     * 【Map型・階層なしの試験】<br>
     * 想定した入力の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName01() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub04 target =
            new JXPathIndexedBeanWrapperImplStub04("");
        target.isMapObjectReturnValue = true;
        target.extractDecrementIndexReturnValue = "";

        // テスト実施
        result = target.toPropertyName(".[@name='bbb']");

        // 判定
        assertEquals("bbb",result);
        assertEquals(".[@name='bbb']", target.isMapObjectArg1.get(0));
        assertEquals(".[@name='bbb']", target.extractMapKeyArg1.get(0));
        assertEquals(".[@name='bbb']", target.extractDecrementIndexArg1.get(0));
    }

    /**
     * testToPropertyName02()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) xpath:"aaa[@name='bbb']"<br>
     *         (状態) スタブisMapObject()の戻り値:false<br>
     *         (状態) スタブextractMapKey()の戻り値:"bbb"<br>
     *         (状態) スタブisMapAttribute()の戻り値:true<br>
     *         (状態) スタブextractMapAttributeName()の戻り値:"aaa"<br>
     *         (状態) スタブextractDecrementIndex()の戻り値:""<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa(bbb)"<br>
     *         (状態変化) isMapObject()の引数:"aaa[@name='bbb']"<br>
     *         (状態変化) extractMapKey()の引数:"aaa[@name='bbb']"<br>
     *         (状態変化) isMapAttribute()の引数:"aaa[@name='bbb']"<br>
     *         (状態変化) extractMapAttributeName()の引数:"aaa[@name='bbb']"<br>
     *         (状態変化) extractDecrementIndex()の引数:"aaa[@name='bbb']"<br>
     *         
     * <br>
     * 【Map属性・階層なしの試験】<br>
     * 想定した入力の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName02() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub04 target =
            new JXPathIndexedBeanWrapperImplStub04("");
        target.isMapObjectReturnValue = false;
        target.isMapAttributeReturnValue = true;
        target.extractDecrementIndexReturnValue = "";

        // テスト実施
        result = target.toPropertyName("aaa[@name='bbb']");

        // 判定
        assertEquals("aaa(bbb)", result);
        assertEquals("aaa[@name='bbb']", target.isMapObjectArg1.get(0));
        assertEquals("aaa[@name='bbb']", target.extractMapKeyArg1.get(0));
        assertEquals("aaa[@name='bbb']", target.isMapAttributeArg1.get(0));
        assertEquals("aaa[@name='bbb']", target.extractMapAttributeNameArg1.get(0));
        assertEquals("aaa[@name='bbb']", target.extractDecrementIndexArg1.get(0));
    }

    /**
     * testToPropertyName03()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) xpath:"aaa[@name='bbb'][10]"<br>
     *         (状態) スタブisMapObject()の戻り値:false<br>
     *         (状態) スタブextractMapKey()の戻り値:"bbb"<br>
     *         (状態) スタブisMapAttribute()の戻り値:true<br>
     *         (状態) スタブextractMapAttributeName()の戻り値:"aaa"<br>
     *         (状態) スタブextractDecrementIndex()の戻り値:"[9]"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa(bbb)[9]"<br>
     *         (状態変化) isMapObject()の引数:"aaa[@name='bbb'][10]"<br>
     *         (状態変化) extractMapKey()の引数:"aaa[@name='bbb'][10]"<br>
     *         (状態変化) isMapAttribute()の引数:"aaa[@name='bbb'][10]"<br>
     *         (状態変化) extractMapAttributeName()の引数:"aaa[@name='bbb'][10]"<br>
     *         (状態変化) extractDecrementIndex()の引数:"aaa[@name='bbb'][10]"<br>
     *         
     * <br>
     * 【Map属性配列・階層なしの試験】<br>
     * 想定した入力の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName03() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub04 target =
            new JXPathIndexedBeanWrapperImplStub04("");
        target.isMapObjectReturnValue = false;
        target.isMapAttributeReturnValue = true;
        target.extractDecrementIndexReturnValue = "[9]";

        // テスト実施
        result = target.toPropertyName("aaa[@name='bbb'][10]");

        // 判定
        assertEquals("aaa(bbb)[9]", result);
        assertEquals("aaa[@name='bbb'][10]", target.isMapObjectArg1.get(0));
        assertEquals("aaa[@name='bbb'][10]", target.extractMapKeyArg1.get(0));
        assertEquals("aaa[@name='bbb'][10]", target.isMapAttributeArg1.get(0));
        assertEquals("aaa[@name='bbb'][10]", target.extractMapAttributeNameArg1.get(0));
        assertEquals("aaa[@name='bbb'][10]", target.extractDecrementIndexArg1.get(0));
    }

    /**
     * testToPropertyName04()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) xpath:"aaa"<br>
     *         (状態) スタブisMapObject()の戻り値:false<br>
     *         (状態) スタブisMapAttribute()の戻り値:false<br>
     *         (状態) スタブextractAttributeName()の戻り値:"aaa"<br>
     *         (状態) スタブextractDecrementIndex()の戻り値:""<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa"<br>
     *         (状態変化) isMapObject()の引数:"aaa"<br>
     *         (状態変化) isMapAttribute()の引数:"aaa"<br>
     *         (状態変化) extractAttributeName()の引数:"aaa"<br>
     *         (状態変化) extractDecrementIndex()の引数:"aaa"<br>
     *         
     * <br>
     * 【bean/プリミティブ・階層なしの試験】<br>
     * 想定した入力の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName04() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub04 target =
            new JXPathIndexedBeanWrapperImplStub04("");
        target.isMapObjectReturnValue = false;
        target.isMapAttributeReturnValue = false;
        target.extractDecrementIndexReturnValue = "";

        // テスト実施
        result = target.toPropertyName("aaa");

        // 判定
        assertEquals("aaa", result);
        assertEquals("aaa", target.isMapObjectArg1.get(0));
        assertEquals("aaa", target.isMapAttributeArg1.get(0));
        assertEquals("aaa", target.extractAttributeNameArg1.get(0));
        assertEquals("aaa", target.extractDecrementIndexArg1.get(0));
    }

    /**
     * testToPropertyName05()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) xpath:"aaa[100]"<br>
     *         (状態) スタブisMapObject()の戻り値:false<br>
     *         (状態) スタブisMapAttribute()の戻り値:false<br>
     *         (状態) スタブextractAttributeName()の戻り値:"aaa"<br>
     *         (状態) スタブextractDecrementIndex()の戻り値:"[99]"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa[99]"<br>
     *         (状態変化) isMapObject()の引数:"aaa[100]"<br>
     *         (状態変化) isMapAttribute()の引数:"aaa[100]"<br>
     *         (状態変化) extractAttributeName()の引数:"aaa[100]"<br>
     *         (状態変化) extractDecrementIndex()の引数:"aaa[100]"<br>
     *         
     * <br>
     * 【bean/プリミティブ配列・階層なしの試験】<br>
     * 想定した入力の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName05() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub04 target =
            new JXPathIndexedBeanWrapperImplStub04("");
        target.isMapObjectReturnValue = false;
        target.isMapAttributeReturnValue = false;
        target.extractDecrementIndexReturnValue = "[99]";

        // テスト実施
        result = target.toPropertyName("aaa[100]");

        // 判定
        assertEquals("aaa[99]", result);
        assertEquals("aaa[100]", target.isMapObjectArg1.get(0));
        assertEquals("aaa[100]", target.isMapAttributeArg1.get(0));
        assertEquals("aaa[100]", target.extractAttributeNameArg1.get(0));
        assertEquals("aaa[100]", target.extractDecrementIndexArg1.get(0));
    }

    /**
     * testToPropertyName06()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) xpath:"aaa[@name='bbb']/ddd[@name='eee']"<br>
     *         (状態) スタブisMapObject()の戻り値:false<br>
     *         (状態) スタブextractMapKey()の戻り値:1回目: "bbb"<br>
     *                2回目: "eee"<br>
     *         (状態) スタブisMapAttribute()の戻り値:true<br>
     *         (状態) スタブextractMapAttributeName()の戻り値:1回目: "aaa"<br>
     *                2回目: "ddd"<br>
     *         (状態) スタブextractDecrementIndex()の戻り値:""<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa(bbb).ddd(eee)"<br>
     *         (状態変化) isMapObject()の引数:1回目: "aaa[@name='bbb']"<br>
     *                    2回目: "ddd[@name='eee']"<br>
     *         (状態変化) extractMapKey()の引数:1回目: "aaa[@name='bbb']"<br>
     *                    2回目: "ddd[@name='eee']"<br>
     *         (状態変化) isMapAttribute()の引数:1回目: "aaa[@name='bbb']"<br>
     *                    2回目: "ddd[@name='eee']"<br>
     *         (状態変化) extractMapAttributeName()の引数:1回目: "aaa[@name='bbb']"<br>
     *                    2回目: "ddd[@name='eee']"<br>
     *         (状態変化) extractDecrementIndex()の引数:1回目: "aaa[@name='bbb']"<br>
     *                    2回目: "ddd[@name='eee']"<br>
     *         
     * <br>
     * 【Map属性・階層ありの試験】<br>
     * 想定した入力の場合の試験。階層間の区切り文字ありパターン。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName06() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub04 target =
            new JXPathIndexedBeanWrapperImplStub04("");
        target.isMapObjectReturnValue = false;
        target.isMapAttributeReturnValue = true;
        target.extractDecrementIndexReturnValue = "";

        // テスト実施
        result = target.toPropertyName("aaa[@name='bbb']/ddd[@name='eee']");

        // 判定
        assertEquals("aaa(bbb).ddd(eee)", result);
        assertEquals("aaa[@name='bbb']", target.isMapObjectArg1.get(0));
        assertEquals("aaa[@name='bbb']", target.extractMapKeyArg1.get(0));
        assertEquals("ddd[@name='eee']", target.extractMapKeyArg1.get(1));
        assertEquals("aaa[@name='bbb']", target.isMapAttributeArg1.get(0));
        assertEquals("ddd[@name='eee']", target.isMapAttributeArg1.get(1));
        assertEquals("aaa[@name='bbb']", target.extractMapAttributeNameArg1.get(0));
        assertEquals("ddd[@name='eee']", target.extractMapAttributeNameArg1.get(1));
        assertEquals("aaa[@name='bbb']", target.extractDecrementIndexArg1.get(0));
        assertEquals("ddd[@name='eee']", target.extractDecrementIndexArg1.get(1));
    }

    /**
     * testToPropertyName07()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：C
     * <br><br>
     * 入力値：(引数) xpath:""<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("XPath is null or blank.")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    XPath is null or blank.<br>
     *         
     * <br>
     * xpathが空文字の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testToPropertyName07() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.toPropertyName("");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("XPath is null or blank.", e.getMessage());
            assertTrue(LogUTUtil.checkError("XPath is null or blank."));
        }
    }

    /**
     * testExtractAttributeName01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa[bbb]"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa"<br>
     *         
     * <br>
     * nodeの内容が ネストなしの想定した形式の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractAttributeName01() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractAttributeName("aaa[bbb]");

        // 判定
        assertEquals("aaa", result);
    }

    /**
     * testExtractAttributeName02()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa[bbb][ddd]"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa[bbb]"<br>
     *         
     * <br>
     * nodeの内容がネストのある 想定した形式の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractAttributeName02() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractAttributeName("aaa[bbb][ddd]");

        // 判定
        assertEquals("aaa[bbb]", result);
    }

    /**
     * testExtractAttributeName03()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa.ccc.eee"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa.ccc.eee"<br>
     *         
     * <br>
     * nodeの"["がない場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractAttributeName03() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractAttributeName("aaa.ccc.eee");

        // 判定
        assertEquals("aaa.ccc.eee", result);
    }

    /**
     * testExtractAttributeName04()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：C
     * <br><br>
     * 入力値：(引数) node:""<br>
     *         
     * <br>
     * 期待値：(戻り値) String:""<br>
     *         
     * <br>
     * nodeが空文字の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractAttributeName04() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractAttributeName("");

        // 判定
        assertEquals("", result);
    }

    /**
     * testExtractMapAttributeName01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa[bbb]"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"aaa"<br>
     *         
     * <br>
     * nodeの内容が 想定した形式の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapAttributeName01() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractMapAttributeName("aaa[bbb]");

        // 判定
        assertEquals("aaa", result);
    }

    /**
     * testExtractMapAttributeName02()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"[bbb]"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:""<br>
     *         
     * <br>
     * nodeの属性名がない場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapAttributeName02() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractMapAttributeName("[bbb]");

        // 判定
        assertEquals("", result);
    }

    /**
     * testExtractMapAttributeName03()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa"<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("Cannot get Map attribute. Invalid property name. 'aaa'")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map attribute. Invalid property name. 'aaa'<br>
     *         
     * <br>
     * nodeの"["がない場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapAttributeName03() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapAttributeName("aaa");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map attribute. Invalid property name. 'aaa'", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map attribute. Invalid property name. 'aaa'"));
        }
    }

    /**
     * testExtractMapAttributeName04()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：C
     * <br><br>
     * 入力値：(引数) node:""<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgmentException("Cannot get Map attribute. Invalid property name. ''")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map attribute. Invalid property name. ''<br>
     *         
     * <br>
     * nodeが空文字の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapAttributeName04() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapAttributeName("");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map attribute. Invalid property name. ''", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map attribute. Invalid property name. ''"));
        }
    }

    /**
     * testExtractMapKey01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa[@name='bbb']"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"bbb"<br>
     *         
     * <br>
     * nodeの内容が 想定した形式の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey01() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractMapKey("aaa[@name='bbb']");

        // 判定
        assertEquals("bbb", result);
    }

    /**
     * testExtractMapKey02()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa[@name='']"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:""<br>
     *         
     * <br>
     * nodeのMapキーが空文字の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey02() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.extractMapKey("aaa[@name='']");

        // 判定
        assertEquals("", result);
    }

    /**
     * testExtractMapKey03()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa[@name='bbb'"<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("Cannot get Map key. Invalid property name. 'aaa[@name='bbb''")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map key. Invalid property name. 'aaa[@name='bbb''<br>
     *         
     * <br>
     * nodeの"]"がない場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey03() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapKey("aaa[@name='bbb'");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map key. Invalid property name. 'aaa[@name='bbb''", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map key. Invalid property name. 'aaa[@name='bbb''"));
        }
    }

    /**
     * testExtractMapKey04()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa@name='bbb']"<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("Cannot get Map key. Invalid property name. 'aaa@name='bbb']'")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map key. Invalid property name. 'aaa@name='bbb']'<br>
     *         
     * <br>
     * nodeの"["がない場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey04() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapKey("aaa@name='bbb']");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map key. Invalid property name. 'aaa@name='bbb']'", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map key. Invalid property name. 'aaa@name='bbb']'"));
        }
    }

    /**
     * testExtractMapKey05()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa"<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("Cannot get Map key. Invalid property name. 'aaa'")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map key. Invalid property name. 'aaa'<br>
     *         
     * <br>
     * nodeの[]がない場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey05() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapKey("aaa");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map key. Invalid property name. 'aaa'", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map key. Invalid property name. 'aaa'"));
        }
    }

    /**
     * testExtractMapKey06()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"aaa]@name='bbb'["<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("Cannot get Map key. Invalid property name. 'aaa]@name='bbb'['")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map key. Invalid property name. 'aaa]@name='bbb'['<br>
     *         
     * <br>
     * nodeの[]が逆向きの場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey06() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapKey("aaa]@name='bbb'[");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map key. Invalid property name. 'aaa]@name='bbb'['", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map key. Invalid property name. 'aaa]@name='bbb'['"));
        }
    }

    /**
     * testExtractMapKey07()
     * <br><br>
     * 
     * (異常系)
     * <br>
     * 観点：C
     * <br><br>
     * 入力値：(引数) node:""<br>
     *         
     * <br>
     * 期待値：(状態変化) 例外:IllegalArgumentException("Cannot get Map key. Invalid property name. ''")<br>
     *         (状態変化) ログ:ログレベル：エラー<br>
     *                    Cannot get Map key. Invalid property name. ''<br>
     *         
     * <br>
     * nodeが空文字の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractMapKey07() throws Exception {
        // 前処理
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        try {
            target.extractMapKey("");
            fail();

        } catch (IllegalArgumentException e) {
            // 判定
            assertEquals("Cannot get Map key. Invalid property name. ''", e.getMessage());
            assertTrue(LogUTUtil.checkError("Cannot get Map key. Invalid property name. ''"));
        }
    }

    /**
     * testExtractDecrementIndex01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"[3]"<br>
     *         (状態) スタブextractIncrementIndex()の戻り値:"test[3]&-1"<br>
     *         
     * <br>
     * 期待値：(戻り値) String:"[3]:-1"<br>
     *         (状態変化) extractIncrementIndex()<br>
     *                    の引数:property="[3]"<br>
     *                    increment=-1<br>
     *                    (property+":"+incrementを当メソッドの戻り値とする)<br>
     *         
     * <br>
     * extractIncrementIndex()を正しく呼び出していることの試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testExtractDecrementIndex01() throws Exception {
        // 前処理
        String result = null;
        JXPathIndexedBeanWrapperImplStub02 target =
            new JXPathIndexedBeanWrapperImplStub02("");

        // テスト実施
        result = target.extractDecrementIndex("[3]");

        // 判定
        assertEquals("[3]:-1", result);
    }

    /**
     * testIsMapAttribute01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"z[@name]"<br>
     *         
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         
     * <br>
     * Mapオブジェクトの場合の試験。nodeの途中に"[@name"
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testIsMapAttribute01() throws Exception {
        // 前処理
        boolean result = false;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.isMapAttribute("z[@name]");

        // 判定
        assertTrue(result);
    }

    /**
     * testIsMapAttribute02()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"@name"<br>
     *         
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         
     * <br>
     * Mapオブジェクト以外の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testIsMapAttribute02() throws Exception {
        // 前処理
        boolean result = true;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.isMapAttribute("@name");

        // 判定
        assertFalse(result);
    }

    /**
     * testIsMapAttribute03()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：C
     * <br><br>
     * 入力値：(引数) node:""<br>
     *         
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         
     * <br>
     * nodeが空文字列の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testIsMapAttribute03() throws Exception {
        // 前処理
        boolean result = true;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.isMapAttribute("");

        // 判定
        assertFalse(result);
    }

    /**
     * testIsMapObject01()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:".[@name"<br>
     *         
     * <br>
     * 期待値：(戻り値) boolean:true<br>
     *         
     * <br>
     * Mapオブジェクトの場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testIsMapObject01() throws Exception {
        // 前処理
        boolean result = false;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.isMapObject(".[@name");

        // 判定
        assertTrue(result);
    }

    /**
     * testIsMapObject02()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：A
     * <br><br>
     * 入力値：(引数) node:"a.[@name=]"<br>
     *         
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         
     * <br>
     * Mapオブジェクト以外の場合の試験。".[@name"が先頭から始まらない。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testIsMapObject02() throws Exception {
        // 前処理
        boolean result = true;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.isMapObject("a.[@name=]");

        // 判定
        assertFalse(result);
    }

    /**
     * testIsMapObject03()
     * <br><br>
     * 
     * (正常系)
     * <br>
     * 観点：C
     * <br><br>
     * 入力値：(引数) node:""<br>
     *         
     * <br>
     * 期待値：(戻り値) boolean:false<br>
     *         
     * <br>
     * nodeが空文字列の場合の試験。
     * <br>
     * 
     * @throws Exception このメソッドで発生した例外
     */
    public void testIsMapObject03() throws Exception {
        // 前処理
        boolean result = true;
        JXPathIndexedBeanWrapperImpl target =
            new JXPathIndexedBeanWrapperImpl("");

        // テスト実施
        result = target.isMapObject("");

        // 判定
        assertFalse(result);
    }

}
