/*
* Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
* Copyright (C) $$Year-Rel$$ The Jalview Authors
*
* This file is part of Jalview.
*
* Jalview is free software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Jalview is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Jalview. If not, see .
* The Jalview Authors are detailed in the 'AUTHORS' file.
*/
package jalview.io;
import java.util.Locale;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.util.Iterator;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
public class FileFormatsTest
{
@AfterMethod(alwaysRun = true)
public void tearDown()
{
FileFormats.getInstance().reset();
}
@BeforeMethod(alwaysRun = true)
public void setUp()
{
FileFormats.getInstance().reset();
}
@Test(groups = "Functional")
public void testIsIdentifiable()
{
FileFormats formats = FileFormats.getInstance();
assertTrue(formats
.isIdentifiable(formats.forName(FileFormat.Fasta.getName())));
assertTrue(formats
.isIdentifiable(formats.forName(FileFormat.MMCif.getName())));
assertTrue(formats
.isIdentifiable(formats.forName(FileFormat.Jnet.getName())));
assertTrue(formats
.isIdentifiable(formats.forName(FileFormat.Jalview.getName())));
// GenBank/ENA
assertFalse(formats.isIdentifiable(null));
/*
* remove and re-add a format: it is still 'identifiable'
*/
formats.deregisterFileFormat(FileFormat.Fasta.getName());
assertNull(formats.forName(FileFormat.Fasta.getName()));
formats.registerFileFormat(FileFormat.Fasta);
assertSame(FileFormat.Fasta,
formats.forName(FileFormat.Fasta.getName()));
assertTrue(formats.isIdentifiable(FileFormat.Fasta));
}
@Test(groups = "Functional")
public void testGetReadableFormats()
{
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]";
FileFormats formats = FileFormats.getInstance();
assertEquals(formats.getReadableFormats().toString(), expected);
}
@Test(groups = "Functional")
public void testGetWritableFormats()
{
String expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
FileFormats formats = FileFormats.getInstance();
assertEquals(formats.getWritableFormats(true).toString(), expected);
expected = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Jalview]";
assertEquals(formats.getWritableFormats(false).toString(), expected);
}
@Test(groups = "Functional")
public void testDeregisterFileFormat()
{
String writable = "[Fasta, PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
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]";
FileFormats formats = FileFormats.getInstance();
assertEquals(formats.getWritableFormats(true).toString(), writable);
assertEquals(formats.getReadableFormats().toString(), readable);
formats.deregisterFileFormat(FileFormat.Fasta.getName());
writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP]";
readable = "[PFAM, Stockholm, PIR, BLC, AMSA, HTML, RNAML, JSON, PileUp, MSF, Clustal, PHYLIP, GenBank Flatfile, ENA Flatfile, GFF or Jalview features, PDB, mmCIF, Jalview]";
assertEquals(formats.getWritableFormats(true).toString(), writable);
assertEquals(formats.getReadableFormats().toString(), readable);
/*
* re-register the format: it gets added to the end of the list
*/
formats.registerFileFormat(FileFormat.Fasta);
writable = "[PFAM, Stockholm, PIR, BLC, AMSA, JSON, PileUp, MSF, Clustal, PHYLIP, Fasta]";
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]";
assertEquals(formats.getWritableFormats(true).toString(), writable);
assertEquals(formats.getReadableFormats().toString(), readable);
}
@Test(groups = "Functional")
public void testForName()
{
FileFormats formats = FileFormats.getInstance();
for (FileFormatI ff : FileFormat.values())
{
assertSame(ff, formats.forName(ff.getName()));
assertSame(ff,
formats.forName(ff.getName().toUpperCase(Locale.ROOT)));
assertSame(ff,
formats.forName(ff.getName().toLowerCase(Locale.ROOT)));
}
assertNull(formats.forName(null));
assertNull(formats.forName("rubbish"));
}
@Test(groups = "Functional")
public void testRegisterFileFormat()
{
FileFormats formats = FileFormats.getInstance();
assertSame(FileFormat.MMCif,
formats.forName(FileFormat.MMCif.getName()));
assertTrue(formats.isIdentifiable(FileFormat.MMCif));
/*
* deregister mmCIF format
*/
formats.deregisterFileFormat(FileFormat.MMCif.getName());
assertNull(formats.forName(FileFormat.MMCif.getName()));
/*
* re-register mmCIF format
* it is reinstated (still 'identifiable')
*/
formats.registerFileFormat(FileFormat.MMCif);
assertSame(FileFormat.MMCif,
formats.forName(FileFormat.MMCif.getName()));
assertTrue(formats.isIdentifiable(FileFormat.MMCif));
// repeating does nothing
formats.registerFileFormat(FileFormat.MMCif);
assertSame(FileFormat.MMCif,
formats.forName(FileFormat.MMCif.getName()));
}
@Test(groups = "Functional")
public void testGetFormats()
{
/*
* verify the list of file formats registered matches the enum values
*/
FileFormats instance = FileFormats.getInstance();
Iterator formats = instance.getFormats().iterator();
FileFormatI[] builtIn = FileFormat.values();
for (FileFormatI ff : builtIn)
{
assertSame(ff, formats.next());
}
assertFalse(formats.hasNext());
/*
* remove the first format, check it is no longer in
* the list of formats
*/
String firstFormatName = instance.getFormats().iterator().next()
.getName();
instance.deregisterFileFormat(firstFormatName);
assertNotEquals(instance.getFormats().iterator().next().getName(),
firstFormatName);
}
}