--- /dev/null
+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");
+ // }
+
+}