54e4d58f278472359214a7173fca5bde50f2e3af
[jalview.git] / test / jalview / io / Gff3tests.java
1 package jalview.io;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5 import static org.testng.AssertJUnit.assertNotNull;
6 import static org.testng.AssertJUnit.assertNull;
7 import static org.testng.AssertJUnit.assertTrue;
8
9 import jalview.datamodel.Alignment;
10 import jalview.datamodel.AlignmentI;
11 import jalview.datamodel.SequenceDummy;
12 import jalview.datamodel.SequenceI;
13 import jalview.gui.AlignFrame;
14
15 import java.io.IOException;
16
17 import org.testng.annotations.Test;
18
19 public class Gff3tests
20 {
21
22   private static String exonerateSeqs = "examples/testdata/exonerateseqs.fa",
23           exonerateOutput = "examples/testdata/exonerateoutput.gff",
24           simpleGff3file = "examples/testdata/simpleGff3.gff";
25
26   @Test(groups = { "Functional" })
27   public void testExonerateImport()
28   {
29     // exonerate does not tag sequences after features, so we have a more
30     // conventional annotation import test here
31
32     FileLoader loader = new FileLoader(false);
33
34     AlignFrame af = loader.LoadFileWaitTillLoaded(exonerateSeqs,
35             FormatAdapter.FILE);
36
37     assertEquals("Unexpected number of DNA protein associations", 0, af
38             .getViewport().getAlignment().getCodonFrames().size());
39
40     af.loadJalviewDataFile(exonerateOutput, FormatAdapter.FILE, null, null);
41
42     assertTrue("Expected at least one DNA protein association", af
43             .getViewport().getAlignment().getDataset().getCodonFrames()
44             .size() > 0);
45
46   }
47
48   @Test(groups = { "Functional" })
49   public void simpleGff3FileIdentify()
50   {
51     assertEquals("Didn't recognise file correctly.", IdentifyFile.GFF3File,
52             new IdentifyFile().Identify(simpleGff3file, FormatAdapter.FILE));
53   }
54
55   @Test(groups = { "Functional" })
56   public void simpleGff3FileClass() throws IOException
57   {
58     AlignmentI dataset = new Alignment(new SequenceI[] {});
59     FeaturesFile ffile = new FeaturesFile(simpleGff3file,
60             FormatAdapter.FILE);
61
62     boolean parseResult = ffile.parse(dataset, null, null, false, false);
63     assertTrue("return result should be true", parseResult);
64     checkDatasetfromSimpleGff3(dataset);
65   }
66
67   @Test(groups = { "Functional" })
68   public void simpleGff3FileLoader() throws IOException
69   {
70     AlignFrame af = new FileLoader(false).LoadFileWaitTillLoaded(
71             simpleGff3file, FormatAdapter.FILE);
72     assertTrue(
73             "Didn't read the alignment into an alignframe from Gff3 File",
74             af != null);
75     checkDatasetfromSimpleGff3(af.getViewport().getAlignment().getDataset());
76   }
77
78   @Test(groups = { "Functional" })
79   public void simpleGff3RelaxedIdMatching() throws IOException
80   {
81     AlignmentI dataset = new Alignment(new SequenceI[] {});
82     FeaturesFile ffile = new FeaturesFile(simpleGff3file,
83             FormatAdapter.FILE);
84
85     boolean parseResult = ffile.parse(dataset, null, null, false, true);
86     assertTrue("return result (relaxedID matching) should be true",
87             parseResult);
88     checkDatasetfromSimpleGff3(dataset);
89   }
90
91   @Test(groups = { "Functional" })
92   public void readGff3File() throws IOException
93   {
94     Gff3File gff3reader = new Gff3File(simpleGff3file, FormatAdapter.FILE);
95     Alignment dataset = new Alignment(gff3reader.getSeqsAsArray());
96     gff3reader.addProperties(dataset);
97     checkDatasetfromSimpleGff3(dataset);
98
99   }
100
101   private void checkDatasetfromSimpleGff3(AlignmentI dataset)
102   {
103     assertEquals("no sequences extracted from GFF3 file", 2,
104             dataset.getHeight());
105
106     SequenceI seq1 = dataset.findName("seq1"), seq2 = dataset
107             .findName("seq2");
108     assertNotNull(seq1);
109     assertNotNull(seq2);
110     assertFalse(
111             "Failed to replace dummy seq1 with real sequence",
112             seq1 instanceof SequenceDummy
113                     && ((SequenceDummy) seq1).isDummy());
114     assertFalse(
115             "Failed to replace dummy seq2 with real sequence",
116             seq2 instanceof SequenceDummy
117                     && ((SequenceDummy) seq2).isDummy());
118     String placeholderseq = new SequenceDummy("foo").getSequenceAsString();
119     assertFalse("dummy replacement buggy for seq1",
120             placeholderseq.equals(seq1.getSequenceAsString()));
121     assertFalse("dummy replacement buggy for seq2",
122             placeholderseq.equals(seq2.getSequenceAsString()));
123     assertNotNull("No features added to seq1", seq1.getSequenceFeatures());// !=
124                                                                            // null);
125     assertEquals("Wrong number of features", 3,
126             seq1.getSequenceFeatures().length);
127     assertNull(seq2.getSequenceFeatures());
128     assertEquals(
129             "Wrong number of features",
130             0,
131             seq2.getSequenceFeatures() == null ? 0 : seq2
132                     .getSequenceFeatures().length);
133     assertTrue(
134             "Expected at least one CDNA/Protein mapping for seq1",
135             dataset.getCodonFrame(seq1) != null
136                     && dataset.getCodonFrame(seq1).size() > 0);
137
138   }
139   // @Test(groups ={ "Functional" })
140   // public final void testPrintGFFFormatSequenceIArrayMapOfStringObject()
141   // {
142   // fail("Not yet implemented");
143   // }
144   //
145   // @Test(groups ={ "Functional" })
146   // public final void testAlignFileBooleanStringString()
147   // {
148   // fail("Not yet implemented");
149   // }
150
151 }