package com.gh.mygreen.xlsmapper.validation; import static com.gh.mygreen.xlsmapper.TestUtils.*; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; import java.util.HashMap; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; /** * {@link SheetBindingErrors}のテスタ * * @since 0.5 * @author T.TSUCHIE * */ public class SheetBindingErrorsTest { @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void test_setNestedPath() throws Exception { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setNestedPath("sheet"); assertThat(errors.getCurrentPath(), is("sheet")); errors.setNestedPath("sheet.list"); assertThat(errors.getCurrentPath(), is("sheet.list")); errors.setRootPath(); assertThat(errors.getCurrentPath(), is("")); // 特殊なパターン errors.setNestedPath("."); assertThat(errors.getCurrentPath(), is("")); errors.setNestedPath(""); assertThat(errors.getCurrentPath(), is("")); errors.setNestedPath("sheet."); assertThat(errors.getCurrentPath(), is("sheet")); errors.setNestedPath("sheet.list."); assertThat(errors.getCurrentPath(), is("sheet.list")); } @Test public void test_pushNestedPath_and_popNestedPath() throws Exception { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); // 通常の場合 errors.pushNestedPath("sheet"); assertThat(errors.getCurrentPath(), is("sheet")); errors.pushNestedPath("list"); assertThat(errors.getCurrentPath(), is("sheet.list")); errors.popNestedPath(); assertThat(errors.getCurrentPath(), is("sheet")); errors.popNestedPath(); assertThat(errors.getCurrentPath(), is("")); // インデックス指定の場合 errors.pushNestedPath("sheet"); assertThat(errors.getCurrentPath(), is("sheet")); errors.pushNestedPath("list", 0); assertThat(errors.getCurrentPath(), is("sheet.list[0]")); errors.popNestedPath(); assertThat(errors.getCurrentPath(), is("sheet")); // キー指定の場合 errors.pushNestedPath("map", "code01"); assertThat(errors.getCurrentPath(), is("sheet.map[code01]")); // エラーの場合 - ネストするパスの指定が空の場合 try { errors.setRootPath(); errors.pushNestedPath("."); fail(); } catch(Exception e) { assertThat(e, instanceOf(IllegalArgumentException.class)); } // エラーの場合 - ネストするパスの指定が空の場合 try { errors.setRootPath(); errors.pushNestedPath(null); fail(); } catch(Exception e) { assertThat(e, instanceOf(IllegalArgumentException.class)); } // エラーの場合 - 取り出すパスがそれ以上内場合 try { errors.setRootPath(); errors.popNestedPath(); fail(); } catch(Exception e) { assertThat(e, instanceOf(IllegalStateException.class)); } } @Test public void test_addError_and_getError() { SheetBindingErrors errors = new SheetBindingErrors("SampleObj"); assertThat(errors.hasErrors(), is(false)); assertThat(errors.getFirstGlobalError(), is(nullValue())); assertThat(errors.getFirstFieldError(), is(nullValue())); errors.addError(new ObjectError("obj01")); errors.addError(new ObjectError("obj02")); errors.addError(new FieldError("obj03", "list[0].f01")); errors.addError(new FieldError("obj03", "list[0].f02")); errors.addError(new FieldError("obj03", "list[1].f01")); errors.addError(new FieldError("obj04", "map[a01].f01")); assertThat(errors.hasGlobalErrors(), is(true)); assertThat(errors.getGlobalErrorCount(), is(2)); assertThat(errors.hasSheetGlobalErrors(), is(false)); ObjectError objError01 = errors.getFirstGlobalError(); assertThat(objError01.getObjectName(), is("obj01")); assertThat(errors.hasFieldErrors(), is(true)); assertThat(errors.getFieldErrorCount(), is(4)); assertThat(errors.hasCellFieldErrors(), is(false)); assertThat(errors.hasFieldErrors("list[0].f01"), is(true)); assertThat(errors.getFieldErrorCount("list[0].f01"), is(1)); assertThat(errors.hasFieldErrors("list[0].*"), is(true)); assertThat(errors.getFieldErrorCount("list[0].*"), is(2)); FieldError fieldError01 = errors.getFirstFieldError("list[0].*"); assertThat(fieldError01.getFieldPath(), is("list[0].f01")); FieldError fieldError02 = errors.getFirstFieldError(); assertThat(fieldError02.getFieldPath(), is("list[0].f01")); assertThat(errors.hasFieldErrors("list*"), is(true)); assertThat(errors.getFieldErrorCount("list*"), is(3)); // リセット errors.clearAllErrors(); assertThat(errors.hasErrors(), is(false)); } /** * シート、セルなどの情報のエラーのテスト */ @Test public void test_Sheet_addError_and_getError() { String sheetName = "名簿シート"; SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setSheetName(sheetName); assertThat(errors.hasErrors(), is(false)); assertThat(errors.getFirstSheetGlobalError(), is(nullValue())); assertThat(errors.getFirstCellFieldError(), is(nullValue())); assertThat(errors.getSheetName(), is(sheetName)); errors.addError(new SheetObjectError("obj01", sheetName)); errors.addError(new SheetObjectError("obj02", sheetName)); errors.addError(new CellFieldError("obj03", "list[0].f01", sheetName, toPointAddress("A2"))); errors.addError(new CellFieldError("obj03", "list[0].f02", sheetName, toPointAddress("B2"))); errors.addError(new CellFieldError("obj03", "list[1].f01", sheetName, toPointAddress("A3"))); errors.addError(new CellFieldError("obj04", "map[a01].f01", sheetName, toPointAddress("D3"))); assertThat(errors.hasSheetGlobalErrors(), is(true)); assertThat(errors.getSheetGlobalErrorCount(), is(2)); SheetObjectError objError01 = errors.getFirstSheetGlobalError(); assertThat(objError01.getObjectName(), is("obj01")); assertThat(objError01.getSheetName(), is(sheetName)); assertThat(errors.hasCellFieldErrors(), is(true)); assertThat(errors.getCellFieldErrorCount(), is(4)); assertThat(errors.hasCellFieldErrors("list[0].f01"), is(true)); assertThat(errors.getCellFieldErrorCount("list[0].f01"), is(1)); assertThat(errors.hasCellFieldErrors("list[0].*"), is(true)); assertThat(errors.getCellFieldErrorCount("list[0].*"), is(2)); CellFieldError fieldError01 = errors.getFirstCellFieldError("list[0].*"); assertThat(fieldError01.getFieldPath(), is("list[0].f01")); assertThat(fieldError01.getSheetName(), is(sheetName)); assertThat(fieldError01.getCellAddress(), is(toPointAddress("A2"))); CellFieldError fieldError02 = errors.getFirstCellFieldError(); assertThat(fieldError02.getFieldPath(), is("list[0].f01")); assertThat(fieldError01.getSheetName(), is(sheetName)); assertThat(fieldError01.getCellAddress(), is(toPointAddress("A2"))); assertThat(errors.hasCellFieldErrors("list*"), is(true)); assertThat(errors.getCellFieldErrorCount("list*"), is(3)); // リセット errors.clearAllErrors(); assertThat(errors.hasErrors(), is(false)); } /** * オブジェクトエラーの追加 */ @Test public void test_reject() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.reject("error001"); errors.reject("error002", "error02.default"); errors.reject("error003", new HashMap<String, Object>()); errors.reject("error004", new HashMap<String, Object>(), "error004.default"); errors.reject("error005", new Object[]{}); errors.reject("error006", new Object[]{}, "error006.default"); assertThat(errors.hasGlobalErrors(), is(true)); assertThat(errors.getGlobalErrorCount(), is(6)); assertThat(errors.hasSheetGlobalErrors(), is(false)); assertThat(errors.getSheetGlobalErrorCount(), is(0)); ObjectError objError001 = errors.getFirstGlobalError(); assertThat(objError001.getObjectName(), is("SampleSheet")); assertThat(objError001.getCodes(), is(hasItemInArray("error001"))); } /** * シートのオブジェクトエラーの追加 */ @Test public void test_rejectSheet() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setSheetName("名簿用シート"); errors.rejectSheet("error001"); errors.rejectSheet("error002", "error02.default"); errors.rejectSheet("error003", new HashMap<String, Object>()); errors.rejectSheet("error004", new HashMap<String, Object>(), "error004.default"); errors.rejectSheet("error005", new Object[]{}); errors.rejectSheet("error006", new Object[]{}, "error006.default"); assertThat(errors.hasGlobalErrors(), is(true)); assertThat(errors.getGlobalErrorCount(), is(6)); assertThat(errors.hasSheetGlobalErrors(), is(true)); assertThat(errors.getSheetGlobalErrorCount(), is(6)); SheetObjectError objError001 = errors.getFirstSheetGlobalError(); assertThat(objError001.getObjectName(), is("SampleSheet")); assertThat(objError001.getCodes(), is(hasItemInArray("error001"))); assertThat(objError001.getSheetName(), is("名簿用シート")); } /** * フィールドエラーの追加 */ @Test public void test_rejectValue() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.rejectValue("name01[0]", "error001"); errors.rejectValue("name01[1]", "error002", "error02.default"); errors.rejectValue("name02[1]", "error003", new HashMap<String, Object>()); errors.rejectValue("name02[2]", "error004", new HashMap<String, Object>(), "error03.default"); errors.rejectValue("family[mother].age", "error005", new Object[]{}); errors.rejectValue("family[father].age", "error006", new Object[]{}, "error06.default"); assertThat(errors.hasGlobalErrors(), is(false)); assertThat(errors.hasFieldErrors(), is(true)); assertThat(errors.getFieldErrorCount(), is(6)); assertThat(errors.getFieldErrorCount("name*"), is(4)); assertThat(errors.getFieldErrorCount("name01*"), is(2)); FieldError fieldError001 = errors.getFirstFieldError("name01*"); assertThat(fieldError001.getObjectName(), is("SampleSheet")); assertThat(fieldError001.getFieldPath(), is("name01[0]")); assertThat(fieldError001.getCodes(), is(hasItemInArray("error001"))); } /** * シートのフィールドエラーの追加 */ @Test public void test_rejectSheetValue() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setSheetName("名簿用シート"); errors.rejectSheetValue("name01[0]", toPointAddress("A2"), "error001"); errors.rejectSheetValue("name01[1]", toPointAddress("A3"), "error002", "error02.default"); errors.rejectSheetValue("name02[1]", toPointAddress("B2"), "error003", new HashMap<String, Object>()); errors.rejectSheetValue("name02[2]", toPointAddress("B2"), "error004", new HashMap<String, Object>(), "error03.default"); errors.rejectSheetValue("family[mother].age", toPointAddress("C2"), "error005", new Object[]{}); errors.rejectSheetValue("family[father].age", toPointAddress("C3"), "error006", new Object[]{}, "error06.default"); assertThat(errors.hasGlobalErrors(), is(false)); assertThat(errors.hasFieldErrors(), is(true)); assertThat(errors.getFieldErrorCount(), is(6)); assertThat(errors.hasCellFieldErrors(), is(true)); assertThat(errors.getCellFieldErrorCount(), is(6)); assertThat(errors.getCellFieldErrorCount("name*"), is(4)); assertThat(errors.getCellFieldErrorCount("name01*"), is(2)); CellFieldError fieldError001 = errors.getFirstCellFieldError("name01*"); assertThat(fieldError001.getObjectName(), is("SampleSheet")); assertThat(fieldError001.getFieldPath(), is("name01[0]")); assertThat(fieldError001.getCodes(), is(hasItemInArray("error001"))); assertThat(fieldError001.getSheetName(), is("名簿用シート")); assertThat(fieldError001.getCellAddress(), is(toPointAddress("A2"))); } /** * シートのフィールドエラーの追加 * ・フィールドの値の指定 */ @Test public void test_rejectSheetValue2() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setSheetName("名簿用シート"); errors.rejectSheetValue("name01[0]", "山田太郎", String.class, toPointAddress("A2"), "error001"); errors.rejectSheetValue("name01[1]", "山田次郎", String.class, toPointAddress("A3"), "error002", "error02.default"); errors.rejectSheetValue("name02[1]", "鈴木一郎", String.class, toPointAddress("B2"), "error003", new HashMap<String, Object>()); errors.rejectSheetValue("name02[2]", "鈴木次郎", String.class, toPointAddress("B2"), "error004", new HashMap<String, Object>(), "error03.default"); errors.rejectSheetValue("family[mother].age", 40, Integer.class, toPointAddress("C2"), "error005", new Object[]{}); errors.rejectSheetValue("family[father].age", 50, Integer.class, toPointAddress("C3"), "error006", new Object[]{}, "error06.default"); assertThat(errors.hasGlobalErrors(), is(false)); assertThat(errors.hasFieldErrors(), is(true)); assertThat(errors.getFieldErrorCount(), is(6)); assertThat(errors.hasCellFieldErrors(), is(true)); assertThat(errors.getCellFieldErrorCount(), is(6)); assertThat(errors.getCellFieldErrorCount("name*"), is(4)); assertThat(errors.getCellFieldErrorCount("name01*"), is(2)); CellFieldError fieldError001 = errors.getFirstCellFieldError("name01*"); assertThat(fieldError001.getObjectName(), is("SampleSheet")); assertThat(fieldError001.getFieldPath(), is("name01[0]")); assertThat(fieldError001.getCodes(), is(hasItemInArray("error001"))); assertThat(fieldError001.getSheetName(), is("名簿用シート")); assertThat(fieldError001.getCellAddress(), is(toPointAddress("A2"))); assertThat(fieldError001.getFieldValue(), is((Object)"山田太郎")); assertThat(fieldError001.getFieldType(), is(typeCompatibleWith(String.class))); } /** * フィールドの指定 * ・バインドエラー */ @Test public void test_rejectTypeBind() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setSheetName("名簿用シート"); errors.rejectTypeBind("name01[0]", "山田太郎", String.class); errors.rejectTypeBind("name01[2]", "山田次郎", String.class, new HashMap<String, Object>()); assertThat(errors.hasGlobalErrors(), is(false)); assertThat(errors.hasFieldErrors(), is(true)); assertThat(errors.getFieldErrorCount(), is(2)); FieldError fieldError001 = errors.getFirstFieldError("name01*"); assertThat(fieldError001.getObjectName(), is("SampleSheet")); assertThat(fieldError001.getFieldPath(), is("name01[0]")); assertThat(fieldError001.getCodes(), is(hasItemInArray("cellTypeMismatch"))); assertThat(fieldError001.getFieldValue(), is((Object)"山田太郎")); assertThat(fieldError001.getFieldType(), is(typeCompatibleWith(String.class))); } /** * シートフィールドの指定 * ・バインドエラー */ @Test public void test_rejectSheetTypeBind() { SheetBindingErrors errors = new SheetBindingErrors("SampleSheet"); errors.setSheetName("名簿用シート"); errors.rejectSheetTypeBind("name01[0]", "山田太郎", String.class, toPointAddress("A2"), "名前01"); errors.rejectSheetTypeBind("name01[2]", "山田次郎", String.class, new HashMap<String, Object>(), toPointAddress("A3"), "名前02"); assertThat(errors.hasGlobalErrors(), is(false)); assertThat(errors.hasFieldErrors(), is(true)); assertThat(errors.getFieldErrorCount(), is(2)); assertThat(errors.hasCellFieldErrors(), is(true)); assertThat(errors.getCellFieldErrorCount(), is(2)); CellFieldError fieldError001 = errors.getFirstCellFieldError("name01*"); assertThat(fieldError001.getObjectName(), is("SampleSheet")); assertThat(fieldError001.getFieldPath(), is("name01[0]")); assertThat(fieldError001.getSheetName(), is("名簿用シート")); assertThat(fieldError001.getCellAddress(), is(toPointAddress("A2"))); assertThat(fieldError001.getLabel(), is("名前01")); assertThat(fieldError001.getCodes(), is(hasItemInArray("cellTypeMismatch"))); assertThat(fieldError001.getFieldValue(), is((Object)"山田太郎")); assertThat(fieldError001.getFieldType(), is(typeCompatibleWith(String.class))); } }