Merge branch 'develop' into features/JAL-892varnaToProject
[jalview.git] / test / jalview / io / Gff3tests.java
diff --git a/test/jalview/io/Gff3tests.java b/test/jalview/io/Gff3tests.java
new file mode 100644 (file)
index 0000000..8df44df
--- /dev/null
@@ -0,0 +1,147 @@
+package jalview.io;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.SequenceDummy;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+
+import java.io.IOException;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class Gff3tests
+{
+
+  private static String exonerateSeqs = "examples/testdata/exonerateseqs.fa",
+          exonerateOutput = "examples/testdata/exonerateoutput.gff",
+          simpleGff3file = "examples/testdata/simpleGff3.gff";
+
+  @Test
+  public void testExonerateImport()
+  {
+    // exonerate does not tag sequences after features, so we have a more
+    // conventional annotation import test here
+
+    FileLoader loader = new FileLoader(false);
+
+    AlignFrame af = loader.LoadFileWaitTillLoaded(exonerateSeqs,
+            FormatAdapter.FILE);
+
+    Assert.assertEquals("Unexpected number of DNA protein associations", 0,
+            af.getViewport().getAlignment().getCodonFrames().size());
+
+    af.loadJalviewDataFile(exonerateOutput, FormatAdapter.FILE, null, null);
+
+    Assert.assertNotEquals("Expected at least one DNA protein association",
+            0, af.getViewport().getAlignment().getDataset()
+                    .getCodonFrames().size());
+
+  }
+
+  @Test
+  public void simpleGff3FileIdentify()
+  {
+    Assert.assertEquals("Didn't recognise file correctly.",
+            IdentifyFile.GFF3File,
+            new IdentifyFile().Identify(simpleGff3file, FormatAdapter.FILE));
+  }
+
+  @Test
+  public void simpleGff3FileClass() throws IOException
+  {
+    AlignmentI dataset = new Alignment(new SequenceI[]
+    {});
+    FeaturesFile ffile = new FeaturesFile(simpleGff3file,
+            FormatAdapter.FILE);
+
+    boolean parseResult = ffile.parse(dataset, null, null, false, false);
+    Assert.assertTrue("return result should be true", parseResult);
+    checkDatasetfromSimpleGff3(dataset);
+  }
+
+  @Test
+  public void simpleGff3FileLoader() throws IOException
+  {
+    AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
+            simpleGff3file, FormatAdapter.FILE);
+    Assert.assertTrue(
+            "Didn't read the alignment into an alignframe from Gff3 File",
+            af != null);
+    checkDatasetfromSimpleGff3(af.getViewport().getAlignment().getDataset());
+  }
+
+  @Test
+  public void simpleGff3RelaxedIdMatching() throws IOException
+  {
+    AlignmentI dataset = new Alignment(new SequenceI[]
+    {});
+    FeaturesFile ffile = new FeaturesFile(simpleGff3file,
+            FormatAdapter.FILE);
+
+    boolean parseResult = ffile.parse(dataset, null, null, false, true);
+    Assert.assertTrue("return result (relaxedID matching) should be true",
+            parseResult);
+    checkDatasetfromSimpleGff3(dataset);
+  }
+
+  @Test
+  public void readGff3File() throws IOException
+  {
+    Gff3File gff3reader = new Gff3File(simpleGff3file, FormatAdapter.FILE);
+    Alignment dataset = new Alignment(gff3reader.getSeqsAsArray());
+    gff3reader.addProperties(dataset);
+    checkDatasetfromSimpleGff3(dataset);
+
+  }
+
+  private void checkDatasetfromSimpleGff3(AlignmentI dataset)
+  {
+    Assert.assertEquals("no sequences extracted from GFF3 file", 2,
+            dataset.getHeight());
+
+    SequenceI seq1 = dataset.findName("seq1"), seq2 = dataset
+            .findName("seq2");
+    Assert.assertNotNull(seq1);
+    Assert.assertNotNull(seq2);
+    Assert.assertFalse(
+            "Failed to replace dummy seq1 with real sequence",
+            seq1 instanceof SequenceDummy
+                    && ((SequenceDummy) seq1).isDummy());
+    Assert.assertFalse(
+            "Failed to replace dummy seq2 with real sequence",
+            seq2 instanceof SequenceDummy
+                    && ((SequenceDummy) seq2).isDummy());
+    String placeholderseq = new SequenceDummy("foo").getSequenceAsString();
+    Assert.assertFalse("dummy replacement buggy for seq1",
+            placeholderseq.equals(seq1.getSequenceAsString()));
+    Assert.assertNotEquals("dummy replacement buggy for seq2",
+            placeholderseq.equals(seq2.getSequenceAsString()));
+    Assert.assertNotNull("No features added to seq1",
+            seq1.getSequenceFeatures());// != null);
+    Assert.assertEquals("Wrong number of features", 3,
+            seq1.getSequenceFeatures().length);
+    Assert.assertNull(seq2.getSequenceFeatures());
+    Assert.assertEquals("Wrong number of features", 0, seq2
+            .getSequenceFeatures() == null ? 0
+            : seq2.getSequenceFeatures().length);
+    Assert.assertTrue(
+            "Expected at least one CDNA/Protein mapping for seq1",
+            dataset.getCodonFrame(seq1) != null
+                    && dataset.getCodonFrame(seq1).size() > 0);
+
+  }
+  // @Test
+  // public final void testPrintGFFFormatSequenceIArrayMapOfStringObject()
+  // {
+  // fail("Not yet implemented");
+  // }
+  //
+  // @Test
+  // public final void testAlignFileBooleanStringString()
+  // {
+  // fail("Not yet implemented");
+  // }
+
+}