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