X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FAlignmentTest.java;h=915d860017f613bee10c3af5119bc58e365dbf87;hb=dedd44136e37982fc2c713ae229b5a97a9b0b639;hp=d3525a5f6d87cc51bbab19232d6d030b2c62a34c;hpb=44c7ef22fc8e06469384f0d878683ce0e8615b11;p=jalview.git diff --git a/test/jalview/datamodel/AlignmentTest.java b/test/jalview/datamodel/AlignmentTest.java index d3525a5..915d860 100644 --- a/test/jalview/datamodel/AlignmentTest.java +++ b/test/jalview/datamodel/AlignmentTest.java @@ -27,6 +27,7 @@ import static org.testng.AssertJUnit.assertNull; import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; +import jalview.datamodel.AlignedCodonFrame.SequenceToSequenceMapping; import jalview.io.AppletFormatAdapter; import jalview.io.FormatAdapter; import jalview.util.MapList; @@ -103,6 +104,29 @@ public class AlignmentTest } /** + * assert wrapper: tests all references in the given alignment are consistent + * + * @param alignment + */ + public static void assertAlignmentDatasetRefs(AlignmentI alignment) + { + verifyAlignmentDatasetRefs(alignment, true, null); + } + + /** + * assert wrapper: tests all references in the given alignment are consistent + * + * @param alignment + * @param message + * - prefixed to any assert failed messages + */ + public static void assertAlignmentDatasetRefs(AlignmentI alignment, + String message) + { + verifyAlignmentDatasetRefs(alignment, true, message); + } + + /** * verify sequence and dataset references are properly contained within * dataset * @@ -110,16 +134,19 @@ public class AlignmentTest * - the alignmentI object to verify (either alignment or dataset) * @param raiseAssert * - when set, testng assertions are raised. + * @param message + * - null or a string message to prepend to the assert failed messages. * @return true if alignment references were in order, otherwise false. */ public static boolean verifyAlignmentDatasetRefs(AlignmentI alignment, - boolean raiseAssert) + boolean raiseAssert, String message) { + if (message==null) { message = ""; } if (alignment == null) { if (raiseAssert) { - Assert.fail("Alignment for verification was null."); + Assert.fail(message+"Alignment for verification was null."); } return false; } @@ -134,7 +161,7 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("Alignment contained a sequence who's dataset sequence has a second dataset reference."); + Assert.fail(message+" Alignment contained a sequence who's dataset sequence has a second dataset reference."); } return false; } @@ -142,12 +169,12 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("Alignment contained a sequence who's dataset sequence was not in the dataset."); + Assert.fail(message+" Alignment contained a sequence who's dataset sequence was not in the dataset."); } return false; } } - return verifyAlignmentDatasetRefs(alignment.getDataset(), raiseAssert); + return verifyAlignmentDatasetRefs(alignment.getDataset(), raiseAssert, message); } else { @@ -158,7 +185,7 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("Dataset contained a sequence with non-null dataset reference (ie not a dataset sequence!)"); + Assert.fail(message+" Dataset contained a sequence with non-null dataset reference (ie not a dataset sequence!)"); } return false; } @@ -175,7 +202,7 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("DBRefEntry for sequence in alignment had map to sequence which was not a dataset sequence"); + Assert.fail(message+" DBRefEntry for sequence in alignment had map to sequence which was not a dataset sequence"); } return false; @@ -184,7 +211,7 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("DBRefEntry for sequence in alignment had map to sequence not in dataset"); + Assert.fail(message+" DBRefEntry for sequence in alignment had map to sequence not in dataset"); } return false; } @@ -193,6 +220,50 @@ public class AlignmentTest } } } + // finally, verify codonmappings involve only dataset sequences. + if (alignment.getCodonFrames() != null) + { + for (AlignedCodonFrame alc : alignment.getCodonFrames()) + { + for (SequenceToSequenceMapping ssm : alc.getMappings()) + { + if (ssm.getFromSeq().getDatasetSequence() != null) + { + if (raiseAssert) + { + Assert.fail(message+" CodonFrame-SSM-FromSeq is not a dataset sequence"); + } + return false; + } + if (alignment.findIndex(ssm.getFromSeq()) == -1) + { + + if (raiseAssert) + { + Assert.fail(message+" CodonFrame-SSM-FromSeq is not contained in dataset"); + } + return false; + } + if (ssm.getMapping().getTo().getDatasetSequence() != null) + { + if (raiseAssert) + { + Assert.fail(message+" CodonFrame-SSM-Mapping-ToSeq is not a dataset sequence"); + } + return false; + } + if (alignment.findIndex(ssm.getMapping().getTo()) == -1) + { + + if (raiseAssert) + { + Assert.fail(message+" CodonFrame-SSM-Mapping-ToSeq is not contained in dataset"); + } + return false; + } + } + } + } } return true; // all relationships verified! } @@ -213,7 +284,7 @@ public class AlignmentTest try { - Assert.assertTrue(verifyAlignmentDatasetRefs(al, true), + Assert.assertTrue(verifyAlignmentDatasetRefs(al, true, null), "Valid test alignment failed when raiseAsserts enabled:" + msg); } catch (AssertionError ae) @@ -224,7 +295,7 @@ public class AlignmentTest + msg, ae); } // also check validation passes with asserts disabled - Assert.assertTrue(verifyAlignmentDatasetRefs(al, false), + Assert.assertTrue(verifyAlignmentDatasetRefs(al, false, null), "Valid test alignment failed when raiseAsserts disabled:" + msg); } @@ -232,7 +303,7 @@ public class AlignmentTest { try { - Assert.assertFalse(verifyAlignmentDatasetRefs(al, true)); + Assert.assertFalse(verifyAlignmentDatasetRefs(al, true, null)); Assert.fail("Invalid test alignment passed but no assertion raised when raiseAsserts enabled:" + msg); } catch (AssertionError ae) @@ -240,7 +311,7 @@ public class AlignmentTest // expected behaviour } // also check validation passes with asserts disabled - Assert.assertFalse(verifyAlignmentDatasetRefs(al, false), + Assert.assertFalse(verifyAlignmentDatasetRefs(al, false, null), "Invalid test alignment passed when raiseAsserts disabled:" + msg); } @@ -301,6 +372,35 @@ public class AlignmentTest al, false, "verify passed when a dbref with map to sequence outside of dataset was added"); + // make the verify pass by adding the outsider back in + al.getDataset().addSequence(sqout); + assertVerifyAlignment(al, true, + "verify should have passed after adding dbref->to sequence in to dataset"); + // and now the same for a codon mapping... + SequenceI sqanotherout = new Sequence("sqanotherout", + "aggtutaggcagcagcag"); + + AlignedCodonFrame alc = new AlignedCodonFrame(); + alc.addMap(sqanotherout, sqnew, new MapList(new int[] { 1, 6 }, + new int[] { 1, 18 }, 3, 1)); + + al.addCodonFrame(alc); + Assert.assertEquals(al.getDataset().getCodonFrames().size(), 1); + + assertVerifyAlignment( + al, + false, + "verify passed when alCodonFrame mapping to sequence outside of dataset was added"); + // make the verify pass by adding the outsider back in + al.getDataset().addSequence(sqanotherout); + assertVerifyAlignment( + al, + true, + "verify should have passed once all sequences involved in alCodonFrame were added to dataset"); + al.getDataset().addSequence(sqanotherout); + assertVerifyAlignment(al, false, + "verify should have failed when a sequence was added twice to the dataset"); + } /* * Read in Stockholm format test data including secondary structure