X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FAlignedCodonFrameTest.java;h=337ac1a8bbc0463ae66100f7ac72da1016ea7fcf;hp=0cfc38035d9034efd7a9424fc38f652775084fb2;hb=b59e6ecc36fb98f4285213a685d0546e98ebd556;hpb=7c1fb6e8bb8c267d38b15f0b80c9a2b5e53cde4b diff --git a/test/jalview/datamodel/AlignedCodonFrameTest.java b/test/jalview/datamodel/AlignedCodonFrameTest.java index 0cfc380..337ac1a 100644 --- a/test/jalview/datamodel/AlignedCodonFrameTest.java +++ b/test/jalview/datamodel/AlignedCodonFrameTest.java @@ -648,4 +648,67 @@ public class AlignedCodonFrameTest expected.addResult(dna1.getDatasetSequence(), 17, 18); assertEquals(sr, expected); } + + @Test(groups = { "Functional" }) + public void testGetCoveringCodonMapping() + { + SequenceI dna = new Sequence("dna/10-30", "acttcaATGGCGGACtaattt"); + // CDS sequence with its own dataset sequence (JAL-3763) + SequenceI cds = new Sequence("cds/1-9", "-A--TGGC-GGAC"); + cds.createDatasetSequence(); + SequenceI pep = new Sequence("pep/1-3", "MAD"); + + /* + * with null argument or no mappings + */ + AlignedCodonFrame acf = new AlignedCodonFrame(); + assertNull(acf.getCoveringCodonMapping(null)); + assertNull(acf.getCoveringCodonMapping(dna)); + assertNull(acf.getCoveringCodonMapping(pep)); + + /* + * with a non-covering mapping e.g. overlapping exon + */ + MapList map = new MapList(new int[] { 16, 18 }, new int[] { + 1, 1 }, 3, 1); + acf.addMap(dna, pep, map); + assertNull(acf.getCoveringCodonMapping(dna)); + assertNull(acf.getCoveringCodonMapping(pep)); + + acf = new AlignedCodonFrame(); + MapList map2 = new MapList(new int[] { 13, 18 }, new int[] { + 2, 2 }, 3, 1); + acf.addMap(dna, pep, map2); + assertNull(acf.getCoveringCodonMapping(dna)); + assertNull(acf.getCoveringCodonMapping(pep)); + + /* + * with a covering mapping from CDS (dataset) to protein + */ + acf = new AlignedCodonFrame(); + MapList map3 = new MapList(new int[] { 1, 9 }, new int[] { + 1, 3 }, 3, 1); + acf.addMap(cds.getDatasetSequence(), pep, map3); + assertNull(acf.getCoveringCodonMapping(dna)); + SequenceToSequenceMapping mapping = acf.getCoveringCodonMapping(pep); + assertNotNull(mapping); + SequenceToSequenceMapping mapping2 = acf.getCoveringCodonMapping(cds.getDatasetSequence()); + assertSame(mapping, mapping2); + + /* + * with a mapping that extends to stop codon + * (EMBL CDS location often includes the stop codon) + * - getCoveringCodonMapping is lenient (doesn't require exact length match) + */ + SequenceI cds2 = new Sequence("cds/1-12", "-A--TGGC-GGACTAA"); + cds2.createDatasetSequence(); + acf = new AlignedCodonFrame(); + MapList map4 = new MapList(new int[] { 1, 12 }, new int[] { + 1, 3 }, 3, 1); + acf.addMap(cds2, pep, map4); + mapping = acf.getCoveringCodonMapping(cds2.getDatasetSequence()); + assertNotNull(mapping); + mapping2 = acf.getCoveringCodonMapping(pep); + assertSame(mapping, mapping2); + } }