3d25bf156bc6358ccb952bdb73576888c2b5d9f6
[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, formats.forName(ff.getName().toUpperCase(Locale.ROOT)));
109       assertSame(ff, formats.forName(ff.getName().toLowerCase(Locale.ROOT)));
110     }
111     assertNull(formats.forName(null));
112     assertNull(formats.forName("rubbish"));
113   }
114
115   @Test(groups = "Functional")
116   public void testRegisterFileFormat()
117   {
118     FileFormats formats = FileFormats.getInstance();
119     assertSame(FileFormat.MMCif,
120             formats.forName(FileFormat.MMCif.getName()));
121     assertTrue(formats.isIdentifiable(FileFormat.MMCif));
122
123     /*
124      * deregister mmCIF format
125      */
126     formats.deregisterFileFormat(FileFormat.MMCif.getName());
127     assertNull(formats.forName(FileFormat.MMCif.getName()));
128
129     /*
130      * re-register mmCIF format
131      * it is reinstated (still 'identifiable')
132      */
133     formats.registerFileFormat(FileFormat.MMCif);
134     assertSame(FileFormat.MMCif,
135             formats.forName(FileFormat.MMCif.getName()));
136     assertTrue(formats.isIdentifiable(FileFormat.MMCif));
137     // repeating does nothing
138     formats.registerFileFormat(FileFormat.MMCif);
139     assertSame(FileFormat.MMCif,
140             formats.forName(FileFormat.MMCif.getName()));
141   }
142
143   @Test(groups = "Functional")
144   public void testGetFormats()
145   {
146     /*
147      * verify the list of file formats registered matches the enum values
148      */
149     FileFormats instance = FileFormats.getInstance();
150     Iterator<FileFormatI> formats = instance.getFormats().iterator();
151     FileFormatI[] builtIn = FileFormat.values();
152
153     for (FileFormatI ff : builtIn)
154     {
155       assertSame(ff, formats.next());
156     }
157     assertFalse(formats.hasNext());
158
159     /*
160      * remove the first format, check it is no longer in 
161      * the list of formats
162      */
163     String firstFormatName = instance.getFormats().iterator().next()
164             .getName();
165     instance.deregisterFileFormat(firstFormatName);
166     assertNotEquals(instance.getFormats().iterator().next().getName(),
167             firstFormatName);
168   }
169 }