package jp.terasoluna.fw.collector.util; import static org.junit.Assert.*; import java.util.NoSuchElementException; import jp.terasoluna.fw.collector.AbstractCollector; import jp.terasoluna.fw.collector.Collector; import jp.terasoluna.fw.collector.CollectorExceptionHandlerStub1; import jp.terasoluna.fw.collector.CollectorExceptionHandlerStub2; import jp.terasoluna.fw.collector.exception.CollectorExceptionHandler; import jp.terasoluna.fw.collector.exception.CollectorExceptionHandlerStatus; import jp.terasoluna.fw.collector.validate.ExceptionValidationErrorHandler; import jp.terasoluna.fw.collector.validate.ValidationErrorException; import jp.terasoluna.fw.collector.validate.ValidationErrorHandler; import jp.terasoluna.fw.collector.vo.DataValueObject; import jp.terasoluna.fw.file.dao.FileLineException; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.validation.Errors; import org.springframework.validation.Validator; /** * コレクタとコントロールブレイクの組み合わせ試験。 * 機能結合試験に該当するが、JUnitでも試験が可能であること、 組み合わせのパターンが多岐にわたることから、 JUnitの試験とした。 */ public class ControlBreakCheckerTest2 { /** * ブレイクキーのカラム名 */ private static final String BREAK_KEY = "column1"; @BeforeClass public static void setUpBeforeClass() throws Exception { } @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } /** * コントロールブレイクと組み合わせのテスト。<br> * BUG_B30020の強化試験。 * <p> * <ul> * <li>例外ハンドラなし(そのままエラーをスローする)</li> * </ul> * 期待値は以下の通り * 入力データ:[1(bkv1), 2(bkv1), 3(bkv1), (例外), 5(bkv2), 6(bkv2), 7(bkv3), * (例外), 9(bkv3), 10(bkv4), 11(bkv4), (例外), * 13(bkv5), 14(bkv5), 15(bkv5)] * 結果:[1(※1), 2, 3(※4), (例外)(※2※4), 5(※2), 6(※3), 7(※1※4), * (例外)(※2※4), 9(※2※3), 10(※1), 11(※4), (例外)(※2※4), 13(※2), 14, 15(※3)] * ※1:前ブレイク ※2:前ブレイク判定不能(前ブレイク判定時に例外スロー) * ※3:後ブレイク ※4:後ブレイク判定不能(後ブレイク判定時に例外スロー) */ @Test public void testDefaultHandler001() throws Exception { ControlBreakCheckerTestBean bean01 = new ControlBreakCheckerTestBean("aaa", "1", "1"); ControlBreakCheckerTestBean bean02 = new ControlBreakCheckerTestBean("aaa", "2", "1"); ControlBreakCheckerTestBean bean03 = new ControlBreakCheckerTestBean("aaa", "3", "1"); ControlBreakCheckerTestBean bean04 = new ControlBreakCheckerTestBean("bbb", "4", "Exception"); ControlBreakCheckerTestBean bean05 = new ControlBreakCheckerTestBean("bbb", "5", "1"); ControlBreakCheckerTestBean bean06 = new ControlBreakCheckerTestBean("bbb", "6", "1"); ControlBreakCheckerTestBean bean07 = new ControlBreakCheckerTestBean("ccc", "7", "1"); ControlBreakCheckerTestBean bean08 = new ControlBreakCheckerTestBean("ccc", "8", "Exception"); ControlBreakCheckerTestBean bean09 = new ControlBreakCheckerTestBean("ccc", "9", "1"); ControlBreakCheckerTestBean bean10 = new ControlBreakCheckerTestBean("ddd", "10", "1"); ControlBreakCheckerTestBean bean11 = new ControlBreakCheckerTestBean("ddd", "11", "1"); ControlBreakCheckerTestBean bean12 = new ControlBreakCheckerTestBean("ddd", "12", "Exception"); ControlBreakCheckerTestBean bean13 = new ControlBreakCheckerTestBean("eee", "13", "1"); ControlBreakCheckerTestBean bean14 = new ControlBreakCheckerTestBean("eee", "14", "1"); ControlBreakCheckerTestBean bean15 = new ControlBreakCheckerTestBean("eee", "15", "1"); ControlBreakCheckerTestBean[] beans = { bean01, bean02, bean03, bean04, bean05, bean06, bean07, bean08, bean09, bean10, bean11, bean12, bean13, bean14, bean15 }; // ・入力チェックエラーハンドラ:なし ValidationErrorHandler argValidationErrorHandler = null; // 例外ハンドラ:なし CollectorExceptionHandler argExceptionHandler = null; Collector<ControlBreakCheckerTestBean> collector = createTestCollector( argValidationErrorHandler, argExceptionHandler, beans); // ####################第1要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第2要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第3要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=(エラー) try { ControlBreakChecker.isBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { assertEquals("入力エラー", e.getMessage()); } // ####################第4要素(例外)#################### try { collector.next(); fail(); } catch (FileLineException e) { // ポインタを進める } try { ControlBreakChecker.isPreBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { // 前ブレイク判定不能 } try { ControlBreakChecker.isBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { // 後ブレイク判定不能 } // ####################第5要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=(エラー) try { ControlBreakChecker.isPreBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { assertEquals("入力エラー", e.getMessage()); } // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第6要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("bbb", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第7要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("ccc", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=(エラー) try { ControlBreakChecker.isBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { assertEquals("入力エラー", e.getMessage()); } // ####################第8要素はエラー#################### try { collector.next(); fail(); } catch (FileLineException e) { // ポインタを進める } try { ControlBreakChecker.isPreBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { // 前ブレイク判定不能 } try { ControlBreakChecker.isBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { // 後ブレイク判定不能 } // ####################第9要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=(エラー) try { ControlBreakChecker.isPreBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { assertEquals("入力エラー", e.getMessage()); } // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("ccc", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第10要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("ddd", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第11要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=(エラー) try { ControlBreakChecker.isBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { assertEquals("入力エラー", e.getMessage()); } // ####################第12要素はエラー#################### try { collector.next(); fail(); } catch (FileLineException e) { // ポインタを進める } try { ControlBreakChecker.isPreBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { // 前ブレイク判定不能 } try { ControlBreakChecker.isBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { // 後ブレイク判定不能 } // ####################第13要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=(エラー) try { ControlBreakChecker.isPreBreak(collector, BREAK_KEY); fail(); } catch (FileLineException e) { assertEquals("入力エラー", e.getMessage()); } // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第14要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第15要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("eee", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); collector.close(); } /** * コントロールブレイクと組み合わせのテスト。<br> * BUG_B30020の強化試験。 * <p> * <ul> * <li>例外ハンドラあり(END)</li> * <li>入力データ上のブレイク前で例外→END</li> * </ul> * 期待値は以下の通り * 入力データ:[1(bkv1), 2(bkv1), (例外), 4(bkv2)] * 結果:[1(※1), 2(※3)] * ※1:前ブレイク ※2:前ブレイク判定不能(前ブレイク判定時に例外スロー) * ※3:後ブレイク ※4:後ブレイク判定不能(後ブレイク判定時に例外スロー) */ @Test public void testErrorHandlerReturnsEnd001() throws Exception { ControlBreakCheckerTestBean bean01 = new ControlBreakCheckerTestBean("aaa", "1", "1"); ControlBreakCheckerTestBean bean02 = new ControlBreakCheckerTestBean("aaa", "2", "1"); ControlBreakCheckerTestBean bean03 = new ControlBreakCheckerTestBean("aaa", "3", "Exception"); // 例外 ControlBreakCheckerTestBean bean04 = new ControlBreakCheckerTestBean("bbb", "4", "1"); ControlBreakCheckerTestBean[] beans = { bean01, bean02, bean03, bean04 }; // ・入力チェックエラーハンドラ:なし ValidationErrorHandler argValidationErrorHandler = null; // 例外ハンドラ:あり(ENDを返す) CollectorExceptionHandler argExceptionHandler = new CollectorExceptionHandlerStub1(); Collector<ControlBreakCheckerTestBean> collector = createTestCollector( argValidationErrorHandler, argExceptionHandler, beans); // ####################第1要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第2要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第3要素#################### try { collector.next(); fail(); } catch (NoSuchElementException e) { } collector.close(); } /** * コントロールブレイクと組み合わせのテスト。<br> * BUG_B30020の強化試験。 * <p> * <ul> * <li>例外ハンドラあり(END)</li> * <li>入力データ上のブレイク後で例外→END</li> * </ul> * 期待値は以下の通り * 入力データ:[1(bkv1), 2(bkv1), 3(bkv1), (例外), 5(bkv2)] * 結果:[1(※1), 2, 3(※3)] * ※1:前ブレイク ※2:前ブレイク判定不能(前ブレイク判定時に例外スロー) * ※3:後ブレイク ※4:後ブレイク判定不能(後ブレイク判定時に例外スロー) */ @Test public void testErrorHandlerReturnsEnd002() throws Exception { ControlBreakCheckerTestBean bean01 = new ControlBreakCheckerTestBean("aaa", "1", "1"); ControlBreakCheckerTestBean bean02 = new ControlBreakCheckerTestBean("aaa", "2", "1"); ControlBreakCheckerTestBean bean03 = new ControlBreakCheckerTestBean("aaa", "3", "1"); ControlBreakCheckerTestBean bean04 = new ControlBreakCheckerTestBean("bbb", "4", "Exception"); // 例外 ControlBreakCheckerTestBean bean05 = new ControlBreakCheckerTestBean("bbb", "5", "1"); ControlBreakCheckerTestBean[] beans = { bean01, bean02, bean03, bean04, bean05 }; // ・入力チェックエラーハンドラ:なし ValidationErrorHandler argValidationErrorHandler = null; // 例外ハンドラ:あり(ENDを返す) CollectorExceptionHandler argExceptionHandler = new CollectorExceptionHandlerStub1(); Collector<ControlBreakCheckerTestBean> collector = createTestCollector( argValidationErrorHandler, argExceptionHandler, beans); // ####################第1要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第2要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第3要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第4要素#################### try { collector.next(); fail(); } catch (NoSuchElementException e) { } collector.close(); } /** * コントロールブレイクと組み合わせのテスト。<br> * BUG_B30020の強化試験。 * <p> * <ul> * <li>例外ハンドラあり(SKIP)</li> * <li>後ブレイク後に例外(ブレイク判定可能)</li> * </ul> * 期待値は以下の通り * 入力データ:[1(bkv1), 2(bkv1), (例外), 4(bkv1), 5(bkv1), (例外), 7(bkv2), 8(bkv2), (例外), 10(bkv3), 11(bkv3), (例外)] * 結果:[1(※1), 2, 4, 5(※3), 7(※1), 8(※3), 10(※1), 11(※3)] * ※1:前ブレイク ※2:前ブレイク判定不能(前ブレイク判定時に例外スロー) * ※3:後ブレイク ※4:後ブレイク判定不能(後ブレイク判定時に例外スロー) */ @Test public void testErrorHandlerReturnsSkip001() throws Exception { ControlBreakCheckerTestBean bean01 = new ControlBreakCheckerTestBean("aaa", "1", "1"); ControlBreakCheckerTestBean bean02 = new ControlBreakCheckerTestBean("aaa", "2", "1"); ControlBreakCheckerTestBean bean03 = new ControlBreakCheckerTestBean("aaa", "3", "Exception"); ControlBreakCheckerTestBean bean04 = new ControlBreakCheckerTestBean("aaa", "4", "1"); ControlBreakCheckerTestBean bean05 = new ControlBreakCheckerTestBean("aaa", "5", "1"); ControlBreakCheckerTestBean bean06 = new ControlBreakCheckerTestBean("aaa", "6", "Exception"); ControlBreakCheckerTestBean bean07 = new ControlBreakCheckerTestBean("bbb", "7", "1"); ControlBreakCheckerTestBean bean08 = new ControlBreakCheckerTestBean("bbb", "8", "1"); ControlBreakCheckerTestBean bean09 = new ControlBreakCheckerTestBean("ccc", "9", "Exception"); ControlBreakCheckerTestBean bean10 = new ControlBreakCheckerTestBean("ccc", "10", "1"); ControlBreakCheckerTestBean bean11 = new ControlBreakCheckerTestBean("ccc", "11", "1"); ControlBreakCheckerTestBean bean12 = new ControlBreakCheckerTestBean("ccc", "12", "Exception"); ControlBreakCheckerTestBean[] beans = { bean01, bean02, bean03, bean04, bean05, bean06, bean07, bean08, bean09, bean10, bean11, bean12 }; // ・入力チェックエラーハンドラ:なし ValidationErrorHandler argValidationErrorHandler = null; // 例外ハンドラ:あり(SKIPを返す) CollectorExceptionHandler argExceptionHandler = new CollectorExceptionHandlerStub2(CollectorExceptionHandlerStatus.SKIP); Collector<ControlBreakCheckerTestBean> collector = createTestCollector( argValidationErrorHandler, argExceptionHandler, beans); // ####################第1要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第2要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第3要素#################### // ####################第4要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第5要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第6要素#################### // ####################第7要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("bbb", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第8要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("bbb", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第9要素#################### // ####################第10要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("ccc", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第11要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("ccc", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第12要素#################### collector.close(); } /** * コントロールブレイクと組み合わせのテスト。<br> * BUG_B30019の強化試験。 * <p> * <ul> * <li>入力チェックエラーハンドラあり(そのまま例外をスローする)</li> * </ul> * 期待値は以下の通り * 入力データ:[1(bkv1), 2(bkv1), 3(bkv1), 4(入力チェックエラー)(bkv2), 5(bkv2), 6(bkv2), 7(bkv3), * 8(入力チェックエラー)(bkv3), 9(bkv3), 10(bkv4), 11(bkv4), 12(入力チェックエラー)(bkv4), 13(bkv5), 14(bkv5), 15(bkv5)] * 結果:[1(※1), 2, 3(※3), 4(入力チェックエラー)(※1), 5, 6(※3), 7(※1), * 8(入力チェックエラー), 9(※3), 10(※1), 11, 12(入力チェックエラー)(※3), 13(※1), 14, 15(※3)] * ※1:前ブレイク ※2:前ブレイク判定不能(前ブレイク判定時に例外スロー) * ※3:後ブレイク ※4:後ブレイク判定不能(後ブレイク判定時に例外スロー) */ @Test public void testValidateErrorHandler001() throws Exception { ControlBreakCheckerTestBean bean01 = new ControlBreakCheckerTestBean("aaa", "1", "1"); ControlBreakCheckerTestBean bean02 = new ControlBreakCheckerTestBean("aaa", "2", "1"); ControlBreakCheckerTestBean bean03 = new ControlBreakCheckerTestBean("aaa", "3", "1"); ControlBreakCheckerTestBean bean04 = new ControlBreakCheckerTestBean("bbb", "4", "validateError"); ControlBreakCheckerTestBean bean05 = new ControlBreakCheckerTestBean("bbb", "5", "1"); ControlBreakCheckerTestBean bean06 = new ControlBreakCheckerTestBean("bbb", "6", "1"); ControlBreakCheckerTestBean bean07 = new ControlBreakCheckerTestBean("ccc", "7", "1"); ControlBreakCheckerTestBean bean08 = new ControlBreakCheckerTestBean("ccc", "8", "validateError"); ControlBreakCheckerTestBean bean09 = new ControlBreakCheckerTestBean("ccc", "9", "1"); ControlBreakCheckerTestBean bean10 = new ControlBreakCheckerTestBean("ddd", "10", "1"); ControlBreakCheckerTestBean bean11 = new ControlBreakCheckerTestBean("ddd", "11", "1"); ControlBreakCheckerTestBean bean12 = new ControlBreakCheckerTestBean("ddd", "12", "validateError"); ControlBreakCheckerTestBean bean13 = new ControlBreakCheckerTestBean("eee", "13", "1"); ControlBreakCheckerTestBean bean14 = new ControlBreakCheckerTestBean("eee", "14", "1"); ControlBreakCheckerTestBean bean15 = new ControlBreakCheckerTestBean("eee", "15", "1"); ControlBreakCheckerTestBean[] beans = { bean01, bean02, bean03, bean04, bean05, bean06, bean07, bean08, bean09, bean10, bean11, bean12, bean13, bean14, bean15 }; // ・入力チェックエラーハンドラ:あり ValidationErrorHandler argValidationErrorHandler = new ExceptionValidationErrorHandler(); // 例外ハンドラ:なし CollectorExceptionHandler argExceptionHandler = null; Collector<ControlBreakCheckerTestBean> collector = createTestCollector( argValidationErrorHandler, argExceptionHandler, beans); // ####################第1要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第2要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第3要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("aaa", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第4要素#################### try { collector.next(); fail(); } catch (ValidationErrorException e) { // ポインタを一つ進める } // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("bbb", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第5要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第6要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("bbb", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第7要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("ccc", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第8要素#################### try { collector.next(); fail(); } catch (ValidationErrorException e) { // ポインタを一つ進める } // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第9要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("ccc", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第10要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("ddd", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第11要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第12要素#################### try { collector.next(); fail(); } catch (ValidationErrorException e) { // ポインタを一つ進める } // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("ddd", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // ####################第13要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=TRUE assertTrue(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); assertEquals("eee", ControlBreakChecker.getPreBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第14要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=FALSE assertFalse(ControlBreakChecker.isBreak(collector, BREAK_KEY)); // ####################第15要素#################### assertTrue(collector.hasNext()); collector.next(); // 前ブレイク=FALSE assertFalse(ControlBreakChecker.isPreBreak(collector, BREAK_KEY)); // 後ブレイク=TRUE assertTrue(ControlBreakChecker.isBreak(collector, BREAK_KEY)); assertEquals("eee", ControlBreakChecker.getBreakKey(collector, BREAK_KEY).get(BREAK_KEY)); collector.close(); } /** * テストデータを提供するコレクタを生成する。 * Validator機能を持ち、CollectorTestBeanを格納できる。 * CollectorTestBean1のcolumn3が"validateError"だと入力チェックエラーとなり * "Exception"だと入力エラーが発生する。 * @param argValidationErrorHandler ValidationErrorHandler * @param argExceptionHandler ExceptionHandler * @param CollectorTestBean[] beans コレクタの中身になるCollectorTestBean1の配列 * @return テストデータを提供するコレクタ */ private static Collector<ControlBreakCheckerTestBean> createTestCollector( final ValidationErrorHandler argValidationErrorHandler, final CollectorExceptionHandler argExceptionHandler, final ControlBreakCheckerTestBean[] beans) { Collector<ControlBreakCheckerTestBean> collector = new AbstractCollector<ControlBreakCheckerTestBean>() { { this.validator = new Validator() { // 入力チェックを行う。column3が"validateError"の場合は入力チェックエラーとする。 public void validate(Object target, Errors errors) { ControlBreakCheckerTestBean data = (ControlBreakCheckerTestBean) target; if ("validateError".equals(data.getColumn3())) { errors.rejectValue("column3", "errors.numeric"); } } public boolean supports(Class<?> clazz) { return (clazz == ControlBreakCheckerTestBean.class); } }; this.validationErrorHandler = argValidationErrorHandler; this.exceptionHandler = argExceptionHandler; } // column3が"Exception"だったらFileLineException(入力エラー)ということにする public Integer call() throws Exception { for (int count = 0; count < beans.length; count++) { if ("Exception".equals(beans[count].getColumn3())) { addQueue(new DataValueObject(new FileLineException("入力エラー"), count)); } else { addQueue(new DataValueObject(beans[count], count)); } } setFinish(); return 0; } }; return collector; } }