/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*/
package org.biojava.nbio.genome;
import junit.framework.TestCase;
import junitx.framework.FileAssert;
import org.biojava.nbio.genome.parsers.gff.FeatureList;
import org.biojava.nbio.genome.parsers.gff.GFF3Reader;
import org.biojava.nbio.genome.parsers.gff.GFF3Writer;
import org.biojava.nbio.core.sequence.ChromosomeSequence;
import org.biojava.nbio.core.sequence.GeneSequence;
import org.biojava.nbio.core.sequence.ProteinSequence;
import org.biojava.nbio.core.sequence.io.FastaWriterHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Collection;
import java.util.LinkedHashMap;
/**
*
* @author Scooter Willis <willishf at gmail dot com>
*/
public class GeneFeatureHelperTest extends TestCase {
private static final Logger logger = LoggerFactory.getLogger(GeneFeatureHelperTest.class);
public GeneFeatureHelperTest(String testName) {
super(testName);
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
}
public void testZeroLocation() throws Exception {
@SuppressWarnings("unused")
FeatureList listGenes = GFF3Reader.read("src/test/resources/amphimedon.gff3");
}
/**
* Test of loadFastaAddGeneFeaturesFromUpperCaseExonFastaFile method, of class GeneFeatureHelper.
*
* @throws Exception
*/
public void testLoadFastaAddGeneFeaturesFromUpperCaseExonFastaFile() throws Exception {
// logger.info("loadFastaAddGeneFeaturesFromUpperCaseExonFastaFile");
File fastaSequenceFile = new File("src/test/resources/volvox_all.fna");
File uppercaseFastaFile = new File("src/test/resources/volvox_all_genes_exon_uppercase.fna");
boolean throwExceptionGeneNotFound = false;
LinkedHashMap<String, ChromosomeSequence> chromosomeSequenceHashMap = GeneFeatureHelper
.loadFastaAddGeneFeaturesFromUpperCaseExonFastaFile(fastaSequenceFile, uppercaseFastaFile,
throwExceptionGeneNotFound);
File tmp = File.createTempFile("volvox_all_genes_exon_uppercase", "gff3");
tmp.deleteOnExit();
FileOutputStream fo = new FileOutputStream(tmp);
GFF3Writer gff3Writer = new GFF3Writer();
gff3Writer.write(fo, chromosomeSequenceHashMap);
fo.close();
}
/**
* Test of outputFastaSequenceLengthGFF3 method, of class GeneFeatureHelper.
*/
public void testOutputFastaSequenceLengthGFF3() throws Exception {
// logger.info("outputFastaSequenceLengthGFF3");
File fastaSequenceFile = new File("src/test/resources/volvox_all.fna");
File gffFile = File.createTempFile("volvox_length", "gff3");
gffFile.deleteOnExit();
GeneFeatureHelper.outputFastaSequenceLengthGFF3(fastaSequenceFile, gffFile);
FileAssert.assertEquals("volvox_length.gff3 and volvox_length_output.gff3 are not equal", gffFile,
new File("src/test/resources/volvox_length_reference.gff3"));
}
/**
* Test if the note from a gff3 file is added to the gene sequence
*
* @throws Exception
*/
public void testAddGFF3Note() throws Exception {
LinkedHashMap<String, ChromosomeSequence> chromosomeSequenceList = GeneFeatureHelper
.loadFastaAddGeneFeaturesFromGmodGFF3(new File("src/test/resources/volvox_all.fna"), new File(
"src/test/resources/volvox.gff3"), false);
ChromosomeSequence ctgASequence = chromosomeSequenceList.get("ctgA");
GeneSequence edenGeneSequence = ctgASequence.getGene("EDEN");
logger.info("Note {}", edenGeneSequence.getNotesList());
}
/**
* Test of getProteinSequences method, of class GeneFeatureHelper. Used gff3 file that was modified from the volvox
* gff version. Do not have the reference protein that is generated from each CDS record so subject to being
* incorrect without a validated test case. Could not find anyone providing a gff3 test case with expected protein
* output.
*/
public void testGetProteinSequences() throws Exception {
LinkedHashMap<String, ChromosomeSequence> chromosomeSequenceList = GeneFeatureHelper
.loadFastaAddGeneFeaturesFromGmodGFF3(new File("src/test/resources/volvox_all.fna"), new File(
"src/test/resources/volvox.gff3"), false);
LinkedHashMap<String, ProteinSequence> proteinSequenceList = GeneFeatureHelper
.getProteinSequences(chromosomeSequenceList.values());
// for(ProteinSequence proteinSequence : proteinSequenceList.values()){
// logger.info("Output={}", proteinSequence.getSequenceAsString());
// }
File tmp = File.createTempFile("volvox_all", "faa");
tmp.deleteOnExit();
FastaWriterHelper.writeProteinSequence(tmp, proteinSequenceList.values());
FileAssert.assertEquals("volvox_all_reference.faa and volvox_all.faa are not equal", new File(
"src/test/resources/volvox_all_reference.faa"), tmp);
}
/**
* Test of getGeneSequences method, of class GeneFeatureHelper.
*/
public void testGetGeneSequences() throws Exception {
// logger.info("getGeneSequences");
LinkedHashMap<String, ChromosomeSequence> chromosomeSequenceList = GeneFeatureHelper
.loadFastaAddGeneFeaturesFromGmodGFF3(new File("src/test/resources/volvox_all.fna"), new File(
"src/test/resources/volvox.gff3"), true);
LinkedHashMap<String, GeneSequence> geneSequenceHashMap = GeneFeatureHelper
.getGeneSequences(chromosomeSequenceList.values());
Collection<GeneSequence> geneSequences = geneSequenceHashMap.values();
File tmp = File.createTempFile("volvox_all_genes_exon_uppercase", "fna");
tmp.deleteOnExit();
FastaWriterHelper.writeGeneSequence(tmp, geneSequences, true);
}
}