/*
* Copyright (C) Lennart Martens
*
* Contact: lennart.martens AT UGent.be (' AT ' to be replaced with '@')
*/
/*
* Created by IntelliJ IDEA.
* User: Lennart
* Date: 8-okt-02
* Time: 18:55:02
*/
package com.compomics.util.test.io;
import com.compomics.util.io.MascotEnzymeReader;
import com.compomics.util.junit.TestCaseLM;
import com.compomics.util.protein.DualEnzyme;
import com.compomics.util.protein.Enzyme;
import com.compomics.util.protein.RegExEnzyme;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Vector;
/*
* CVS information:
*
* $Revision: 1.4 $
* $Date: 2008/11/18 11:39:11 $
*/
/**
* This class implements the complete test scenario for the
* MascotEnzymeReader class.
*
* @author Lennart
* @see com.compomics.util.io.MascotEnzymeReader
*/
public class TestMascotEnzymeReader extends TestCase {
// Class specific log4j logger for TestMascotEnzymeReader instances.
Logger logger = Logger.getLogger(TestMascotEnzymeReader.class);
public TestMascotEnzymeReader() {
this("Test scenario for the MascotEnzymeReader class.");
}
public TestMascotEnzymeReader(String aName) {
super(aName);
}
/**
* This method test the creation and reading behaviour of a MascotEnzymeReader instance.
*/
public void testCreationAndReading() {
final String inputFile = TestCaseLM.getFullFilePath("enzymes_test.txt").replace("%20", " ");
final Vector control = new Vector(5);
control.add("Trypsin");
control.add("Trypsin/P");
control.add("TrypChymo");
control.add("PepsinA");
control.add("None");
control.add("dualTrypCathep");
control.add("DuAlTrypCathep2");
control.add("ReGeXTrypCathep");
control.add("regexTrypCathep2");
// With file.
try {
MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
String[] names = mer.getEnzymeNames();
// First see if the arrays are equal size.
Assert.assertEquals(control.size(), names.length);
Vector controlCopy = (Vector)control.clone();
// Now check whether we can find all entries.
for(int i = 0; i < names.length; i++) {
for(int j = 0; j < controlCopy.size(); j++) {
if(names[i].equals(controlCopy.get(j))) {
controlCopy.remove(j);
break;
}
}
}
// The control Vector should now be empty.
Assert.assertEquals(0, controlCopy.size());
// Next test each separate Enzyme entry.
Enzyme e = mer.getEnzyme("Trypsin");
Assert.assertEquals("Trypsin", e.getTitle());
Assert.assertEquals("KR", new String(e.getCleavage()));
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("Trypsin/P");
Assert.assertEquals("Trypsin/P", e.getTitle());
Assert.assertEquals("KR", new String(e.getCleavage()));
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("TrypChymo");
Assert.assertEquals("TrypChymo", e.getTitle());
Assert.assertEquals("FYWLKR", new String(e.getCleavage()));
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("PepsinA");
Assert.assertEquals("PepsinA", e.getTitle());
Assert.assertEquals("FL", new String(e.getCleavage()));
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("None");
Assert.assertEquals("None", e.getTitle());
Assert.assertEquals("NONE", new String(e.getCleavage()));
Assert.assertEquals("NONE", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.NTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("dualTrypCathep");
Assert.assertEquals("dualTrypCathep", e.getTitle());
Assert.assertEquals("DXR", new String(e.getCleavage()));
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof DualEnzyme);
if(e instanceof DualEnzyme) {
DualEnzyme dual = (DualEnzyme)e;
Assert.assertEquals("D", new String(dual.getCleavage(DualEnzyme.NTERMINAL)));
Assert.assertEquals("R", new String(dual.getCleavage(DualEnzyme.CTERMINAL)));
}
e = mer.getEnzyme("DuAlTrypCathep2");
Assert.assertEquals("DuAlTrypCathep2", e.getTitle());
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.NTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof DualEnzyme);
if(e instanceof DualEnzyme) {
DualEnzyme dual = (DualEnzyme)e;
Assert.assertEquals("DK", new String(dual.getCleavage(DualEnzyme.NTERMINAL)));
Assert.assertEquals("RW", new String(dual.getCleavage(DualEnzyme.CTERMINAL)));
}
e = mer.getEnzyme("ReGeXTrypCathep");
Assert.assertEquals("ReGeXTrypCathep", e.getTitle());
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof RegExEnzyme);
Assert.assertTrue(e.getClass().getName().equals("com.compomics.util.protein.RegExEnzyme"));
RegExEnzyme regex = (RegExEnzyme)e;
Assert.assertEquals("[KR]", new String(regex.getCleavage()));
e = mer.getEnzyme("regexTrypCathep2");
Assert.assertEquals("regexTrypCathep2", e.getTitle());
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.NTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof RegExEnzyme);
Assert.assertTrue(e.getClass().getName().equals("com.compomics.util.protein.RegExEnzyme"));
regex = (RegExEnzyme)e;
Assert.assertEquals("P+R", new String(regex.getCleavage()));
} catch(IOException ioe) {
fail("IOException while testing MascotEnzymeReader creation: '" + ioe.getMessage() + "'.");
}
// With inputstream.
try {
MascotEnzymeReader mer = new MascotEnzymeReader(new FileInputStream(inputFile));
String[] names = mer.getEnzymeNames();
// First see if the arrays are equal size.
Assert.assertEquals(control.size(), names.length);
Vector controlCopy = (Vector)control.clone();
// Now check whether we can find all entries.
for(int i = 0; i < names.length; i++) {
for(int j = 0; j < controlCopy.size(); j++) {
if(names[i].equals(controlCopy.get(j))) {
controlCopy.remove(j);
break;
}
}
}
// The control Vector should now be empty.
Assert.assertEquals(0, controlCopy.size());
// Next test each separate Enzyme entry.
Enzyme e = mer.getEnzyme("Trypsin");
Assert.assertEquals("Trypsin", e.getTitle());
Assert.assertEquals("KR", new String(e.getCleavage()));
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("Trypsin/P");
Assert.assertEquals("Trypsin/P", e.getTitle());
Assert.assertEquals("KR", new String(e.getCleavage()));
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("TrypChymo");
Assert.assertEquals("TrypChymo", e.getTitle());
Assert.assertEquals("FYWLKR", new String(e.getCleavage()));
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("PepsinA");
Assert.assertEquals("PepsinA", e.getTitle());
Assert.assertEquals("FL", new String(e.getCleavage()));
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("None");
Assert.assertEquals("None", e.getTitle());
Assert.assertEquals("NONE", new String(e.getCleavage()));
Assert.assertEquals("NONE", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.NTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
e = mer.getEnzyme("dualTrypCathep");
Assert.assertEquals("dualTrypCathep", e.getTitle());
Assert.assertEquals("DXR", new String(e.getCleavage()));
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof DualEnzyme);
if(e instanceof DualEnzyme) {
DualEnzyme dual = (DualEnzyme)e;
Assert.assertEquals("D", new String(dual.getCleavage(DualEnzyme.NTERMINAL)));
Assert.assertEquals("R", new String(dual.getCleavage(DualEnzyme.CTERMINAL)));
}
e = mer.getEnzyme("DuAlTrypCathep2");
Assert.assertEquals("DuAlTrypCathep2", e.getTitle());
//Assert.assertEquals("", new String(e.getCleavage()));
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.NTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof DualEnzyme);
if(e instanceof DualEnzyme) {
DualEnzyme dual = (DualEnzyme)e;
Assert.assertEquals("DK", new String(dual.getCleavage(DualEnzyme.NTERMINAL)));
Assert.assertEquals("RW", new String(dual.getCleavage(DualEnzyme.CTERMINAL)));
}
e = mer.getEnzyme("ReGeXTrypCathep");
Assert.assertEquals("ReGeXTrypCathep", e.getTitle());
Assert.assertEquals("P", new String(e.getRestrict()));
Assert.assertEquals(Enzyme.CTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof RegExEnzyme);
Assert.assertTrue(e.getClass().getName().equals("com.compomics.util.protein.RegExEnzyme"));
RegExEnzyme regex = (RegExEnzyme)e;
Assert.assertEquals("[KR]", new String(regex.getCleavage()));
e = mer.getEnzyme("regexTrypCathep2");
Assert.assertEquals("regexTrypCathep2", e.getTitle());
Assert.assertTrue(e.getRestrict() == null);
Assert.assertEquals(Enzyme.NTERM, e.getPosition());
Assert.assertEquals(1, e.getMiscleavages());
Assert.assertTrue(e instanceof RegExEnzyme);
Assert.assertTrue(e.getClass().getName().equals("com.compomics.util.protein.RegExEnzyme"));
regex = (RegExEnzyme)e;
Assert.assertEquals("P+R", new String(regex.getCleavage()));
} catch(IOException ioe) {
fail("IOException while testing MascotEnzymeReader creation: '" + ioe.getMessage() + "'.");
}
try {
MascotEnzymeReader mer = new MascotEnzymeReader("ThisFileIsNowhereInTHeFileSystem.grbl");
fail("MascotEnzymeReader constructor did not respond with an IOException when confrontend with fictious file 'ThisFileIsNowhereInTHeFileSystem.grbl'!");
} catch(IOException ioe) {
// Correct throwing of the IOException.
}
}
/**
* This method test the 'return copy of enzyme' functionality when requesting an
* enzyme instance.
*/
public void testCopyOfEnzyme() {
final String inputFile = TestCaseLM.getFullFilePath("enzymes_test.txt").replace("%20", " ");
// Try it for a regular Enzyme.
try {
MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
Enzyme mod = mer.getEnzyme(mer.getEnzymeNames()[0]);
int mc = mod.getMiscleavages();
String cleave = new String(mod.getCleavage());
mod.setMiscleavages(mc+1);
mod.setCleavage(cleave + "H");
// Make sure 'mod' has changed.
Assert.assertEquals(mc+1, mod.getMiscleavages());
Assert.assertEquals(cleave+"H", new String(mod.getCleavage()));
// Now get another copy of the same enzyme, and see if it has retained the original values.
Enzyme original = mer.getEnzyme(mer.getEnzymeNames()[0]);
Assert.assertEquals(mc, original.getMiscleavages());
Assert.assertEquals(cleave, new String(original.getCleavage()));
} catch(IOException ioe) {
fail("IOException while testing whether a received Enzyme is in fact a copy: '" + ioe.getMessage() + "'.");
}
// Try it for a DualEnzyme.
try {
MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
DualEnzyme mod = (DualEnzyme)mer.getEnzyme("dualTrypCathep");
int mc = mod.getMiscleavages();
String ntermCleave = new String(mod.getCleavage(DualEnzyme.NTERMINAL));
String ctermCleave = new String(mod.getCleavage(DualEnzyme.CTERMINAL));
mod.setMiscleavages(mc+1);
mod.setCleavage(ntermCleave + "H", DualEnzyme.NTERMINAL);
mod.setCleavage(ctermCleave + "W", DualEnzyme.CTERMINAL);
// Make sure 'mod' has changed.
Assert.assertEquals(mc+1, mod.getMiscleavages());
Assert.assertEquals(ntermCleave+"H", new String(mod.getCleavage(DualEnzyme.NTERMINAL)));
Assert.assertEquals(ctermCleave+"W", new String(mod.getCleavage(DualEnzyme.CTERMINAL)));
// Now get another copy of the same enzyme, and see if it has retained the original values.
DualEnzyme original = (DualEnzyme)mer.getEnzyme("dualTrypCathep");
Assert.assertEquals(mc, original.getMiscleavages());
Assert.assertEquals(ntermCleave, new String(original.getCleavage(DualEnzyme.NTERMINAL)));
Assert.assertEquals(ctermCleave, new String(original.getCleavage(DualEnzyme.CTERMINAL)));
} catch(IOException ioe) {
fail("IOException while testing whether a received Enzyme is in fact a copy: '" + ioe.getMessage() + "'.");
}
// Try it for a RegExEnzyme.
try {
MascotEnzymeReader mer = new MascotEnzymeReader(inputFile);
RegExEnzyme mod = (RegExEnzyme)mer.getEnzyme("regexTrypCathep2");
int mc = mod.getMiscleavages();
String cleave = new String(mod.getCleavage());
mod.setMiscleavages(mc+1);
mod.setCleavage(cleave + "H");
// Make sure 'mod' has changed.
Assert.assertEquals(mc+1, mod.getMiscleavages());
Assert.assertEquals(cleave+"H", new String(mod.getCleavage()));
// Now get another copy of the same enzyme, and see if it has retained the original values.
Enzyme original = mer.getEnzyme("regexTrypCathep2");
Assert.assertEquals(mc, original.getMiscleavages());
Assert.assertEquals(cleave, new String(original.getCleavage()));
} catch(IOException ioe) {
fail("IOException while testing whether a received Enzyme is in fact a copy: '" + ioe.getMessage() + "'.");
}
}
}