X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fdatamodel%2FAlignmentTest.java;h=7ad9436c858f8ef2fed092007d4d26a6550a73d8;hb=a4da7308cd43dcd4bddd773453007c916735d68a;hp=9434569ddf729d78cae60eb540fe7ce6b2a47aaa;hpb=357e9fc6a9c7598d2dfdcab1582bef31f964e2d6;p=jalview.git diff --git a/test/jalview/datamodel/AlignmentTest.java b/test/jalview/datamodel/AlignmentTest.java index 9434569..7ad9436 100644 --- a/test/jalview/datamodel/AlignmentTest.java +++ b/test/jalview/datamodel/AlignmentTest.java @@ -104,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 * @@ -111,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; } @@ -135,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; } @@ -143,23 +169,37 @@ 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 { + int dsp = -1; // verify all dataset sequences for (SequenceI seqds : alignment.getSequences()) { + dsp++; if (seqds.getDatasetSequence() != null) { 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; + } + int foundp = alignment.findIndex(seqds); + if (foundp != dsp) + { + if (raiseAssert) + { + Assert.fail(message + + " Dataset sequence array contains a reference at " + + dsp + " to a sequence first seen at " + foundp + " (" + + seqds.toString() + ")"); } return false; } @@ -176,7 +216,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; @@ -185,7 +225,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; } @@ -205,7 +245,7 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("CodonFrame-SSM-FromSeq is not a dataset sequence"); + Assert.fail(message+" CodonFrame-SSM-FromSeq is not a dataset sequence"); } return false; } @@ -214,7 +254,7 @@ public class AlignmentTest if (raiseAssert) { - Assert.fail("CodonFrame-SSM-FromSeq is not contained in dataset"); + Assert.fail(message+" CodonFrame-SSM-FromSeq is not contained in dataset"); } return false; } @@ -222,7 +262,7 @@ public class AlignmentTest { if (raiseAssert) { - Assert.fail("CodonFrame-SSM-Mapping-ToSeq is not a dataset sequence"); + Assert.fail(message+" CodonFrame-SSM-Mapping-ToSeq is not a dataset sequence"); } return false; } @@ -231,7 +271,7 @@ public class AlignmentTest if (raiseAssert) { - Assert.fail("CodonFrame-SSM-Mapping-ToSeq is not contained in dataset"); + Assert.fail(message+" CodonFrame-SSM-Mapping-ToSeq is not contained in dataset"); } return false; } @@ -258,7 +298,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) @@ -269,24 +309,29 @@ public class AlignmentTest + msg, ae); } // also check validation passes with asserts disabled - Assert.assertTrue(verifyAlignmentDatasetRefs(al, false), - "Valid test alignment failed when raiseAsserts disabled:" + Assert.assertTrue(verifyAlignmentDatasetRefs(al, false, null), + "Valid test alignment tested false when raiseAsserts disabled:" + msg); } else { + boolean assertRaised = false; try { - Assert.assertFalse(verifyAlignmentDatasetRefs(al, true)); - Assert.fail("Invalid test alignment passed but no assertion raised when raiseAsserts enabled:" - + msg); + verifyAlignmentDatasetRefs(al, true, null); } catch (AssertionError ae) { // expected behaviour + assertRaised = true; + } + if (!assertRaised) + { + Assert.fail("Invalid test alignment passed when raiseAsserts enabled:" + + msg); } // also check validation passes with asserts disabled - Assert.assertFalse(verifyAlignmentDatasetRefs(al, false), - "Invalid test alignment passed when raiseAsserts disabled:" + Assert.assertFalse(verifyAlignmentDatasetRefs(al, false, null), + "Invalid test alignment tested true when raiseAsserts disabled:" + msg); } } @@ -371,7 +416,146 @@ public class AlignmentTest 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"); + al.getDataset().deleteSequence(sqanotherout); + assertVerifyAlignment(al, true, + "verify should have passed after duplicate entry for sequence was removed"); + } + + /** + * checks that the sequence data for an alignment's dataset is non-redundant. + * Fails if there are sequences with same id, sequence, start, and. + */ + + public static void assertDatasetIsNormalised(AlignmentI al) + { + assertDatasetIsNormalised(al, null); + } + + /** + * checks that the sequence data for an alignment's dataset is non-redundant. + * Fails if there are sequences with same id, sequence, start, and. + * + * @param al + * - alignment to verify + * @param message + * - null or message prepended to exception message. + */ + public static void assertDatasetIsNormalised(AlignmentI al, String message) + { + if (al.getDataset()!=null) + { + assertDatasetIsNormalised(al.getDataset(), message); + return; + } + /* + * look for pairs of sequences with same ID, start, end, and sequence + */ + List seqSet = al.getSequences(); + for (int p=0;p