X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FFeaturesFileTest.java;h=ed388a5f1aecae14f188fe16961174411d5c7cca;hb=ab9351a591e5295be9e41bfa86238ccc2a8024f8;hp=15923922573eec9bf559295172b18abf159d956c;hpb=4b52a21e3eca0eb79f738eaba7242f20a5a55637;p=jalview.git diff --git a/test/jalview/io/FeaturesFileTest.java b/test/jalview/io/FeaturesFileTest.java index 1592392..ed388a5 100644 --- a/test/jalview/io/FeaturesFileTest.java +++ b/test/jalview/io/FeaturesFileTest.java @@ -23,10 +23,14 @@ package jalview.io; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertTrue; +import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentI; +import jalview.datamodel.SequenceDummy; import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.schemes.AnnotationColourGradient; import jalview.schemes.GraduatedColor; @@ -41,6 +45,10 @@ import org.testng.annotations.Test; public class FeaturesFileTest { + private static String exonerateSeqs = "examples/testdata/exonerateseqs.fa", + exonerateOutput = "examples/testdata/exonerateoutput.gff", + simpleGffFile = "examples/testdata/simpleGff3.gff"; + @Test(groups = { "Functional" }) public void testParse() throws Exception { @@ -319,4 +327,118 @@ public class FeaturesFileTest assertEquals(87, sf.end); assertEquals("METALLIC", sf.type); } + + private void checkDatasetfromSimpleGff3(AlignmentI dataset) + { + assertEquals("no sequences extracted from GFF3 file", 2, + dataset.getHeight()); + + SequenceI seq1 = dataset.findName("seq1"), seq2 = dataset + .findName("seq2"); + assertNotNull(seq1); + assertNotNull(seq2); + assertFalse( + "Failed to replace dummy seq1 with real sequence", + seq1 instanceof SequenceDummy + && ((SequenceDummy) seq1).isDummy()); + assertFalse( + "Failed to replace dummy seq2 with real sequence", + seq2 instanceof SequenceDummy + && ((SequenceDummy) seq2).isDummy()); + String placeholderseq = new SequenceDummy("foo").getSequenceAsString(); + assertFalse("dummy replacement buggy for seq1", + placeholderseq.equals(seq1.getSequenceAsString())); + assertFalse("dummy replacement buggy for seq2", + placeholderseq.equals(seq2.getSequenceAsString())); + assertNotNull("No features added to seq1", seq1.getSequenceFeatures()); + assertEquals("Wrong number of features", 3, + seq1.getSequenceFeatures().length); + assertNull(seq2.getSequenceFeatures()); + assertEquals( + "Wrong number of features", + 0, + seq2.getSequenceFeatures() == null ? 0 : seq2 + .getSequenceFeatures().length); + assertTrue( + "Expected at least one CDNA/Protein mapping for seq1", + dataset.getCodonFrame(seq1) != null + && dataset.getCodonFrame(seq1).size() > 0); + + } + + @Test(groups = { "Functional" }) + public void readGff3File() throws IOException + { + FeaturesFile gffreader = new FeaturesFile(true, simpleGffFile, + FormatAdapter.FILE); + Alignment dataset = new Alignment(gffreader.getSeqsAsArray()); + gffreader.addProperties(dataset); + checkDatasetfromSimpleGff3(dataset); + } + + @Test(groups = { "Functional" }) + public void simpleGff3FileClass() throws IOException + { + AlignmentI dataset = new Alignment(new SequenceI[] {}); + FeaturesFile ffile = new FeaturesFile(simpleGffFile, + FormatAdapter.FILE); + + boolean parseResult = ffile.parse(dataset, null, false, false); + assertTrue("return result should be true", parseResult); + checkDatasetfromSimpleGff3(dataset); + } + + @Test(groups = { "Functional" }) + public void simpleGff3FileIdentify() + { + assertEquals("Didn't recognise file correctly.", + IdentifyFile.FeaturesFile, + new IdentifyFile().identify(simpleGffFile, FormatAdapter.FILE)); + } + + @Test(groups = { "Functional" }) + public void simpleGff3FileLoader() throws IOException + { + AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded( + simpleGffFile, FormatAdapter.FILE); + assertTrue( + "Didn't read the alignment into an alignframe from Gff3 File", + af != null); + // FIXME codon mappings are on the alignment but not on the dataset + checkDatasetfromSimpleGff3(af.getViewport().getAlignment()/* .getDataset() */); + } + + @Test(groups = { "Functional" }) + public void simpleGff3RelaxedIdMatching() throws IOException + { + AlignmentI dataset = new Alignment(new SequenceI[] {}); + FeaturesFile ffile = new FeaturesFile(simpleGffFile, + FormatAdapter.FILE); + + boolean parseResult = ffile.parse(dataset, null, false, true); + assertTrue("return result (relaxedID matching) should be true", + parseResult); + checkDatasetfromSimpleGff3(dataset); + } + + @Test(groups = { "Functional" }) + 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); + + assertEquals("Unexpected number of DNA protein associations", 0, af + .getViewport().getAlignment().getCodonFrames().size()); + + af.loadJalviewDataFile(exonerateOutput, FormatAdapter.FILE, null, null); + + assertTrue("Expected at least one DNA protein association", 0 != af + .getViewport().getAlignment().getDataset().getCodonFrames() + .size()); + } }