| /******************************************************************************* |
| * Copyright (C) 2009 The University of Manchester |
| * |
| * Modifications to the initial code base are copyright of their |
| * respective authors, or their employers as appropriate. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public License |
| * as published by the Free Software Foundation; either version 2.1 of |
| * the License, or (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this program; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
| ******************************************************************************/ |
| package net.sf.taverna.t2.activities.spreadsheet; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.IOException; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import net.sf.taverna.t2.activities.testutils.ActivityInvoker; |
| import net.sf.taverna.t2.workflowmodel.EditException; |
| import net.sf.taverna.t2.workflowmodel.Edits; |
| import net.sf.taverna.t2.workflowmodel.Port; |
| import net.sf.taverna.t2.workflowmodel.impl.EditsImpl; |
| import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityConfigurationException; |
| import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityInputPort; |
| import net.sf.taverna.t2.workflowmodel.processor.activity.ActivityOutputPort; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| import com.fasterxml.jackson.databind.node.ArrayNode; |
| import com.fasterxml.jackson.databind.node.JsonNodeFactory; |
| import com.fasterxml.jackson.databind.node.ObjectNode; |
| |
| /** |
| * Unit tests for {@link net.sf.taverna.t2.activities.spreadsheet.SpreadsheetImportActivityTest}. |
| * |
| * @author David Withers |
| */ |
| public class SpreadsheetImportActivityTest { |
| |
| private SpreadsheetImportActivity activity; |
| private SpreadsheetImportActivityFactory activityFactory; |
| private Edits edits; |
| private ObjectNode configuration; |
| |
| @Before |
| public void setUp() throws Exception { |
| activity = new SpreadsheetImportActivity(); |
| activityFactory = new SpreadsheetImportActivityFactory(); |
| edits = new EditsImpl(); |
| activityFactory.setEdits(edits); |
| configuration = JsonNodeFactory.instance.objectNode(); |
| configuration.put("columnRange", configuration.objectNode().put("start", 0).put("end", 1)); |
| configuration.put("rowRange", configuration.objectNode().put("start", 0).put("end", -1)); |
| configuration.put("emptyCellValue", ""); |
| configuration.put("allRows", true); |
| configuration.put("excludeFirstRow", false); |
| configuration.put("ignoreBlankRows", false); |
| configuration.put("emptyCellPolicy", "EMPTY_STRING"); |
| configuration.put("outputFormat", "PORT_PER_COLUMN"); |
| configuration.put("csvDelimiter", ","); |
| } |
| |
| @Test |
| public void testSpreadsheetImportActivity() { |
| assertNotNull(activity); |
| assertNull(activity.getConfiguration()); |
| } |
| |
| @Test |
| public void testConfigureSpreadsheetImportConfiguration() throws Exception { |
| assertEquals(0, activity.getInputPorts().size()); |
| assertEquals(0, activity.getOutputPorts().size()); |
| configuration.put("columnRange", configuration.objectNode().put("start", 0).put("end", 10)); |
| ArrayNode columnNames = configuration.arrayNode(); |
| columnNames.addObject().put("column", "C").put("port", "test"); |
| configuration.put("columnNames", columnNames); |
| activity.configure(configuration); |
| for (ActivityInputPort activityInputPort : activityFactory.getInputPorts(configuration)) { |
| edits.getAddActivityInputPortEdit(activity, activityInputPort).doEdit(); |
| } |
| for (ActivityOutputPort activityOutputPort : activityFactory.getOutputPorts(configuration)) { |
| edits.getAddActivityOutputPortEdit(activity, activityOutputPort).doEdit(); |
| } |
| assertEquals(configuration, activity.getConfiguration()); |
| assertEquals(1, activity.getInputPorts().size()); |
| Set<ActivityOutputPort> outputPorts = activity.getOutputPorts(); |
| int[] rangeValues = SpreadsheetUtils.getRange(configuration.get("columnRange")).getRangeValues(); |
| assertEquals(rangeValues.length, outputPorts.size()); |
| for (int i = 0; i < rangeValues.length; i++) { |
| String portName = SpreadsheetUtils.getPortName(rangeValues[i], configuration); |
| Port port = null; |
| for (Port outputPort : outputPorts) { |
| if (outputPort.getName().equals(portName)) { |
| port = outputPort; |
| break; |
| } |
| } |
| assertNotNull(port); |
| outputPorts.remove(port); |
| } |
| assertEquals(0, outputPorts.size()); |
| |
| configuration.put("outputFormat", SpreadsheetOutputFormat.SINGLE_PORT.name()); |
| activity.configure(configuration); |
| assertEquals(1, activityFactory.getOutputPorts(configuration).size()); |
| } |
| |
| @Test |
| public void testGetConfiguration() throws ActivityConfigurationException { |
| assertNull(activity.getConfiguration()); |
| activity.configure(configuration); |
| assertNotNull(activity.getConfiguration()); |
| assertEquals(configuration, activity.getConfiguration()); |
| } |
| |
| @Test |
| public void testExecuteAsynchMapOfStringT2ReferenceAsynchronousActivityCallback() throws Exception { |
| configuration.put("columnRange", configuration.objectNode().put("start", 0).put("end", 3)); |
| activity.configure(configuration); |
| for (ActivityInputPort activityInputPort : activityFactory.getInputPorts(configuration)) { |
| edits.getAddActivityInputPortEdit(activity, activityInputPort).doEdit(); |
| } |
| for (ActivityOutputPort activityOutputPort : activityFactory.getOutputPorts(configuration)) { |
| edits.getAddActivityOutputPortEdit(activity, activityOutputPort).doEdit(); |
| } |
| Map<String, Class<?>> outputs = new HashMap<String, Class<?>>(); |
| outputs.put("A", String.class); |
| outputs.put("B", String.class); |
| outputs.put("C", String.class); |
| outputs.put("D", String.class); |
| Map<String, Object> results = ActivityInvoker.invokeAsyncActivity(activity, Collections.singletonMap("fileurl", |
| (Object) "src/test/resources/test-spreadsheet.xls"), outputs); |
| assertEquals(4, results.size()); |
| assertTrue(results.get("A") instanceof List<?>); |
| assertEquals(15, ((List<?>) results.get("A")).size()); |
| results = ActivityInvoker.invokeAsyncActivity(activity, Collections.singletonMap("fileurl", |
| (Object) "src/test/resources/test-spreadsheet.ods"), outputs); |
| assertEquals(4, results.size()); |
| assertTrue(results.get("A") instanceof List<?>); |
| assertEquals(15, ((List<?>) results.get("A")).size()); |
| results = ActivityInvoker.invokeAsyncActivity(activity, Collections.singletonMap("fileurl", |
| (Object) "src/test/resources/test-spreadsheet.csv"), outputs); |
| assertEquals(4, results.size()); |
| assertTrue(results.get("A") instanceof List<?>); |
| assertEquals(15, ((List<?>) results.get("A")).size()); |
| |
| // CSV output |
| configuration.put("outputFormat", SpreadsheetOutputFormat.SINGLE_PORT.name()); |
| activity.configure(configuration); |
| outputs = new HashMap<String, Class<?>>(); |
| outputs.put("output", String.class); |
| results = ActivityInvoker.invokeAsyncActivity(activity, Collections.singletonMap("fileurl", |
| (Object) "src/test/resources/test-spreadsheet.xls"), outputs); |
| assertEquals(1, results.size()); |
| assertTrue(results.get("output") instanceof String); |
| assertEquals(15, ((String) results.get("output")).split(System.getProperty("line.separator")).length); |
| |
| // TSV output |
| configuration.put("csvDelimiter", "\t"); |
| activity.configure(configuration); |
| results = ActivityInvoker.invokeAsyncActivity(activity, Collections.singletonMap("fileurl", |
| (Object) "src/test/resources/test-spreadsheet.csv"), outputs); |
| assertEquals(1, results.size()); |
| assertTrue(results.get("output") instanceof String); |
| assertEquals(15, ((String) results.get("output")).split(System.getProperty("line.separator")).length); |
| } |
| |
| } |