package com.gh.mygreen.xlsmapper.validation.fieldvalidation; import static com.gh.mygreen.xlsmapper.TestUtils.*; import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; import java.awt.Point; import java.util.LinkedHashMap; import java.util.Map; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; import com.gh.mygreen.xlsmapper.validation.CellFieldError; import com.gh.mygreen.xlsmapper.validation.SheetBindingErrors; /** * {@link PatternValidator}のテスタ * * @version 1.5.1 * @since 0.5 * @author T.TSUCHIE * */ public class PatternValidatorTest { @AfterClass public static void tearDownAfterClass() throws Exception { } @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } /** * 文字列がパターンに一致するかどうか */ @Test public void test_validation_str_pattern() throws Exception { String fieldName = "str"; SampleSheet sheet = new SampleSheet(); sheet.addPosition(fieldName, toPointAddress("A5")).addLabel(fieldName, "名前"); SheetBindingErrors errors = new SheetBindingErrors(SampleSheet.class); errors.setSheetName("サンプルシート"); { // パターン(値がnull) errors.clearAllErrors(); sheet.str = null; CellField<String> field = new CellField<String>(sheet, fieldName); field.setRequired(false); field.add(new PatternValidator(".+@.+")); field.validate(errors); CellFieldError fieldError = errors.getFirstCellFieldError(fieldName); assertThat(fieldError, is(nullValue())); } { // パターン(値が不正) errors.clearAllErrors(); sheet.str = "あいうえ"; CellField<String> field = new CellField<String>(sheet, fieldName); field.setRequired(false); field.add(new PatternValidator(".+@.+")); field.validate(errors); CellFieldError fieldError = errors.getFirstCellFieldError(fieldName); assertThat(fieldError.getCellAddress(), is(sheet.positions.get(fieldName))); assertThat(fieldError.getLabel(), is(sheet.labels.get(fieldName))); assertThat(fieldError.getCodes(), hasItemInArray("cellFieldError.pattern")); assertThat(fieldError.getVars(), hasEntry("validatedValue", (Object)sheet.str)); assertThat(fieldError.getVars(), hasEntry("pattern", (Object)".+@.+")); assertThat(fieldError.getVars(), hasEntry("patternName", null)); } { // パターン(値が正しい) errors.clearAllErrors(); sheet.str = "hoge@example.com"; CellField<String> field = new CellField<String>(sheet, fieldName); field.setRequired(false); field.add(new PatternValidator(".+@.+")); field.validate(errors); CellFieldError fieldError = errors.getFirstCellFieldError(fieldName); assertThat(fieldError, is(nullValue())); } { // パターン名を指定(値が不正) errors.clearAllErrors(); sheet.str = "あいうえ"; CellField<String> field = new CellField<String>(sheet, fieldName); field.setRequired(false); field.add(new PatternValidator(".+@.+", "メールアドレスの書式")); field.validate(errors); CellFieldError fieldError = errors.getFirstCellFieldError(fieldName); assertThat(fieldError.getCellAddress(), is(sheet.positions.get(fieldName))); assertThat(fieldError.getLabel(), is(sheet.labels.get(fieldName))); assertThat(fieldError.getCodes(), hasItemInArray("cellFieldError.pattern")); assertThat(fieldError.getVars(), hasEntry("validatedValue", (Object)sheet.str)); assertThat(fieldError.getVars(), hasEntry("pattern", (Object)".+@.+")); assertThat(fieldError.getVars(), hasEntry("patternName", (Object)"メールアドレスの書式")); } } private static class SampleSheet { private Map<String, Point> positions; private Map<String, String> labels; private String str; private SampleSheet addPosition(String field, Point position) { if(positions == null) { this.positions = new LinkedHashMap<>(); } this.positions.put(field, position); return this; } private SampleSheet addLabel(String field, String label) { if(labels == null) { this.labels = new LinkedHashMap<>(); } this.labels.put(field, label); return this; } } }