/*
* 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: 15:28:41
*/
package com.compomics.util.test.protein;
import com.compomics.util.junit.TestCaseLM;
import com.compomics.util.protein.AASequenceImpl;
import com.compomics.util.protein.Header;
import com.compomics.util.protein.Protein;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.log4j.Logger;
import java.io.*;
/*
* CVS information:
*
* $Revision: 1.3 $
* $Date: 2007/07/06 09:41:54 $
*/
/**
* This class implements the test scenario for the Protein class.
*
* @author Lennart Martens
* @see com.compomics.util.protein.Protein
*/
public class TestProtein extends TestCase {
// Class specific log4j logger for TestProtein instances.
Logger logger = Logger.getLogger(TestProtein.class);
public TestProtein() {
this("The test scenario for the Protein class.");
}
public TestProtein(String aName) {
super(aName);
}
/**
* This method test the different ways of creating a Protein instance.
*/
public void testConstruction() {
final String sequence = "LENNARTMARTENS";
final String header = ">sw|O95229|ZWIN_HUMAN ZW10 interactor (ZW10 interacting protein-1) (Zwint-1).";
final String fasta = header + "\n" + sequence;
final Header head = Header.parseFromFASTA(header);
final AASequenceImpl seq = new AASequenceImpl(sequence);
// First without header, just a sequence.
Protein p = new Protein(seq);
Assert.assertTrue(p.getHeader() == null);
Assert.assertEquals(seq, p.getSequence());
p = new Protein(null, seq);
Assert.assertTrue(p.getHeader() == null);
Assert.assertEquals(seq, p.getSequence());
p = new Protein(null, sequence);
Assert.assertTrue(p.getHeader() == null);
Assert.assertEquals(sequence, p.getSequence().getSequence());
// Now with a Header.
p = new Protein(head, seq);
Assert.assertEquals(head, p.getHeader());
Assert.assertEquals(seq, p.getSequence());
p = new Protein(header, sequence);
Assert.assertEquals(header, p.getHeader().toString());
Assert.assertEquals(sequence, p.getSequence().getSequence());
p = new Protein(fasta);
Assert.assertEquals(header, p.getHeader().toString());
Assert.assertEquals(sequence, p.getSequence().getSequence());
// Now with header and truncation flag.
p = new Protein(head, seq, false, 0);
Assert.assertEquals(head, p.getHeader());
Assert.assertEquals(seq, p.getSequence());
Assert.assertFalse(p.isTruncated());
p = new Protein(header, sequence, true, Protein.NTERMTRUNC);
Assert.assertEquals(header, p.getHeader().toString());
Assert.assertEquals(sequence, p.getSequence().getSequence());
Assert.assertTrue(p.isTruncated());
Assert.assertEquals(Protein.NTERMTRUNC, p.getTruncationPosition());
p = new Protein(fasta, false, 0);
Assert.assertEquals(header, p.getHeader().toString());
Assert.assertEquals(sequence, p.getSequence().getSequence());
Assert.assertFalse(p.isTruncated());
}
/**
* This method test the N-terminal truncation of a protein.
*/
public void testNtermTruncation() {
final String sequence = "LENNARTMARTENS";
final String header = ">sw|O95229|ZWIN_HUMAN ZW10 interactor (ZW10 interacting protein-1) (Zwint-1).";
final String fasta = header + "\n" + sequence;
final Header testHeader = Header.parseFromFASTA(header);
// Create Protein instance.
Protein p = new Protein(fasta);
Assert.assertFalse(p.isTruncated());
// Truncate to 10 N-terminal residus.
p = p.getNTermTruncatedProtein(10);
testHeader.setLocation(1, 10);
Assert.assertTrue(p.isTruncated());
Assert.assertEquals(Protein.NTERMTRUNC, p.getTruncationPosition());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(0,10), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(1, p.getHeader().getStartLocation());
Assert.assertEquals(10, p.getHeader().getEndLocation());
// Truncate to same size.
p = p.getNTermTruncatedProtein(10);
Assert.assertFalse(p.isTruncated());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(0,10), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(1, p.getHeader().getStartLocation());
Assert.assertEquals(10, p.getHeader().getEndLocation());
// Truncate to a size that's too large.
p = p.getNTermTruncatedProtein(100);
Assert.assertFalse(p.isTruncated());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(0,10), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(1, p.getHeader().getStartLocation());
Assert.assertEquals(10, p.getHeader().getEndLocation());
// Truncate a Protein with a location set.
p = new Protein(fasta);
testHeader.setLocation(100, 109);
p.getHeader().setLocation(100, 113);
p = p.getNTermTruncatedProtein(10);
Assert.assertTrue(p.isTruncated());
Assert.assertEquals(Protein.NTERMTRUNC, p.getTruncationPosition());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(0,10), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(100, p.getHeader().getStartLocation());
Assert.assertEquals(109, p.getHeader().getEndLocation());
}
/**
* This method test the C-terminal truncation of a protein.
*/
public void testCtermTruncation() {
final String sequence = "LENNARTMARTENS";
final String header = ">sw|O95229|ZWIN_HUMAN ZW10 interactor (ZW10 interacting protein-1) (Zwint-1).";
final String fasta = header + "\n" + sequence;
final Header testHeader = Header.parseFromFASTA(header);
// Create the Protein instance.
Protein p = new Protein(fasta);
Assert.assertFalse(p.isTruncated());
// Regular truncation.
p = p.getCTermTruncatedProtein(10);
testHeader.setLocation(5, 14);
Assert.assertTrue(p.isTruncated());
Assert.assertEquals(Protein.CTERMTRUNC, p.getTruncationPosition());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(4,14), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(5, p.getHeader().getStartLocation());
Assert.assertEquals(14, p.getHeader().getEndLocation());
// Truncate to same size.
p = p.getCTermTruncatedProtein(10);
Assert.assertFalse(p.isTruncated());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(4,14), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(5, p.getHeader().getStartLocation());
Assert.assertEquals(14, p.getHeader().getEndLocation());
// Truncate to a size that's too large.
p = p.getCTermTruncatedProtein(100);
Assert.assertFalse(p.isTruncated());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(4,14), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(5, p.getHeader().getStartLocation());
Assert.assertEquals(14, p.getHeader().getEndLocation());
// Truncate a Protein instance with a location set.
p = new Protein(fasta);
p.getHeader().setLocation(100, 113);
testHeader.setLocation(104, 113);
p = p.getCTermTruncatedProtein(10);
Assert.assertTrue(p.isTruncated());
Assert.assertEquals(Protein.CTERMTRUNC, p.getTruncationPosition());
Assert.assertEquals(testHeader.toString(), p.getHeader().toString());
Assert.assertEquals(sequence.substring(4,14), p.getSequence().getSequence());
Assert.assertEquals(10, p.getSequence().getLength());
Assert.assertEquals(104, p.getHeader().getStartLocation());
Assert.assertEquals(113, p.getHeader().getEndLocation());
}
/**
* This method test the reporting by the Protein about its length.
*/
public void testLength() {
Protein p = new Protein(null, "LENNARTMARTENS");
Assert.assertTrue(p.getLength() == p.getSequence().getLength());
}
/**
* This method test the reporting by the Protein about its mass.
*/
public void testMass() {
Protein p = new Protein(null, "LENNARTMARTENS");
Assert.assertEquals(p.getMass(), p.getSequence().getMass(), 1e-15);
}
/**
* This method test the FASTA printing behaviour.
*/
public void testPrintToFASTAFile() {
final String inputFile = "fastaFile.fas";
final String input = TestCaseLM.getFullFilePath(inputFile).replace("%20", " ");
try {
Protein p1 = new Protein(">sw|O95229|ZWIN_HUMAN ZW10 interactor (ZW10 interacting protein-1) (Zwint-1).\nMAAPRPPPAISVSVSAPAFYAPQKKFAPVVAPKPKVNPFRPGDSEPPVAAGAQRAQMGRVGEIPPPPPEDFPLPPPPLIGEGDDSEGALGGAFPPPPPPMIEEPFPPAPLEEDIFPSPPPPLEEEGGPEAPTQLPPQPREKVCSIDLEIDSLSSLLDDMTKNDPFKARVSSGYVPPPVATPFVPKPSTKPAPGGTAPLPPWKTPSSSQPPPQPQRKPQVQLHVQPQAKPHVQPQPVSSANTQPRGPLSQAPTPAPKFAPVAPKFTPVVSKFSPGAPSGPGPQPIKKWCLRMPPSSVSTGSPQPPSFTYAQQKEKPLVQEKQHPQPPPAQNQNQVRSPGGPGPLTLKEVEELEQLTQQLMQDMEHPQRQSVAVNESCGKCNQPLARAQPAVRALGQLFHITCFTCHQCQQQLQGQQFYSLEGAPYCEGCYTDTLEKCNTCGQPITDRMLRATGKAYHPQCFTCVVCACPLEGTSFIVDQANQPHSVPDYHKQYAPRCSVCSEPIMPEPGRDETVRVVALDKNFHMKCYKCEDCGKPLSIEADDNGCFPLDGHVLCRKCHSARAQT");
Protein p2 = new Protein(">sw|O95230|ZWIN_HUMAN ZW10 interactor (ZW10 interacting protein-2) (Zwint-2).\nMAAPRPPPAISVSVGAPAFYAPQKKFAPVVAPKPKVNPFR");
PipedReader pr = new PipedReader();
PrintWriter out = new PrintWriter(new PipedWriter(pr));
p1.writeToFASTAFile(out);
p2.writeToFASTAFile(out);
out.flush();
out.close();
BufferedReader br = new BufferedReader(pr);
BufferedReader br2 = new BufferedReader(new FileReader(input));
String line1 = null;
String line2 = null;
while(((line1 = br.readLine()) != null) & ((line2 = br2.readLine()) != null)) {
Assert.assertEquals(line1, line2);
}
// Both should have read an equal amount of lines.
Assert.assertTrue(line1 == null);
Assert.assertTrue(line2 == null);
br.close();
br2.close();
} catch(IOException ioe) {
fail("IOException while testing the writeToFASTAFile method: " + ioe.getMessage() + ".");
}
}
/**
* This method test the equals method.
*/
public void testEquals() {
Protein p1 = new Protein("Test Protein 1.\nLENNARTMARTENS");
Protein p2 = new Protein("Test Protein 1.\nLENNARTMARTENS");
Protein p3 = new Protein("Test Protein 1.\nKRISGEVAERT");
Protein p4 = new Protein("Test Protein 2.\nLENNARTMARTENS");
Assert.assertTrue(p1.equals(p2));
Assert.assertTrue(p2.equals(p1));
Assert.assertFalse(p2.equals(p3));
Assert.assertFalse(p3.equals(p2));
Assert.assertFalse(p1.equals(p3));
Assert.assertFalse(p3.equals(p1));
Assert.assertFalse(p2.equals(p4));
Assert.assertFalse(p4.equals(p2));
Assert.assertFalse(p1.equals(p4));
Assert.assertFalse(p4.equals(p1));
Assert.assertFalse(p4.equals(p3));
Assert.assertFalse(p3.equals(p4));
p3 = p1.getNTermTruncatedProtein(10);
Protein p5 = p2.getNTermTruncatedProtein(11);
Assert.assertFalse(p3.equals(p5));
Assert.assertFalse(p5.equals(p3));
p1.getHeader().setLocation(10, 24);
Protein p6 = new Protein(p2.getHeader().getFullHeaderWithAddenda(), p2.getSequence().getSequence());
Protein p7 = new Protein(p2.getHeader().getFullHeaderWithAddenda(), p2.getSequence().getSequence());
p2.getHeader().setLocation(10, 24);
p6.getHeader().setLocation(11, 24);
p7.getHeader().setLocation(10, 23);
Assert.assertTrue(p1.equals(p2));
Assert.assertTrue(p2.equals(p1));
Assert.assertFalse(p1.equals(p6));
Assert.assertFalse(p6.equals(p1));
Assert.assertFalse(p1.equals(p7));
Assert.assertFalse(p7.equals(p1));
Assert.assertFalse(p2.equals(p6));
Assert.assertFalse(p6.equals(p2));
Assert.assertFalse(p2.equals(p7));
Assert.assertFalse(p7.equals(p2));
}
}