package org.molgenis.data.csv; import org.molgenis.data.Entity; import org.molgenis.data.meta.model.AttributeFactory; import org.molgenis.data.meta.model.EntityType; import org.molgenis.data.meta.model.EntityTypeFactory; import org.molgenis.data.processor.CellProcessor; import org.molgenis.data.support.DynamicEntity; import org.molgenis.test.data.AbstractMolgenisSpringTest; import org.springframework.beans.factory.annotation.Autowired; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import java.util.Arrays; import static org.mockito.Mockito.*; import static org.testng.Assert.assertEquals; public class CsvWriterTest extends AbstractMolgenisSpringTest { @Autowired private EntityTypeFactory entityTypeFactory; @Autowired private AttributeFactory attrMetaFactory; private EntityType entityType; @SuppressWarnings("resource") @Test(expectedExceptions = IllegalArgumentException.class) public void CsvWriter() { new CsvWriter((Writer) null); } @BeforeMethod public void setUpBeforeMethod() { entityType = entityTypeFactory.create(); entityType.addAttribute(attrMetaFactory.create().setName("col1")); entityType.addAttribute(attrMetaFactory.create().setName("col2")); } @Test public void addCellProcessor() throws IOException { CellProcessor processor = when(mock(CellProcessor.class).processHeader()).thenReturn(true).getMock(); CsvWriter csvWriter = new CsvWriter(new StringWriter()); try { csvWriter.addCellProcessor(processor); csvWriter.writeAttributeNames(Arrays.asList("col1", "col2")); } finally { csvWriter.close(); } verify(processor).process("col1"); verify(processor).process("col2"); } @Test public void addCellProcessor_data() throws IOException { CellProcessor processor = when(mock(CellProcessor.class).processData()).thenReturn(true).getMock(); Entity entity = new DynamicEntity(entityType); entity.set("col1", "val1"); entity.set("col2", "val2"); CsvWriter csvWriter = new CsvWriter(new StringWriter()); try { csvWriter.addCellProcessor(processor); csvWriter.writeAttributeNames(Arrays.asList("col1", "col2")); csvWriter.add(entity); } finally { csvWriter.close(); } verify(processor).process("val1"); verify(processor).process("val2"); } @Test public void add() throws IOException { StringWriter strWriter = new StringWriter(); CsvWriter csvWriter = new CsvWriter(strWriter); try { csvWriter.writeAttributeNames(Arrays.asList("col1", "col2")); Entity entity = new DynamicEntity(entityType); entity.set("col1", "val1"); entity.set("col2", "val2"); csvWriter.add(entity); assertEquals(strWriter.toString(), "\"col1\",\"col2\"\n\"val1\",\"val2\"\n"); } finally { csvWriter.close(); } } @Test public void testLabels() throws IOException { StringWriter strWriter = new StringWriter(); CsvWriter csvWriter = new CsvWriter(strWriter); try { csvWriter.writeAttributes(Arrays.asList("col1", "col2"), Arrays.asList("label1", "label2")); Entity entity = new DynamicEntity(entityType); entity.set("col1", "val1"); entity.set("col2", "val2"); csvWriter.add(entity); assertEquals(strWriter.toString(), "\"label1\",\"label2\"\n\"val1\",\"val2\"\n"); } finally { csvWriter.close(); } } @Test public void close() throws IOException { // FIXME enable when double closing bug in opencsv is fixed // Writer writer = mock(Writer.class); // CsvWriter csvWriter = new CsvWriter(writer); // csvWriter.close(); // verify(writer).close(); } }