test various resolve options
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/commit/5d9cc7f6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/tree/5d9cc7f6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/diff/5d9cc7f6 Branch: refs/heads/master Commit: 5d9cc7f6bdb99fb631f827b4db184ad7e28e1a7d Parents: 94e0139 Author: Stian Soiland-Reyes <[email protected]> Authored: Mon Aug 29 18:44:59 2016 +0100 Committer: Stian Soiland-Reyes <[email protected]> Committed: Mon Aug 29 18:50:29 2016 +0100 ---------------------------------------------------------------------- .../taverna/databundle/TestDataBundles.java | 180 ++++++++++++++++++- 1 file changed, 171 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-taverna-language/blob/5d9cc7f6/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java ---------------------------------------------------------------------- diff --git a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java index a3afef9..6c6ab4b 100644 --- a/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java +++ b/taverna-databundle/src/test/java/org/apache/taverna/databundle/TestDataBundles.java @@ -33,7 +33,6 @@ import java.io.InputStream; import java.net.URI; import java.net.URL; import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; import java.nio.file.DirectoryStream; import java.nio.file.FileAlreadyExistsException; import java.nio.file.Files; @@ -45,6 +44,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import org.apache.taverna.databundle.DataBundles.ResolveOptions; import org.apache.taverna.robundle.Bundle; import org.apache.taverna.scufl2.api.container.WorkflowBundle; import org.apache.taverna.scufl2.api.io.WorkflowBundleIO; @@ -528,7 +528,7 @@ public class TestDataBundles { } @Test - public void resolve() throws Exception { + public void resolveString() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); DataBundles.createList(list); @@ -549,7 +549,7 @@ public class TestDataBundles { - Object resolved = DataBundles.resolve(list); + Object resolved = DataBundles.resolve(list, ResolveOptions.STRING); assertTrue("Didn't resolve to a list", resolved instanceof List); List resolvedList = (List) resolved; @@ -569,9 +569,169 @@ public class TestDataBundles { assertEquals("Example error", ((ErrorDocument)resolvedList.get(4)).getMessage()); } + + @Test + public void resolveNestedString() throws Exception { + Path inputs = DataBundles.getInputs(dataBundle); + Path list = DataBundles.getPort(inputs, "in1"); + DataBundles.createList(list); + + + Path nested0 = DataBundles.newListItem(list); + DataBundles.newListItem(nested0); + DataBundles.setStringValue(DataBundles.newListItem(nested0), "test0,0"); + DataBundles.setStringValue(DataBundles.newListItem(nested0), "test0,1"); + DataBundles.setStringValue(DataBundles.newListItem(nested0), "test0,2"); + Path nested1 = DataBundles.newListItem(list); + DataBundles.newListItem(nested1); // empty + Path nested2 = DataBundles.newListItem(list); + DataBundles.newListItem(nested2); + DataBundles.setStringValue(DataBundles.newListItem(nested2), "test2,0"); + + + + List<List<String>> resolved = (List<List<String>>) DataBundles.resolve(list, ResolveOptions.STRING); + + assertEquals("Unexpected list size", 3, resolved.size()); + assertEquals("Unexpected sublist[0] size", 3, resolved.get(0).size()); + assertEquals("Unexpected sublist[1] size", 0, resolved.get(1).size()); + assertEquals("Unexpected sublist[2] size", 1, resolved.get(2).size()); + + + assertEquals("test0,0", resolved.get(0).get(0)); + assertEquals("test0,1", resolved.get(0).get(1)); + assertEquals("test0,2", resolved.get(0).get(2)); + assertEquals("test2,0", resolved.get(2).get(0)); + } + + @Test + public void resolveURIs() throws Exception { + Path inputs = DataBundles.getInputs(dataBundle); + Path list = DataBundles.getPort(inputs, "in1"); + DataBundles.createList(list); + // 0 string value + Path test0 = DataBundles.newListItem(list); + DataBundles.setStringValue(test0, "test0"); + // 1 http:// reference + URI reference = URI.create("http://example.com/"); + DataBundles.setReference(DataBundles.newListItem(list), reference); + // 2 file:/// reference + Path tmpFile = Files.createTempFile("test", ".txt"); + URI fileRef = tmpFile.toUri(); + assertEquals("file", fileRef.getScheme()); + DataBundles.setReference(DataBundles.newListItem(list), fileRef); + // 3 empty (null) + // 4 error + Path error4 = DataBundles.getListItem(list, 4); + DataBundles.setError(error4, "Example error", "1. Tried it\n2. Didn't work"); + + List resolved = (List) DataBundles.resolve(list, ResolveOptions.URI); + assertEquals(test0.toUri(), resolved.get(0)); + assertEquals(reference, resolved.get(1)); + assertEquals(fileRef, resolved.get(2)); + assertNull(resolved.get(3)); + // NOTE: Need to get the Path again due to different file extension + assertTrue(resolved.get(4) instanceof ErrorDocument); + //assertTrue(DataBundles.getListItem(list, 4).toUri(), resolved.get(4)); + } + + + @Test + public void resolvePaths() throws Exception { + Path inputs = DataBundles.getInputs(dataBundle); + Path list = DataBundles.getPort(inputs, "in1"); + DataBundles.createList(list); + // 0 string value + Path test0 = DataBundles.newListItem(list); + DataBundles.setStringValue(test0, "test0"); + // 1 http:// reference + URI reference = URI.create("http://example.com/"); + Path test1 = DataBundles.setReference(DataBundles.newListItem(list), reference); + // 2 file:/// reference + Path tmpFile = Files.createTempFile("test", ".txt"); + URI fileRef = tmpFile.toUri(); + assertEquals("file", fileRef.getScheme()); + Path test2 = DataBundles.setReference(DataBundles.newListItem(list), fileRef); + // 3 empty (null) + // 4 error + Path error4 = DataBundles.setError(DataBundles.getListItem(list, 4), "Example error", "1. Tried it\n2. Didn't work"); + + List<Path> resolved = (List<Path>) DataBundles.resolve(list, ResolveOptions.PATH); + assertEquals(test0, resolved.get(0)); + assertEquals(test1, resolved.get(1)); + assertEquals(test2, resolved.get(2)); + assertNull(resolved.get(3)); + assertEquals(error4, resolved.get(4)); + } + + @Test + public void resolveReplaceError() throws Exception { + Path inputs = DataBundles.getInputs(dataBundle); + Path list = DataBundles.getPort(inputs, "in1"); + DataBundles.createList(list); + // 0 string value + DataBundles.setStringValue(DataBundles.newListItem(list), "test0"); + // 1 error + DataBundles.setError(DataBundles.newListItem(list), + "Example error", "1. Tried it\n2. Didn't work"); + + List resolved = (List) DataBundles.resolve(list, ResolveOptions.STRING, ResolveOptions.REPLACE_ERRORS); + assertEquals("test0", resolved.get(0)); + assertNull(resolved.get(1)); + } + + @Test + public void resolveReplaceNull() throws Exception { + Path inputs = DataBundles.getInputs(dataBundle); + Path list = DataBundles.getPort(inputs, "in1"); + DataBundles.createList(list); + // 0 string value + Path test0 = DataBundles.newListItem(list); + DataBundles.setStringValue(test0, "test0"); + // 1 empty + // 2 error + DataBundles.setError(DataBundles.getListItem(list, 2), + "Example error", "1. Tried it\n2. Didn't work"); + + List resolved = (List) DataBundles.resolve(list, ResolveOptions.REPLACE_ERRORS, ResolveOptions.REPLACE_NULL); + assertEquals(test0, resolved.get(0)); + assertEquals("", resolved.get(1)); + assertEquals("", resolved.get(2)); + } + @Test - public void resolveBinariesKindOf() throws Exception { + public void resolveDefault() throws Exception { + Path inputs = DataBundles.getInputs(dataBundle); + Path list = DataBundles.getPort(inputs, "in1"); + DataBundles.createList(list); + // 0 string value + Path test0 = DataBundles.newListItem(list); + DataBundles.setStringValue(test0, "test0"); + // 1 http:// reference + URI reference = URI.create("http://example.com/"); + Path test1 = DataBundles.setReference(DataBundles.newListItem(list), reference); + // 2 file:/// reference + Path tmpFile = Files.createTempFile("test", ".txt"); + URI fileRef = tmpFile.toUri(); + assertEquals("file", fileRef.getScheme()); + Path test2 = DataBundles.setReference(DataBundles.newListItem(list), fileRef); + // 3 empty (null) + // 4 error + Path error4 = DataBundles.setError(DataBundles.getListItem(list, 4), "Example error", "1. Tried it\n2. Didn't work"); + + List resolved = (List) DataBundles.resolve(list, ResolveOptions.DEFAULT); + assertEquals(test0, resolved.get(0)); + assertTrue(resolved.get(1) instanceof URL); + assertEquals("http://example.com/", resolved.get(1).toString()); + assertTrue(resolved.get(2) instanceof File); + assertEquals(tmpFile.toFile(), resolved.get(2)); + assertNull(resolved.get(3)); + assertTrue(resolved.get(4) instanceof ErrorDocument); + } + + @Test + public void resolveBinaries() throws Exception { Path inputs = DataBundles.getInputs(dataBundle); Path list = DataBundles.getPort(inputs, "in1"); Path item = DataBundles.newListItem(list); @@ -584,13 +744,15 @@ public class TestDataBundles { -19,-20,-21,-22,-23,-24,-25,-26,-27,-28,-29,-30,-31 }; Files.write(item, bytes); - List resolved = (List)DataBundles.resolve(list); - - // The below will always fail as several of the above bytes are not parsed as valid UTF-8 - // but instead be substituted with replacement characters. - //assertArrayEquals(bytes, ((String)resolved.get(0)).getBytes(StandardCharsets.UTF_8)); + List resolvedBytes = (List)DataBundles.resolve(list, ResolveOptions.BYTES); + assertArrayEquals(bytes, (byte[])resolvedBytes.get(0)); + + List resolvedString = (List)DataBundles.resolve(list, ResolveOptions.STRING); + // The below will always fail as several of the above bytes are not parsed as valid UTF-8 + // but instead be substituted with replacement characters. + //assertArrayEquals(bytes, ((String)resolvedString.get(0)).getBytes(StandardCharsets.UTF_8)); } @Test
