From cebfc7e2ab708d591d975494ddbb9a8e5b880123 Mon Sep 17 00:00:00 2001 From: jhpoelen Date: Fri, 26 Apr 2019 11:41:27 -0700 Subject: [PATCH] bump to globi libs v0.12.1; add tests for empty access.tsv --- pom.xml | 2 +- .../elton/cmd/CmdInteractionsIT.java | 43 ++++++++++++++++++ .../elton/cmd/CmdNamesTest.java | 20 ++++++++ .../elton/cmd/CmdTestUtil.java | 7 ++- .../empty-dataset/access.tsv | 0 ...666e2e4109f351b7dfc6fc1dc8314e5671a8eecb80 | 4 ++ ...59a6589c470cf0c7d0fd99682c4c104481ad9a543f | Bin 0 -> 4533 bytes .../template-dataset/access.tsv | 4 ++ ...11c59c2960e3b68ecf1a3846afe1776014c4c96271 | 12 +++++ 9 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/globalbioticinteractions/elton/cmd/CmdInteractionsIT.java create mode 100644 src/test/resources/dataset-cache-empty/globalbioticinteractions/empty-dataset/access.tsv create mode 100644 src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/1cc8eff62af0e6bb3e7771666e2e4109f351b7dfc6fc1dc8314e5671a8eecb80 create mode 100644 src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f create mode 100644 src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/access.tsv create mode 100644 src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/c1b37add5ee5f30916f19811c59c2960e3b68ecf1a3846afe1776014c4c96271 diff --git a/pom.xml b/pom.xml index 35e3c6b..37b01db 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ Discover, cache and check species interaction data - 0.11.1 + 0.12.1 UTF-8 UTF-8 UTF-8 diff --git a/src/test/java/org/globalbioticinteractions/elton/cmd/CmdInteractionsIT.java b/src/test/java/org/globalbioticinteractions/elton/cmd/CmdInteractionsIT.java new file mode 100644 index 0000000..3d77459 --- /dev/null +++ b/src/test/java/org/globalbioticinteractions/elton/cmd/CmdInteractionsIT.java @@ -0,0 +1,43 @@ +package org.globalbioticinteractions.elton.cmd; + +import com.beust.jcommander.JCommander; +import org.junit.Assert; +import org.junit.Test; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.net.URISyntaxException; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.core.IsCollectionContaining.hasItem; +import static org.hamcrest.core.StringStartsWith.startsWith; +import static org.junit.Assert.assertThat; + +public class CmdInteractionsIT { + + @Test + public void interactions() throws URISyntaxException { + JCommander jc = new CmdLine().buildCommander(); + jc.parse("interactions", + "--cache-dir=/home/jorrit/proj/parasite-tracker/tmp"); + + Assert.assertEquals(jc.getParsedCommand(), "interactions"); + + JCommander actual = jc.getCommands().get(jc.getParsedCommand()); + Assert.assertEquals(actual.getObjects().size(), 1); + Object cmd = actual.getObjects().get(0); + Assert.assertEquals(cmd.getClass(), CmdInteractions.class); + CmdInteractions cmdInteractions = (CmdInteractions) actual.getObjects().get(0); + assertThat(cmdInteractions.getNamespaces().size(), is(1)); +// assertThat(cmdInteractions.getNamespaces(), hasItem("globalbioticinteractions/template-dataset")); + + if (actual.getObjects().get(0) instanceof Runnable) { + ByteArrayOutputStream out1 = new ByteArrayOutputStream(); + PrintStream out = new PrintStream(out1); + ((CmdInteractions) actual.getObjects().get(0)).run(out); + assertThat(out1.toString(), startsWith("\tLeptoconchus incycloseris\t\t\t\t\thttp://purl.obolibrary.org/obo/RO_0002444\tparasiteOf\t\tFungia (Cycloseris) costulata\t\t\t\t\t\t\t\t\t\t10.1007/s13127-011-0039-1\thttps://doi.org/10.1007/s13127-011-0039-1\tGittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1\tglobalbioticinteractions/template-dataset\tJorrit H. Poelen. 2014. Species associations manually extracted from literature.\thttps://zenodo.org/record/207958/files/globalbioticinteractions/template-dataset-0.0.2.zip\t2017-09-19T17:01:39Z\t631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f\tdev\n")); + } + } + + +} \ No newline at end of file diff --git a/src/test/java/org/globalbioticinteractions/elton/cmd/CmdNamesTest.java b/src/test/java/org/globalbioticinteractions/elton/cmd/CmdNamesTest.java index a41f299..a90b4b8 100644 --- a/src/test/java/org/globalbioticinteractions/elton/cmd/CmdNamesTest.java +++ b/src/test/java/org/globalbioticinteractions/elton/cmd/CmdNamesTest.java @@ -64,5 +64,25 @@ public void namesWithHeader() throws URISyntaxException { } } + @Test + public void namesWithHeaderEmpty() throws URISyntaxException { + JCommander jc = new CmdLine().buildCommander(); + jc.parse("names", + "--cache-dir=" + CmdTestUtil.cacheDirTestFor("/dataset-cache-empty/globalbioticinteractions/template-dataset/access.tsv")); + + JCommander actual = jc.getCommands().get(jc.getParsedCommand()); + + if (actual.getObjects().get(0) instanceof Runnable) { + ByteArrayOutputStream out1 = new ByteArrayOutputStream(); + PrintStream out = new PrintStream(out1); + ((CmdNames) actual.getObjects().get(0)).run(out); + String actualOutput = out1.toString(); + String[] actualLines = StringUtils.splitByWholeSeparator(actualOutput, "\n"); + assertThat(actualLines[0], is("taxonId\ttaxonName\ttaxonRank\ttaxonPath\ttaxonPathIds\ttaxonPathNames\tnamespace\tcitation\tarchiveURI\tlastSeenAt\tcontentHash\teltonVersion")); + assertThat(actualLines[1], is("\tLeptoconchus incycloseris\t\t\t\t\tglobalbioticinteractions/template-dataset\tJorrit H. Poelen. 2014. Species associations manually extracted from literature.\thttps://zenodo.org/record/207958/files/globalbioticinteractions/template-dataset-0.0.2.zip\t2017-09-19T17:01:39Z\t631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f\tdev")); + assertThat(actualLines[1].split("\t").length, is(actualLines[0].split("\t").length)); + } + } + } \ No newline at end of file diff --git a/src/test/java/org/globalbioticinteractions/elton/cmd/CmdTestUtil.java b/src/test/java/org/globalbioticinteractions/elton/cmd/CmdTestUtil.java index 5fb87eb..3f3bf57 100644 --- a/src/test/java/org/globalbioticinteractions/elton/cmd/CmdTestUtil.java +++ b/src/test/java/org/globalbioticinteractions/elton/cmd/CmdTestUtil.java @@ -10,7 +10,12 @@ final class CmdTestUtil { static String cacheDirTest() throws URISyntaxException { - URL accessURL = CmdNamesTest.class.getResource("/dataset-cache-test/globalbioticinteractions/template-dataset/access.tsv"); + String name = "/dataset-cache-test/globalbioticinteractions/template-dataset/access.tsv"; + return cacheDirTestFor(name); + } + + static String cacheDirTestFor(String name) throws URISyntaxException { + URL accessURL = CmdNamesTest.class.getResource(name); assertThat(accessURL, is(notNullValue())); return new File(accessURL.toURI()).getParentFile().getParentFile().getParentFile().getAbsolutePath(); } diff --git a/src/test/resources/dataset-cache-empty/globalbioticinteractions/empty-dataset/access.tsv b/src/test/resources/dataset-cache-empty/globalbioticinteractions/empty-dataset/access.tsv new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/1cc8eff62af0e6bb3e7771666e2e4109f351b7dfc6fc1dc8314e5671a8eecb80 b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/1cc8eff62af0e6bb3e7771666e2e4109f351b7dfc6fc1dc8314e5671a8eecb80 new file mode 100644 index 0000000..1f9c90d --- /dev/null +++ b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/1cc8eff62af0e6bb3e7771666e2e4109f351b7dfc6fc1dc8314e5671a8eecb80 @@ -0,0 +1,4 @@ +{ + "_comment": "Sample GloBI dataset descriptor. See http://github.com/globalbioticinteractions for more information.", + "citation": "Jorrit H. Poelen. 2014. Species associations manually extracted from literature." +} diff --git a/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f new file mode 100644 index 0000000000000000000000000000000000000000..318fa8474c32a17efc64f242b0dd5ebb4dd2d47e GIT binary patch literal 4533 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 literal 0 HcmV?d00001 diff --git a/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/access.tsv b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/access.tsv new file mode 100644 index 0000000..e073e67 --- /dev/null +++ b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/access.tsv @@ -0,0 +1,4 @@ +globalbioticinteractions/template-dataset https://zenodo.org/record/207958/files/globalbioticinteractions/template-dataset-0.0.2.zip 2017-09-19T17:01:39Z application/globi +globalbioticinteractions/template-dataset https://zenodo.org/record/207958/files/globalbioticinteractions/template-dataset-0.0.2.zip 631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f 2017-09-19T17:01:39Z +globalbioticinteractions/template-dataset jar:file:/home/jorrit/proj/globi/globinizer/./datasets/globalbioticinteractions/template-dataset/631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f!/globalbioticinteractions-template-dataset-e68f448/globi.json 1cc8eff62af0e6bb3e7771666e2e4109f351b7dfc6fc1dc8314e5671a8eecb80 2017-09-19T17:01:39Z +globalbioticinteractions/template-dataset jar:file:/home/jorrit/proj/globi/globinizer/./datasets/globalbioticinteractions/template-dataset/631d3777cf83e1abea848b59a6589c470cf0c7d0fd99682c4c104481ad9a543f!/globalbioticinteractions-template-dataset-e68f448/interactions.tsv c1b37add5ee5f30916f19811c59c2960e3b68ecf1a3846afe1776014c4c96271 2017-09-19T17:01:39Z \ No newline at end of file diff --git a/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/c1b37add5ee5f30916f19811c59c2960e3b68ecf1a3846afe1776014c4c96271 b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/c1b37add5ee5f30916f19811c59c2960e3b68ecf1a3846afe1776014c4c96271 new file mode 100644 index 0000000..f02bb96 --- /dev/null +++ b/src/test/resources/dataset-cache-empty/globalbioticinteractions/template-dataset/c1b37add5ee5f30916f19811c59c2960e3b68ecf1a3846afe1776014c4c96271 @@ -0,0 +1,12 @@ +sourceTaxonId sourceTaxonName interactionTypeId interactionTypeName targetTaxonId targetTaxonName localityId localityName decimalLatitude decimalLongitude observationDateTime referenceDoi referenceCitation + Leptoconchus incycloseris RO:0002444 parasite of Fungia (Cycloseris) costulata doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus infungites RO:0002444 parasite of Fungia (Fungia) fungites doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus ingrandifungi RO:0002444 parasite of Sandalolitha dentata doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus ingranulosa RO:0002444 parasite of Fungia (Wellsofungia) granulosa doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus inlimax RO:0002444 parasite of Herpolitha limax doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus inpileus RO:0002444 parasite of Halomitra pileus doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus inpleuractis RO:0002444 parasite of Fungia (Pleuractis) gravis doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus inpleuractis RO:0002444 parasite of Fungia (Pleuractis) moluccensis doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus inpleuractis RO:0002444 parasite of Fungia (Pleuractis) paumotensis doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus massini RO:0002444 parasite of Fungia (Verrillofungia) concinna doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1 + Leptoconchus massini RO:0002444 parasite of Fungia (Verrillofungia) repanda doi:10.1007/s13127-011-0039-1 Gittenberger, A., Gittenberger, E. (2011). Cryptic, adaptive radiation of endoparasitic snails: sibling species of Leptoconchus (Gastropoda: Coralliophilidae) in corals. Org Divers Evol, 11(1), 21–41. doi:10.1007/s13127-011-0039-1