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