JAL-1260 unit test for FileFormats updated for GenBank/ENA
[jalview.git] / test / jalview / io / FileFormatsTest.java
1 package jalview.io;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertNotEquals;
6 import static org.testng.Assert.assertNull;
7 import static org.testng.Assert.assertSame;
8 import static org.testng.Assert.assertTrue;
9
10 import java.util.Iterator;
11
12 import org.testng.annotations.AfterMethod;
13 import org.testng.annotations.BeforeMethod;
14 import org.testng.annotations.Test;
15
16 public class FileFormatsTest
17 {
18   @AfterMethod(alwaysRun = true)
19   public void tearDown()
20   {
21     FileFormats.getInstance().reset();
22   }
23
24   @BeforeMethod(alwaysRun = true)
25   public void setUp()
26   {
27     FileFormats.getInstance().reset();
28   }
29
30   @Test(groups = "Functional")
31   public void testIsIdentifiable()
32   {
33     FileFormats formats = FileFormats.getInstance();
34     assertTrue(formats
35             .isIdentifiable(formats.forName(FileFormat.Fasta.getName())));
36     assertTrue(formats
37             .isIdentifiable(formats.forName(FileFormat.MMCif.getName())));
38     assertTrue(formats
39             .isIdentifiable(formats.forName(FileFormat.Jnet.getName())));
40     assertTrue(formats
41             .isIdentifiable(formats.forName(FileFormat.Jalview.getName())));
42     // GenBank/ENA
43     assertFalse(formats.isIdentifiable(null));
44
45     /*
46      * remove and re-add a format: it is still 'identifiable'
47      */
48     formats.deregisterFileFormat(FileFormat.Fasta.getName());
49     assertNull(formats.forName(FileFormat.Fasta.getName()));
50     formats.registerFileFormat(FileFormat.Fasta);
51     assertSame(FileFormat.Fasta,
52             formats.forName(FileFormat.Fasta.getName()));
53     assertTrue(formats.isIdentifiable(FileFormat.Fasta));
54   }
55
56   @Test(groups = "Functional")
57   public void testGetReadableFormats()
58   {
59     String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
60     FileFormats formats = FileFormats.getInstance();
61     assertEquals(formats.getReadableFormats().toString(), expected);
62   }
63
64   @Test(groups = "Functional")
65   public void testGetWritableFormats()
66   {
67     String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
68     FileFormats formats = FileFormats.getInstance();
69     assertEquals(formats.getWritableFormats(true).toString(), expected);
70     expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Jalview]";
71     assertEquals(formats.getWritableFormats(false).toString(), expected);
72   }
73
74   @Test(groups = "Functional")
75   public void testDeregisterFileFormat()
76   {
77     String writable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
78     String readable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
79     FileFormats formats = FileFormats.getInstance();
80     assertEquals(formats.getWritableFormats(true).toString(), writable);
81     assertEquals(formats.getReadableFormats().toString(), readable);
82
83     formats.deregisterFileFormat(FileFormat.Fasta.getName());
84     writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
85     readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
86     assertEquals(formats.getWritableFormats(true).toString(), writable);
87     assertEquals(formats.getReadableFormats().toString(), readable);
88
89     /*
90      * re-register the format: it gets added to the end of the list
91      */
92     formats.registerFileFormat(FileFormat.Fasta);
93     writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Fasta]";
94     readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview, Fasta]";
95     assertEquals(formats.getWritableFormats(true).toString(), writable);
96     assertEquals(formats.getReadableFormats().toString(), readable);
97   }
98
99   @Test(groups = "Functional")
100   public void testForName()
101   {
102     FileFormats formats = FileFormats.getInstance();
103     for (FileFormatI ff : FileFormat.values())
104     {
105       assertSame(ff, formats.forName(ff.getName()));
106       assertSame(ff, formats.forName(ff.getName().toUpperCase()));
107       assertSame(ff, formats.forName(ff.getName().toLowerCase()));
108     }
109     assertNull(formats.forName(null));
110     assertNull(formats.forName("rubbish"));
111   }
112
113   @Test(groups = "Functional")
114   public void testRegisterFileFormat()
115   {
116     FileFormats formats = FileFormats.getInstance();
117     assertSame(FileFormat.MMCif,
118             formats.forName(FileFormat.MMCif.getName()));
119     assertTrue(formats.isIdentifiable(FileFormat.MMCif));
120
121     /*
122      * deregister mmCIF format
123      */
124     formats.deregisterFileFormat(FileFormat.MMCif.getName());
125     assertNull(formats.forName(FileFormat.MMCif.getName()));
126
127     /*
128      * re-register mmCIF format
129      * it is reinstated (still 'identifiable')
130      */
131     formats.registerFileFormat(FileFormat.MMCif);
132     assertSame(FileFormat.MMCif,
133             formats.forName(FileFormat.MMCif.getName()));
134     assertTrue(formats.isIdentifiable(FileFormat.MMCif));
135     // repeating does nothing
136     formats.registerFileFormat(FileFormat.MMCif);
137     assertSame(FileFormat.MMCif,
138             formats.forName(FileFormat.MMCif.getName()));
139   }
140
141   @Test(groups = "Functional")
142   public void testGetFormats()
143   {
144     /*
145      * verify the list of file formats registered matches the enum values
146      */
147     FileFormats instance = FileFormats.getInstance();
148     Iterator<FileFormatI> formats = instance.getFormats().iterator();
149     FileFormatI[] builtIn = FileFormat.values();
150
151     for (FileFormatI ff : builtIn)
152     {
153       assertSame(ff, formats.next());
154     }
155     assertFalse(formats.hasNext());
156
157     /*
158      * remove the first format, check it is no longer in 
159      * the list of formats
160      */
161     String firstFormatName = instance.getFormats().iterator().next()
162             .getName();
163     instance.deregisterFileFormat(firstFormatName);
164     assertNotEquals(instance.getFormats().iterator().next().getName(),
165             firstFormatName);
166   }
167 }