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