package net.w_horse.excelpojo.annotation;

import static org.junit.Assert.assertEquals;

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.junit.Test;

import test.annotation.AnnotationTestBeanRetrieveTypeNONEButLabelSpacified;
import test.annotation.AnnotationTestBeanRetrieveTypeNONEButPositionSpacified;
import test.annotation.AnnotationTestElement;
import test.annotation.AnnotationTestElementBeanRetrieveTypeConstantValueSpacified;
import test.annotation.AnnotationTestElementBeanRetrieveTypeHorizontalRepeatsNoLabelPositionSpacified;
import test.annotation.AnnotationTestElementBeanRetrieveTypeLabeledCellSpacified;
import test.annotation.AnnotationTestElementBeanRetrieveTypePointedCellSpacified;
import test.annotation.AnnotationTestElementBeanRetrieveTypeVerticalRepeatsNoLabelPositionSpacified;
import test.annotation.AnnotationTestElementInvalidPositionFormat;
import test.annotation.AnnotationTestElementListClassNotExistClassSpacified;
import test.annotation.AnnotationTestElementListClassNotListSpacified;
import test.annotation.AnnotationTestElementRangeInvalidFormat;
import test.annotation.AnnotationTestNoSheetNameSpacified;
import net.w_horse.excelpojo.AbstractTest;
import net.w_horse.excelpojo.ExcelPOJOBridge;
import net.w_horse.excelpojo.ExcelPOJOException;

public class BeanTest extends AbstractTest {
	/**
	 * 不正な定義のテスト
	 * Bean:シート名を指定せずに取得
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanNoSheetNameSpacified() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestNoSheetNameSpacified.class);
			@SuppressWarnings("unused")
			AnnotationTestNoSheetNameSpacified targetBean = (AnnotationTestNoSheetNameSpacified) bridge.load("./files/upload/ParserTest.xls");
		} catch (Exception e) {
			assertEquals("シート名を指定せずに取得",
					"There is no sheet name specified.",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveTypeにLabeledCellを指定
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanRetrieveTypeLabeledCellSpacified() throws Exception {
		try {
			@SuppressWarnings("unused")
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementBeanRetrieveTypeLabeledCellSpacified.class);
		} catch (Exception e) {
			assertEquals("Bean:retrieveTypeにLabeledCellを指定",
					"There is an invalid retrieveType(labeledCell) in Bean.",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveTypeにPointedCellを指定
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanRetrieveTypePointedCellSpacified() throws Exception {
		try {
			@SuppressWarnings("unused")
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementBeanRetrieveTypePointedCellSpacified.class);
		} catch (Exception e) {
			assertEquals("Bean:retrieveTypeにLabeledCellを指定",
					"There is an invalid retrieveType(pointedCell) in Bean.",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveTypeにConstantValueを指定
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanRetrieveTypeConstantValueSpacified() throws Exception {
		try {
			@SuppressWarnings("unused")
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementBeanRetrieveTypeConstantValueSpacified.class);
		} catch (Exception e) {
			assertEquals("Bean:retrieveTypeにLabeledCellを指定",
					"There is an invalid retrieveType(constantValue) in Bean.",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveType=verticalRepeatsを指定するがlabelもpositionも指定しない
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanRetrieveTypeVerticalRepeatsNoLabelPositionSpacified() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementBeanRetrieveTypeVerticalRepeatsNoLabelPositionSpacified.class);
			@SuppressWarnings("unused")
			AnnotationTestElementBeanRetrieveTypeVerticalRepeatsNoLabelPositionSpacified targetBean
				= (AnnotationTestElementBeanRetrieveTypeVerticalRepeatsNoLabelPositionSpacified) bridge.load("./files/upload/ParserTest.xls", "基本");
		} catch (Exception e) {
			assertEquals("retrieveTypeを指定するがlabelもpositionも指定しない",
					"java.lang.IllegalArgumentException: Neither the label nor the position are specified.",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveType=horizontalRepeatsを指定するがlabelもpositionも指定しない
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanRetrieveTypeHorizontalRepeatsNoLabelPositionSpacified() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementBeanRetrieveTypeHorizontalRepeatsNoLabelPositionSpacified.class);
			@SuppressWarnings("unused")
			AnnotationTestElementBeanRetrieveTypeHorizontalRepeatsNoLabelPositionSpacified targetBean
				= (AnnotationTestElementBeanRetrieveTypeHorizontalRepeatsNoLabelPositionSpacified) bridge.load("./files/upload/ParserTest.xls", "基本");
		} catch (Exception e) {
			assertEquals("retrieveTypeを指定するがlabelもpositionも指定しない",
					"java.lang.IllegalArgumentException: Neither the label nor the position are specified.",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveTypeに指定がない（RetrieveType.NONE）がlabelに指定がある
	 * labelを無視して処理を行う⇒正常処理
	 * @throws ExcelPOJOException
	 */
	@Test
	public void testBeanRetrieveTypeNONEButLabelSpacified() throws Exception {
		ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestBeanRetrieveTypeNONEButLabelSpacified.class);
		AnnotationTestBeanRetrieveTypeNONEButLabelSpacified targetBean
				= (AnnotationTestBeanRetrieveTypeNONEButLabelSpacified) bridge.load("./files/upload/ParserTest.xls", "基本");

		assertEquals("基本（取得）：LabeledCell：String", "文字列１", targetBean.getStringField4LabeledCell1());
		assertEquals("基本（取得）：LabeledCell：int", 45, targetBean.getIntField4LabeledCell1());
		assertEquals("基本（取得）：LabeledCell：boolean", true, targetBean.isBooleanField4LabeledCell1());
		assertEquals("基本（取得）：LabeledCell：double", 78.56, targetBean.getDoubleField4LabeledCell1(), 0.001);
		assertEquals("基本（取得）：LabeledCell：日付（文字列）", "2010/06/18", targetBean.getDateField4LabeledCell1());

		assertEquals("基本（取得）：PointedCell：String", "位置による検索：文字列", targetBean.getStringField4PointedCell1());
		assertEquals("基本（取得）：PointedCell：int", 234, targetBean.getIntField4PointedCell1());
		assertEquals("基本（取得）：PointedCell：boolean", false, targetBean.isBooleanField4PointedCell1());
		assertEquals("基本（取得）：PointedCell：double", 963.2, targetBean.getDoubleField4PointedCell1(), 0.001);
		assertEquals("基本（取得）：PointedCell：日付（文字列）", "2010/06/22", targetBean.getDateField4PointedCell1());

		assertEquals("基本（取得）：ConstantValue：String", "固定値：文字列", targetBean.getStringField4ConstantValue1());
		assertEquals("基本（取得）：ConstantValue：int", 258, targetBean.getIntField4ConstantValue1());
		assertEquals("基本（取得）：ConstantValue：boolean", false, targetBean.isBooleanField4ConstantValue1());
		assertEquals("基本（取得）：ConstantValue：double", 3.14, targetBean.getDoubleField4ConstantValue1(), 0.001);

		Map<String, String> countMembersMap = targetBean.getMapField4MappedCell1();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, countMembersMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, countMembersMap.keySet().size());

		String[] keys = new String[]{"5月", "6月", "7月", "8月"};
		String[] values = new String[]{"0", "0", "1", "4"};
		int i = 0;
		for (String key : countMembersMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], countMembersMap.get(key));
			i++;
		}

		List<AnnotationTestElement> listElm = targetBean.getList4VerticalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：List", ArrayList.class, listElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 4, listElm.size());

		AnnotationTestElement elm = listElm.get(0);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "武田", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信玄", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 175.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", elm.getAdmissionDay());
		Map<String, String> useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"160", "182", "165", "177"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "織田", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信長", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 178.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"193", "188", "171", "165"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(2);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 3, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "徳川", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "家康", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 165.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"162", "155", "165", "166"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(3);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 4, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "細川", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "ガラシャ", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 160.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"143", "177", "151", "182"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		AnnotationTestElement[] arrElm = targetBean.getArr4VerticalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：Array", AnnotationTestElement[].class, arrElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 2, arrElm.length);

		elm = arrElm[0];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "篠原", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "まつ", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 156.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"90", "56", "81", "23"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = arrElm[1];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "平", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "清盛", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 168.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"112", "186", "78", "140"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		listElm = targetBean.getList4HorizontalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：List", ArrayList.class, listElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 4, listElm.size());

		elm = listElm.get(0);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "武田H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信玄H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 175.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"160", "182", "165", "177"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "織田H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信長H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 178.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"193", "188", "171", "165"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(2);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 3, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "徳川H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "家康H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 165.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"162", "155", "165", "166"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(3);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 4, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "細川H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "ガラシャH", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 160.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"143", "177", "151", "182"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		arrElm = targetBean.getArr4HorizontalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：Array", AnnotationTestElement[].class, arrElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 2, arrElm.length);

		elm = arrElm[0];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "篠原H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "まつH", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 156.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"90", "56", "81", "23"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = arrElm[1];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "平H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "清盛H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 168.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"112", "186", "78", "140"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}


		bridge.save(
				"./files/template/ParserTest_Template.xls",
				"基本",
				"./files/export/AnnotationParserTest_基本.xls",
				targetBean);

		FileInputStream fileInputStream = null;
		try {
			fileInputStream = new FileInputStream("./files/export/AnnotationParserTest_基本.xls");
			HSSFWorkbook workBook = new HSSFWorkbook(new POIFSFileSystem(fileInputStream));
			HSSFSheet sheet = workBook.getSheet("基本");

			assertEquals("基本（書き込み）：LabeledCell：String", "文字列１", getCellValue(sheet, 42, 9, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：LabeledCell：int", 45, getCellValue(sheet, 43, 9, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：LabeledCell：boolean", true, getCellValue(sheet, 44, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：LabeledCell：double", 78.56, (Double)getCellValue(sheet, 45, 9, CELL_TYPE_DOUBLE), 0.001);
			assertEquals("基本（書き込み）：LabeledCell：日付（文字列）", "2010/06/18", getCellValue(sheet, 46, 9, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：PointedCell：String", "位置による検索：文字列", getCellValue(sheet, 14, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：PointedCell：int",234, getCellValue(sheet, 15, 3, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：PointedCell：boolean",false, getCellValue(sheet, 16, 3, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：PointedCell：double",963.2, (Double)getCellValue(sheet, 17, 3, CELL_TYPE_DOUBLE), 0.001);
			assertEquals("基本（書き込み）：PointedCell：日付（文字列）","2010/06/22", getCellValue(sheet, 18, 3, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 21, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","0",   getCellValue(sheet, 22, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 21, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","0",   getCellValue(sheet, 22, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 21, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","1",   getCellValue(sheet, 22, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 21, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","4",   getCellValue(sheet, 22, 5, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 3, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "武田", getCellValue(sheet, 3, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信玄", getCellValue(sheet, 3, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 3, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 175.5, (Double)getCellValue(sheet, 3, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", getCellValue(sheet, 3, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 2, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 2, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 2, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 2, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","160", getCellValue(sheet, 3, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","182", getCellValue(sheet, 3, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 3, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","177", getCellValue(sheet, 3, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 4, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "織田", getCellValue(sheet, 4, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信長", getCellValue(sheet, 4, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 4, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 178.5, (Double)getCellValue(sheet, 4, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", getCellValue(sheet, 4, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","193", getCellValue(sheet, 4, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","188", getCellValue(sheet, 4, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","171", getCellValue(sheet, 4, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","165", getCellValue(sheet, 4, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 3, getCellValue(sheet, 5, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "徳川", getCellValue(sheet, 5, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "家康", getCellValue(sheet, 5, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 5, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 165.0, (Double)getCellValue(sheet, 5, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", getCellValue(sheet, 5, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","162", getCellValue(sheet, 5, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","155", getCellValue(sheet, 5, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 5, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","166", getCellValue(sheet, 5, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 4, getCellValue(sheet, 6, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "細川", getCellValue(sheet, 6, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "ガラシャ", getCellValue(sheet, 6, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 6, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 160.0, (Double)getCellValue(sheet, 6, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", getCellValue(sheet, 6, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","143", getCellValue(sheet, 6, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","177", getCellValue(sheet, 6, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","151", getCellValue(sheet, 6, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","182", getCellValue(sheet, 6, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 29, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "篠原", getCellValue(sheet, 29, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "まつ", getCellValue(sheet, 29, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 29, 7, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 156.0, (Double)getCellValue(sheet, 29, 8, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", getCellValue(sheet, 29, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 28, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 28, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 28, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 28, 17, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","90", getCellValue(sheet, 29, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","56", getCellValue(sheet, 29, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","81", getCellValue(sheet, 29, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","23", getCellValue(sheet, 29, 17, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 30, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "平", getCellValue(sheet, 30, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "清盛", getCellValue(sheet, 30, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 30, 7, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 168.5, (Double)getCellValue(sheet, 30, 8, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", getCellValue(sheet, 30, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","112", getCellValue(sheet, 30, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","186", getCellValue(sheet, 30, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","78", getCellValue(sheet, 30, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","140", getCellValue(sheet, 30, 17, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 50, 3, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "武田H", getCellValue(sheet, 53, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信玄H", getCellValue(sheet, 54, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 60, 3, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 175.5, (Double)getCellValue(sheet, 59, 3, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", getCellValue(sheet, 52, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 62, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 63, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 64, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 65, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","160", getCellValue(sheet, 62, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","182", getCellValue(sheet, 63, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 64, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","177", getCellValue(sheet, 65, 3, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 50, 4, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "織田H", getCellValue(sheet, 53, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信長H", getCellValue(sheet, 54, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 60, 4, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 178.5, (Double)getCellValue(sheet, 59, 4, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", getCellValue(sheet, 52, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","193", getCellValue(sheet, 62, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","188", getCellValue(sheet, 63, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","171", getCellValue(sheet, 64, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","165", getCellValue(sheet, 65, 4, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 3, getCellValue(sheet, 50, 5, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "徳川H", getCellValue(sheet, 53, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "家康H", getCellValue(sheet, 54, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 60, 5, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 165.0, (Double)getCellValue(sheet, 59, 5, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", getCellValue(sheet, 52, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","162", getCellValue(sheet, 62, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","155", getCellValue(sheet, 63, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 64, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","166", getCellValue(sheet, 65, 5, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 4, getCellValue(sheet, 50, 6, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "細川H", getCellValue(sheet, 53, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "ガラシャH", getCellValue(sheet, 54, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 60, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 160.0, (Double)getCellValue(sheet, 59, 6, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", getCellValue(sheet, 52, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","143", getCellValue(sheet, 62, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","177", getCellValue(sheet, 63, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","151", getCellValue(sheet, 64, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","182", getCellValue(sheet, 65, 6, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 77, 3, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "篠原H", getCellValue(sheet, 80, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "まつH", getCellValue(sheet, 81, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 78, 3, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 156.0, (Double)getCellValue(sheet, 87, 3, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", getCellValue(sheet, 79, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 89, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 90, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 91, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 92, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","90", getCellValue(sheet, 89, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","56", getCellValue(sheet, 90, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","81", getCellValue(sheet, 91, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","23", getCellValue(sheet, 92, 3, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 77, 4, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "平H", getCellValue(sheet, 80, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "清盛H", getCellValue(sheet, 81, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 78, 4, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 168.5, (Double)getCellValue(sheet, 87, 4, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", getCellValue(sheet, 79, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","112", getCellValue(sheet, 89, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","186", getCellValue(sheet, 90, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","78", getCellValue(sheet, 91, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","140", getCellValue(sheet, 92, 4, CELL_TYPE_DATE_STR));
		} finally {
			try { fileInputStream.close(); } catch (Exception e) { }
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:retrieveTypeに指定がない（RetrieveType.NONE）がpositionに指定がある
	 * labelを無視して処理を行う⇒正常処理
	 * @throws ExcelPOJOException
	 */
	@Test
	public void testBeanRetrieveTypeNONEButPositionSpacified() throws Exception {
		ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestBeanRetrieveTypeNONEButPositionSpacified.class);
		AnnotationTestBeanRetrieveTypeNONEButPositionSpacified targetBean
				= (AnnotationTestBeanRetrieveTypeNONEButPositionSpacified) bridge.load("./files/upload/ParserTest.xls", "基本");

		assertEquals("基本（取得）：LabeledCell：String", "文字列１", targetBean.getStringField4LabeledCell1());
		assertEquals("基本（取得）：LabeledCell：int", 45, targetBean.getIntField4LabeledCell1());
		assertEquals("基本（取得）：LabeledCell：boolean", true, targetBean.isBooleanField4LabeledCell1());
		assertEquals("基本（取得）：LabeledCell：double", 78.56, targetBean.getDoubleField4LabeledCell1(), 0.001);
		assertEquals("基本（取得）：LabeledCell：日付（文字列）", "2010/06/18", targetBean.getDateField4LabeledCell1());

		assertEquals("基本（取得）：PointedCell：String", "位置による検索：文字列", targetBean.getStringField4PointedCell1());
		assertEquals("基本（取得）：PointedCell：int", 234, targetBean.getIntField4PointedCell1());
		assertEquals("基本（取得）：PointedCell：boolean", false, targetBean.isBooleanField4PointedCell1());
		assertEquals("基本（取得）：PointedCell：double", 963.2, targetBean.getDoubleField4PointedCell1(), 0.001);
		assertEquals("基本（取得）：PointedCell：日付（文字列）", "2010/06/22", targetBean.getDateField4PointedCell1());

		assertEquals("基本（取得）：ConstantValue：String", "固定値：文字列", targetBean.getStringField4ConstantValue1());
		assertEquals("基本（取得）：ConstantValue：int", 258, targetBean.getIntField4ConstantValue1());
		assertEquals("基本（取得）：ConstantValue：boolean", false, targetBean.isBooleanField4ConstantValue1());
		assertEquals("基本（取得）：ConstantValue：double", 3.14, targetBean.getDoubleField4ConstantValue1(), 0.001);

		Map<String, String> countMembersMap = targetBean.getMapField4MappedCell1();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, countMembersMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, countMembersMap.keySet().size());

		String[] keys = new String[]{"5月", "6月", "7月", "8月"};
		String[] values = new String[]{"0", "0", "1", "4"};
		int i = 0;
		for (String key : countMembersMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], countMembersMap.get(key));
			i++;
		}

		List<AnnotationTestElement> listElm = targetBean.getList4VerticalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：List", ArrayList.class, listElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 4, listElm.size());

		AnnotationTestElement elm = listElm.get(0);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "武田", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信玄", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 175.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", elm.getAdmissionDay());
		Map<String, String> useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"160", "182", "165", "177"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "織田", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信長", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 178.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"193", "188", "171", "165"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(2);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 3, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "徳川", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "家康", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 165.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"162", "155", "165", "166"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(3);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 4, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "細川", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "ガラシャ", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 160.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"143", "177", "151", "182"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		AnnotationTestElement[] arrElm = targetBean.getArr4VerticalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：Array", AnnotationTestElement[].class, arrElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 2, arrElm.length);

		elm = arrElm[0];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "篠原", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "まつ", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 156.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"90", "56", "81", "23"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = arrElm[1];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "平", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "清盛", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 168.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"112", "186", "78", "140"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		listElm = targetBean.getList4HorizontalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：List", ArrayList.class, listElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 4, listElm.size());

		elm = listElm.get(0);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "武田H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信玄H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 175.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"160", "182", "165", "177"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "織田H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "信長H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 178.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"193", "188", "171", "165"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(2);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 3, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "徳川H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "家康H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 165.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"162", "155", "165", "166"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = listElm.get(3);
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 4, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "細川H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "ガラシャH", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 160.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"143", "177", "151", "182"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		arrElm = targetBean.getArr4HorizontalRepeats1();
		assertEquals("基本（取得）：VerticalRepeats：Array", AnnotationTestElement[].class, arrElm.getClass());
		assertEquals("基本（取得）：VerticalRepeats：size()", 2, arrElm.length);

		elm = arrElm[0];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 1, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "篠原H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "まつH", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", true, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 156.0, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"90", "56", "81", "23"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}

		elm = arrElm[1];
		assertEquals("基本（取得）：VerticalRepeats(Element)：int", 2, elm.getId());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "平H", elm.getFirstName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：String", "清盛H", elm.getLastName());
		assertEquals("基本（取得）：VerticalRepeats(Element)：boolean", false, elm.isPremiumMember());
		assertEquals("基本（取得）：VerticalRepeats(Element)：double", 168.5, elm.getTall(), 0.1);
		assertEquals("基本（取得）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", elm.getAdmissionDay());
		useTimeMap = elm.getUseTimeMap();
		assertEquals("基本（取得）：MappedCell：LinkedHashMap", LinkedHashMap.class, useTimeMap.getClass());
		assertEquals("基本（取得）：MappedCell：size()", 4, useTimeMap.keySet().size());
		keys = new String[]{"5月", "6月", "7月", "8月"};
		values = new String[]{"112", "186", "78", "140"};
		i = 0;
		for (String key : useTimeMap.keySet()) {
			assertEquals("基本（取得）：MappedCell：key" + i, keys[i], key);
			assertEquals("基本（取得）：MappedCell：value" + i, values[i], useTimeMap.get(key));
			i++;
		}


		bridge.save(
				"./files/template/ParserTest_Template.xls",
				"基本",
				"./files/export/AnnotationParserTest_基本.xls",
				targetBean);

		FileInputStream fileInputStream = null;
		try {
			fileInputStream = new FileInputStream("./files/export/AnnotationParserTest_基本.xls");
			HSSFWorkbook workBook = new HSSFWorkbook(new POIFSFileSystem(fileInputStream));
			HSSFSheet sheet = workBook.getSheet("基本");

			assertEquals("基本（書き込み）：LabeledCell：String", "文字列１", getCellValue(sheet, 42, 9, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：LabeledCell：int", 45, getCellValue(sheet, 43, 9, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：LabeledCell：boolean", true, getCellValue(sheet, 44, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：LabeledCell：double", 78.56, (Double)getCellValue(sheet, 45, 9, CELL_TYPE_DOUBLE), 0.001);
			assertEquals("基本（書き込み）：LabeledCell：日付（文字列）", "2010/06/18", getCellValue(sheet, 46, 9, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：PointedCell：String", "位置による検索：文字列", getCellValue(sheet, 14, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：PointedCell：int",234, getCellValue(sheet, 15, 3, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：PointedCell：boolean",false, getCellValue(sheet, 16, 3, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：PointedCell：double",963.2, (Double)getCellValue(sheet, 17, 3, CELL_TYPE_DOUBLE), 0.001);
			assertEquals("基本（書き込み）：PointedCell：日付（文字列）","2010/06/22", getCellValue(sheet, 18, 3, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 21, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","0",   getCellValue(sheet, 22, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 21, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","0",   getCellValue(sheet, 22, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 21, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","1",   getCellValue(sheet, 22, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 21, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","4",   getCellValue(sheet, 22, 5, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 3, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "武田", getCellValue(sheet, 3, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信玄", getCellValue(sheet, 3, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 3, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 175.5, (Double)getCellValue(sheet, 3, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", getCellValue(sheet, 3, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 2, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 2, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 2, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 2, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","160", getCellValue(sheet, 3, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","182", getCellValue(sheet, 3, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 3, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","177", getCellValue(sheet, 3, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 4, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "織田", getCellValue(sheet, 4, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信長", getCellValue(sheet, 4, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 4, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 178.5, (Double)getCellValue(sheet, 4, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", getCellValue(sheet, 4, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","193", getCellValue(sheet, 4, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","188", getCellValue(sheet, 4, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","171", getCellValue(sheet, 4, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","165", getCellValue(sheet, 4, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 3, getCellValue(sheet, 5, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "徳川", getCellValue(sheet, 5, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "家康", getCellValue(sheet, 5, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 5, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 165.0, (Double)getCellValue(sheet, 5, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", getCellValue(sheet, 5, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","162", getCellValue(sheet, 5, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","155", getCellValue(sheet, 5, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 5, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","166", getCellValue(sheet, 5, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 4, getCellValue(sheet, 6, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "細川", getCellValue(sheet, 6, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "ガラシャ", getCellValue(sheet, 6, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 6, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 160.0, (Double)getCellValue(sheet, 6, 11, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", getCellValue(sheet, 6, 10, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","143", getCellValue(sheet, 6, 13, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","177", getCellValue(sheet, 6, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","151", getCellValue(sheet, 6, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","182", getCellValue(sheet, 6, 16, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 29, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "篠原", getCellValue(sheet, 29, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "まつ", getCellValue(sheet, 29, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 29, 7, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 156.0, (Double)getCellValue(sheet, 29, 8, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", getCellValue(sheet, 29, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 28, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 28, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 28, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 28, 17, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","90", getCellValue(sheet, 29, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","56", getCellValue(sheet, 29, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","81", getCellValue(sheet, 29, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","23", getCellValue(sheet, 29, 17, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 30, 2, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "平", getCellValue(sheet, 30, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "清盛", getCellValue(sheet, 30, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 30, 7, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 168.5, (Double)getCellValue(sheet, 30, 8, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", getCellValue(sheet, 30, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","112", getCellValue(sheet, 30, 14, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","186", getCellValue(sheet, 30, 15, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","78", getCellValue(sheet, 30, 16, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","140", getCellValue(sheet, 30, 17, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 50, 3, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "武田H", getCellValue(sheet, 53, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信玄H", getCellValue(sheet, 54, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 60, 3, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 175.5, (Double)getCellValue(sheet, 59, 3, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月11日", getCellValue(sheet, 52, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 62, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 63, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 64, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 65, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","160", getCellValue(sheet, 62, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","182", getCellValue(sheet, 63, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 64, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","177", getCellValue(sheet, 65, 3, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 50, 4, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "織田H", getCellValue(sheet, 53, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "信長H", getCellValue(sheet, 54, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 60, 4, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 178.5, (Double)getCellValue(sheet, 59, 4, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月20日", getCellValue(sheet, 52, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","193", getCellValue(sheet, 62, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","188", getCellValue(sheet, 63, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","171", getCellValue(sheet, 64, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","165", getCellValue(sheet, 65, 4, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 3, getCellValue(sheet, 50, 5, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "徳川H", getCellValue(sheet, 53, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "家康H", getCellValue(sheet, 54, 5, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 60, 5, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 165.0, (Double)getCellValue(sheet, 59, 5, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月18日", getCellValue(sheet, 52, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","162", getCellValue(sheet, 62, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","155", getCellValue(sheet, 63, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","165", getCellValue(sheet, 64, 5, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","166", getCellValue(sheet, 65, 5, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 4, getCellValue(sheet, 50, 6, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "細川H", getCellValue(sheet, 53, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "ガラシャH", getCellValue(sheet, 54, 6, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 60, 9, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 160.0, (Double)getCellValue(sheet, 59, 6, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月22日", getCellValue(sheet, 52, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","143", getCellValue(sheet, 62, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","177", getCellValue(sheet, 63, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","151", getCellValue(sheet, 64, 6, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","182", getCellValue(sheet, 65, 6, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 1, getCellValue(sheet, 77, 3, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "篠原H", getCellValue(sheet, 80, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "まつH", getCellValue(sheet, 81, 3, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", true, getCellValue(sheet, 78, 3, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 156.0, (Double)getCellValue(sheet, 87, 3, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月15日", getCellValue(sheet, 79, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key1","5月", getCellValue(sheet, 89, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key2","6月", getCellValue(sheet, 90, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key3","7月", getCellValue(sheet, 91, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：key4","8月", getCellValue(sheet, 92, 2, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","90", getCellValue(sheet, 89, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","56", getCellValue(sheet, 90, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","81", getCellValue(sheet, 91, 3, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","23", getCellValue(sheet, 92, 3, CELL_TYPE_DATE_STR));

			assertEquals("基本（書き込み）：VerticalRepeats(Element)：int", 2, getCellValue(sheet, 77, 4, CELL_TYPE_INT));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "平H", getCellValue(sheet, 80, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：String", "清盛H", getCellValue(sheet, 81, 4, CELL_TYPE_STRING));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：boolean", false, getCellValue(sheet, 78, 4, CELL_TYPE_BOOLEAN));
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：double", 168.5, (Double)getCellValue(sheet, 87, 4, CELL_TYPE_DOUBLE), 0.1);
			assertEquals("基本（書き込み）：VerticalRepeats(Element)：日付（文字列）", "2010年6月17日", getCellValue(sheet, 79, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val1","112", getCellValue(sheet, 89, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val2","186", getCellValue(sheet, 90, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val3","78", getCellValue(sheet, 91, 4, CELL_TYPE_DATE_STR));
			assertEquals("基本（書き込み）：MappedCell：val4","140", getCellValue(sheet, 92, 4, CELL_TYPE_DATE_STR));
		} finally {
			try { fileInputStream.close(); } catch (Exception e) { }
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:positionの書式不正
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanInvalidPositionFormat() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementInvalidPositionFormat.class);
			@SuppressWarnings("unused")
			AnnotationTestElementInvalidPositionFormat targetBean
				= (AnnotationTestElementInvalidPositionFormat) bridge.load("./files/upload/ParserTest.xls", "基本");
		} catch (Exception e) {
			assertEquals("Bean:positionの書式不正",
					"java.lang.IllegalArgumentException: There is a mistake in the format of the position specification. \n"
					+ "Format:(rowIndex, colIndex)  rowIndex={1,2,3,...}, colIndex={1,2,3,...}",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:listClassに該当クラスの配列でもない、Listでもないクラスを指定
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanListClassNotListSpacified() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementListClassNotListSpacified.class);
			@SuppressWarnings("unused")
			AnnotationTestElementListClassNotListSpacified targetBean
				= (AnnotationTestElementListClassNotListSpacified) bridge.load("./files/upload/ParserTest.xls", "基本");
		} catch (Exception e) {
			assertEquals("Bean:listClassに該当クラスの配列でもない、Listでもないクラスを指定",
					"java.lang.IllegalArgumentException: There is an invalid class in the listClass specification. ",
					e.getMessage());
			throw e;
		}
	}

	/**
	 * 不正な定義のテスト
	 * Bean:listClassに存在しないクラスを指定
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanListClassNotExistClassSpacified() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementListClassNotExistClassSpacified.class);
			@SuppressWarnings("unused")
			AnnotationTestElementListClassNotExistClassSpacified targetBean
				= (AnnotationTestElementListClassNotExistClassSpacified) bridge.load("./files/upload/ParserTest.xls", "基本");
		} catch (Exception e) {
			assertEquals("Bean:listClassに該当クラスの配列でもない、Listでもないクラスを指定",
					"java.lang.ClassNotFoundException: XXXX",
					e.getMessage());
			throw e;
		}
	}


	/**
	 * 不正な定義のテスト
	 * Bean:rangeに不正なフォーマットを指定
	 * @throws ExcelPOJOException
	 */
	@Test(expected=ExcelPOJOException.class)
	public void testBeanRangeInvalidFormat() throws Exception {
		try {
			ExcelPOJOBridge bridge = new ExcelPOJOBridge(AnnotationTestElementRangeInvalidFormat.class);
			@SuppressWarnings("unused")
			AnnotationTestElementRangeInvalidFormat targetBean
				= (AnnotationTestElementRangeInvalidFormat) bridge.load("./files/upload/ParserTest.xls", "基本");
		} catch (Exception e) {
			assertEquals("Bean:rangeに不正なフォーマットを指定",
					"java.lang.IllegalArgumentException: There is a mistake in the format of the range specification. \n"
					+ "Format:(startRowIndex, startColIndex)-(endRowIndex, endColIndex)  rowIndex={1,2,3,...}, colIndex={1,2,3,...}",
					e.getMessage());
			throw e;
		}
	}

}
