From d04ceb9a223fe6eeb504d23f7bc85c519d75a255 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Tue, 24 Oct 2017 13:54:42 +0100 Subject: [PATCH] JAL-2541 assert that alignments sharing references to dataset sequences are unaffected by cuts to a sequence in an alignment --- test/jalview/commands/EditCommandTest.java | 62 +++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/test/jalview/commands/EditCommandTest.java b/test/jalview/commands/EditCommandTest.java index dbc659e..63ceebe 100644 --- a/test/jalview/commands/EditCommandTest.java +++ b/test/jalview/commands/EditCommandTest.java @@ -752,6 +752,14 @@ public class EditCommandTest seq0.setEnd(end); AlignmentI alignment = new Alignment(new SequenceI[] { seq0 }); alignment.setDataset(null); + /* + * create a new alignment with shared dataset sequence + */ + AlignmentI copy = new Alignment( + new SequenceI[] + { alignment.getDataset().getSequenceAt(0).deriveSequence() }); + SequenceI copySeq0 = copy.getSequenceAt(0); + for (int from = start; from <= end; from++) { for (int to = from; to <= end; to++) @@ -767,7 +775,8 @@ public class EditCommandTest // sanity check List sfs = seq0.getSequenceFeatures(); assertEquals(func(5), sfs.size()); - + assertEquals(sfs, copySeq0.getSequenceFeatures()); + String copySequenceFeatures = copySeq0.getSequenceFeatures().toString(); /* * now perform all possible cuts of subranges of columns 1-5 * and validate the resulting remaining sequence features! @@ -785,6 +794,18 @@ public class EditCommandTest verifyCut(seq0, from, to, msg, start); /* + * verify copy alignment dataset sequence unaffected + */ + assertEquals("Original dataset sequence was modified", + copySequenceFeatures, + copySeq0.getSequenceFeatures().toString()); + /* + * verify a new dataset sequence has appeared + */ + assertEquals("Wrong Dataset size after cut", 2, + alignment.getDataset().getHeight()); + + /* * undo and verify all restored */ AlignmentI[] views = new AlignmentI[] { alignment }; @@ -794,15 +815,54 @@ public class EditCommandTest verifyUndo(from, to, sfs); /* + * verify copy alignment dataset sequence still unaffected + */ + assertEquals("Original dataset sequence was modified", + copySequenceFeatures, + copySeq0.getSequenceFeatures().toString()); + + /* + * verify dataset sequence has shrunk + */ + assertEquals("Wrong Dataset size after cut", 1, + alignment.getDataset().getHeight()); + + /* * redo and verify */ ec.doCommand(views); verifyCut(seq0, from, to, msg, start); /* + * verify copy alignment dataset sequence unaffected + */ + assertEquals("Original dataset sequence was modified", + copySequenceFeatures, + copySeq0.getSequenceFeatures().toString()); + + /* + * verify a new dataset sequence has appeared again + */ + assertEquals("Wrong Dataset size after cut", 2, + alignment.getDataset().getHeight()); + + /* * undo ready for next cut */ ec.undoCommand(views); + + /* + * final verify that copy alignment dataset sequence is still unaffected + */ + assertEquals("Original dataset sequence was modified", + copySequenceFeatures, + copySeq0.getSequenceFeatures().toString()); + /* + * and that dataset sequence has shrunk + */ + assertEquals("Wrong Dataset size after cut", 1, + alignment.getDataset().getHeight()); + } } } -- 1.7.10.2