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