package com.github.mygreen.supercsv.builder.standard; import static org.junit.Assert.*; import static org.assertj.core.api.Assertions.*; import static com.github.mygreen.supercsv.tool.TestUtils.*; import static com.github.mygreen.supercsv.tool.HasCellProcessorAssert.*; import java.lang.annotation.Annotation; import java.util.Comparator; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; import org.supercsv.cellprocessor.ift.CellProcessor; import com.github.mygreen.supercsv.annotation.CsvBean; import com.github.mygreen.supercsv.annotation.CsvColumn; import com.github.mygreen.supercsv.builder.ProcessorBuilderResolver; import com.github.mygreen.supercsv.builder.BeanMapping; import com.github.mygreen.supercsv.builder.BeanMappingFactory; import com.github.mygreen.supercsv.builder.ColumnMapping; import com.github.mygreen.supercsv.builder.Configuration; import com.github.mygreen.supercsv.builder.FieldAccessor; import com.github.mygreen.supercsv.cellprocessor.format.TextFormatter; /** * Test the {@link StringProcessorBuilder} * * @version 2.0 * @since 1.2 * @author T.TSUCHIE * */ public class StringProcessorBuilderTest { @Rule public TestName name = new TestName(); private Configuration config; private ProcessorBuilderResolver builderResolver; private Comparator<Annotation> comparator; private BeanMappingFactory beanMappingFactory; private final Class<?>[] groupEmpty = new Class[]{}; @Before public void setUp() { this.config = new Configuration(); this.builderResolver = config.getBuilderResolver(); this.comparator = config.getAnnoationComparator(); this.beanMappingFactory = new BeanMappingFactory(); } private static final String TEST_VALUE_1_OBJ = "abc"; private static final String TEST_VALUE_1_STR_NORMAL = "abc"; @CsvBean private static class TestCsv { @CsvColumn(number=1) String col_default; } @Test public void testFormatter_ParsePrint_wrapper() { FieldAccessor field = getFieldAccessor(TestCsv.class, "col_default", comparator); StringProcessorBuilder builder = (StringProcessorBuilder) builderResolver.resolve(String.class); TextFormatter<String> formatter = builder.getFormatter(field, config); { // parse assertThat(formatter.parse("abc")).isEqualTo("abc"); } { //print assertThat(formatter.print("abc")).isEqualTo("abc"); assertThat(formatter.print("")).isEqualTo(""); assertThat(formatter.print(null)).isNull(); } } @Test public void testFormatter_MessageAndVariables() { FieldAccessor field = getFieldAccessor(TestCsv.class, "col_default", comparator); StringProcessorBuilder builder = (StringProcessorBuilder) builderResolver.resolve(String.class); TextFormatter<String> formatter = builder.getFormatter(field, config); formatter.setValidationMessage("テストメッセージ"); assertThat(formatter.getValidationMessage()).isEmpty(); assertThat(formatter.getMessageVariables()).isEmpty(); } @Test public void testFormatter_Pattern() { FieldAccessor field = getFieldAccessor(TestCsv.class, "col_default", comparator); StringProcessorBuilder builder = (StringProcessorBuilder) builderResolver.resolve(String.class); TextFormatter<String> formatter = builder.getFormatter(field, config); assertThat(formatter.getPattern()).isEmpty(); } @Test public void testBuildForReading_default() { BeanMapping<TestCsv> beanMapping = beanMappingFactory.create(TestCsv.class, groupEmpty); ColumnMapping columnMapping = beanMapping.getColumnMapping("col_default").get(); CellProcessor processor = columnMapping.getCellProcessorForReading(); printCellProcessorChain(processor, name.getMethodName()); { // null input String input = null; String expected = null; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } { // empty input String input = ""; String expected = ""; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } { // valid input String input = TEST_VALUE_1_STR_NORMAL; String expected = TEST_VALUE_1_OBJ; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } { // valid input - over size String input = "abc"; String expected = TEST_VALUE_1_OBJ; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } { // valid input - empty String input = ""; String expected = ""; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } } @Test public void testBuildForWriging_default() { BeanMapping<TestCsv> beanMapping = beanMappingFactory.create(TestCsv.class, groupEmpty); ColumnMapping columnMapping = beanMapping.getColumnMapping("col_default").get(); CellProcessor processor = columnMapping.getCellProcessorForWriting(); printCellProcessorChain(processor, name.getMethodName()); { // null input String input = null; String expected = null; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } { // valid input String input = TEST_VALUE_1_OBJ; String expected = TEST_VALUE_1_STR_NORMAL; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } { // valid input - empty String input = ""; String expected = ""; assertThat((Object)processor.execute(input, ANONYMOUS_CSVCONTEXT)).isEqualTo(expected); } } }