JAL-2541 assert that alignments sharing references to dataset sequences are unaffecte...
authorJim Procter <jprocter@issues.jalview.org>
Tue, 24 Oct 2017 12:54:42 +0000 (13:54 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 24 Oct 2017 12:54:42 +0000 (13:54 +0100)
test/jalview/commands/EditCommandTest.java

index dbc659e..63ceebe 100644 (file)
@@ -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<SequenceFeature> 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());
+
       }
     }
   }