From e7a5ac489e89d1c97ba55c817015945ed208f495 Mon Sep 17 00:00:00 2001 From: gmungoc Date: Mon, 1 Feb 2016 10:18:03 +0000 Subject: [PATCH] JAL-1705 tests added --- test/jalview/ext/ensembl/EnsemblCdnaTest.java | 160 ++++++++++++++++++++ .../ext/ensembl/EnsemblSeqProxyAdapter.java | 36 +++++ 2 files changed, 196 insertions(+) create mode 100644 test/jalview/ext/ensembl/EnsemblCdnaTest.java create mode 100644 test/jalview/ext/ensembl/EnsemblSeqProxyAdapter.java diff --git a/test/jalview/ext/ensembl/EnsemblCdnaTest.java b/test/jalview/ext/ensembl/EnsemblCdnaTest.java new file mode 100644 index 0000000..30bc81b --- /dev/null +++ b/test/jalview/ext/ensembl/EnsemblCdnaTest.java @@ -0,0 +1,160 @@ +package jalview.ext.ensembl; + +import static org.testng.AssertJUnit.assertEquals; +import static org.testng.AssertJUnit.assertNull; + +import jalview.datamodel.SequenceDummy; +import jalview.datamodel.SequenceFeature; +import jalview.datamodel.SequenceI; +import jalview.io.gff.SequenceOntologyFactory; +import jalview.io.gff.SequenceOntologyLite; +import jalview.util.MapList; + +import java.util.List; + +import org.testng.annotations.Test; + +public class EnsemblCdnaTest +{ + /** + * Test that the cdna part of genomic sequence is correctly identified by + * 'exon' features (or subtypes) - reverse strand case. + */ + @Test(groups = "Functional") + public void getGenomicRangesFromFeatures_reverseStrand() + { + EnsemblCdna testee = new EnsemblCdna(); + SequenceI genomic = new SequenceDummy("chr7"); + genomic.setStart(10000); + genomic.setEnd(50000); + String transcriptId = "ABC123"; + + // exon at (start+10000) length 501 + SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f, + null); + sf.setValue("Parent", "transcript:" + transcriptId); + sf.setStrand("-"); + genomic.addSequenceFeature(sf); + + // exon (sub-type) at (start + exon_variant) length 101 + sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null); + sf.setValue("Parent", "transcript:" + transcriptId); + sf.setStrand("-"); + genomic.addSequenceFeature(sf); + + // exon belonging to a different transcript doesn't count + sf = new SequenceFeature("exon", "", 11500, 12600, 0f, null); + sf.setValue("Parent", "transcript:anotherOne"); + genomic.addSequenceFeature(sf); + + // transcript feature doesn't count + sf = new SequenceFeature("transcript", "", 10000, 50000, 0f, null); + genomic.addSequenceFeature(sf); + + SequenceOntologyFactory.setInstance(new SequenceOntologyLite()); + + MapList ranges = testee.getGenomicRangesFromFeatures(genomic, + transcriptId, 23); + List fromRanges = ranges.getFromRanges(); + assertEquals(2, fromRanges.size()); + + /* + * from ranges should be sorted by start order descending + * and hold mappings from reverse strand sense + */ + assertEquals(20500, fromRanges.get(0)[0]); + assertEquals(20000, fromRanges.get(0)[1]); + assertEquals(10600, fromRanges.get(1)[0]); + assertEquals(10500, fromRanges.get(1)[1]); + // to range should start from given start numbering + List toRanges = ranges.getToRanges(); + assertEquals(1, toRanges.size()); + assertEquals(23, toRanges.get(0)[0]); + assertEquals(624, toRanges.get(0)[1]); + } + + /** + * Test that the cdna part of genomic sequence is correctly identified by + * 'exon' features (or subtypes). + */ + @Test(groups = "Functional") + public void getGenomicRangesFromFeatures() + { + EnsemblCdna testee = new EnsemblCdna(); + SequenceI genomic = new SequenceDummy("chr7"); + genomic.setStart(10000); + genomic.setEnd(50000); + String transcriptId = "ABC123"; + + // exon at (start+10000) length 501 + SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f, + null); + sf.setValue("Parent", "transcript:" + transcriptId); + sf.setStrand("+"); + genomic.addSequenceFeature(sf); + + // exon (sub-type) at (start + exon_variant) length 101 + sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null); + sf.setValue("Parent", "transcript:" + transcriptId); + sf.setStrand("+"); + genomic.addSequenceFeature(sf); + + // exon belonging to a different transcript doesn't count + sf = new SequenceFeature("exon", "", 11500, 12600, 0f, null); + sf.setValue("Parent", "transcript:anotherOne"); + genomic.addSequenceFeature(sf); + + // transcript feature doesn't count + sf = new SequenceFeature("transcript", "", 10000, 50000, 0f, null); + sf.setStrand("-"); // weird but ignored + genomic.addSequenceFeature(sf); + + SequenceOntologyFactory.setInstance(new SequenceOntologyLite()); + + MapList ranges = testee.getGenomicRangesFromFeatures(genomic, + transcriptId, 23); + List fromRanges = ranges.getFromRanges(); + assertEquals(2, fromRanges.size()); + // from ranges should be sorted by start order + assertEquals(10500, fromRanges.get(0)[0]); + assertEquals(10600, fromRanges.get(0)[1]); + assertEquals(20000, fromRanges.get(1)[0]); + assertEquals(20500, fromRanges.get(1)[1]); + // to range should start from given start numbering + List toRanges = ranges.getToRanges(); + assertEquals(1, toRanges.size()); + assertEquals(23, toRanges.get(0)[0]); + assertEquals(624, toRanges.get(0)[1]); + } + + /** + * The method under test should give up and return null if both forward and + * reverse strands are present in the features of interest + */ + @Test(groups = "Functional") + public void getGenomicRangesFromFeatures_mixedStrand() + { + EnsemblCdna testee = new EnsemblCdna(); + SequenceI genomic = new SequenceDummy("chr7"); + genomic.setStart(10000); + genomic.setEnd(50000); + String transcriptId = "ABC123"; + + SequenceFeature sf = new SequenceFeature("exon", "", 20000, 20500, 0f, + null); + sf.setValue("Parent", "transcript:" + transcriptId); + sf.setStrand("-"); + genomic.addSequenceFeature(sf); + + sf = new SequenceFeature("coding_exon", "", 10500, 10600, 0f, null); + sf.setValue("Parent", "transcript:" + transcriptId); + sf.setStrand("+"); + genomic.addSequenceFeature(sf); + + SequenceOntologyFactory.setInstance(new SequenceOntologyLite()); + + MapList ranges = testee.getGenomicRangesFromFeatures(genomic, + transcriptId, 23); + assertNull(ranges); + } +} diff --git a/test/jalview/ext/ensembl/EnsemblSeqProxyAdapter.java b/test/jalview/ext/ensembl/EnsemblSeqProxyAdapter.java new file mode 100644 index 0000000..7077eac --- /dev/null +++ b/test/jalview/ext/ensembl/EnsemblSeqProxyAdapter.java @@ -0,0 +1,36 @@ +package jalview.ext.ensembl; + +import jalview.datamodel.SequenceFeature; + +/** + * A convenience class to simplify writing unit tests (pending Mockito or + * similar?) + */ +public class EnsemblSeqProxyAdapter extends EnsemblSeqProxy +{ + + @Override + public String getDbName() + { + return null; + } + + @Override + protected EnsemblFeatureType[] getFeaturesToFetch() + { + return null; + } + + @Override + protected EnsemblSeqType getSourceEnsemblType() + { + return null; + } + + @Override + protected boolean identifiesSequence(SequenceFeature sf, String accId) + { + return false; + } + +} -- 1.7.10.2