faf05d324d7fa5dc85235b113f88131fa1c915dc
[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.isIdentifiable(formats.forName(FileFormat.Fasta
35             .getName())));
36     assertTrue(formats.isIdentifiable(formats.forName(FileFormat.MMCif
37             .getName())));
38     assertTrue(formats.isIdentifiable(formats.forName(FileFormat.Jnet
39             .getName())));
40     assertTrue(formats.isIdentifiable(formats.forName(FileFormat.Jalview
41             .getName())));
42     assertFalse(formats.isIdentifiable(null));
43
44     /*
45      * remove and re-add a format: it is still 'identifiable'
46      */
47     formats.deregisterFileFormat(FileFormat.Fasta.getName());
48     assertNull(formats.forName(FileFormat.Fasta.getName()));
49     formats.registerFileFormat(FileFormat.Fasta);
50     assertSame(FileFormat.Fasta,
51             formats.forName(FileFormat.Fasta.getName()));
52     assertTrue(formats.isIdentifiable(FileFormat.Fasta));
53   }
54
55   @Test(groups = "Functional")
56   public void testGetReadableFormats()
57   {
58     String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3, BSML]";
59     FileFormats formats = FileFormats.getInstance();
60     assertEquals(formats.getReadableFormats().toString(), expected);
61   }
62
63   @Test(groups = "Functional")
64   public void testGetWritableFormats()
65   {
66     String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, HMMER3]";
67     FileFormats formats = FileFormats.getInstance();
68     assertEquals(formats.getWritableFormats(true).toString(), expected);
69     expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Jalview, HMMER3]";
70     assertEquals(formats.getWritableFormats(false).toString(), expected);
71   }
72
73   @Test(groups = "Functional")
74   public void testDeregisterFileFormat()
75   {
76     String writable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, HMMER3]";
77     String readable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3, BSML]";
78     FileFormats formats = FileFormats.getInstance();
79     System.out.println(formats.getReadableFormats().toString());
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, HMMER3]";
85     readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3, BSML]";
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, HMMER3, Fasta]";
94     readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GFF or Jalview features, PDB, mmCIF, Jalview, HMMER3, BSML, 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()
149             .iterator();
150     FileFormatI[] builtIn = FileFormat.values();
151
152     for (FileFormatI ff : builtIn)
153     {
154       assertSame(ff, formats.next());
155     }
156     assertFalse(formats.hasNext());
157
158     /*
159      * remove the first format, check it is no longer in 
160      * the list of formats
161      */
162     String firstFormatName = instance.getFormats().iterator().next()
163             .getName();
164     instance.deregisterFileFormat(firstFormatName);
165     assertNotEquals(instance.getFormats().iterator().next().getName(),
166             firstFormatName);
167   }
168 }