Merge branch 'bug/JAL-3120restoreFeatureColour' into merge/JAL-3120
[jalview.git] / test / jalview / commands / EditCommandTest.java
index a0c2ccf..2160657 100644 (file)
@@ -153,18 +153,23 @@ public class EditCommandTest
   }
 
   /**
-   * Test a Paste action, where this adds sequences to an alignment.
+   * Test a Paste action, followed by Undo and Redo
    */
-  @Test(groups = { "Functional" }, enabled = true)
-  // TODO fix so it works
-  public void testPaste_addToAlignment()
+  @Test(groups = { "Functional" }, enabled = false)
+  public void testPaste_undo_redo()
   {
+    // TODO code this test properly, bearing in mind that:
+    // Paste action requires something on the clipboard (Cut/Copy)
+    // - EditCommand.paste doesn't add sequences to the alignment
+    // ... that is done in AlignFrame.paste()
+    // ... unless as a Redo
+    // ...
+
     SequenceI[] newSeqs = new SequenceI[2];
     newSeqs[0] = new Sequence("newseq0", "ACEFKL");
     newSeqs[1] = new Sequence("newseq1", "JWMPDH");
 
-    Edit ec = testee.new Edit(Action.PASTE, newSeqs, 0, al.getWidth(), al);
-    EditCommand.paste(ec, new AlignmentI[] { al });
+    new EditCommand("Paste", Action.PASTE, newSeqs, 0, al.getWidth(), al);
     assertEquals(6, al.getSequences().size());
     assertEquals("1234567890", seqs[3].getSequenceAsString());
     assertEquals("ACEFKL", seqs[4].getSequenceAsString());
@@ -274,14 +279,74 @@ public class EditCommandTest
   {
     // seem to need a dataset sequence on the edited sequence here
     seqs[1].createDatasetSequence();
-    new EditCommand("", Action.REPLACE, "ZXY", new SequenceI[] { seqs[1] },
+    assertEquals("fghjklmnopq", seqs[1].getSequenceAsString());
+    // NB command.number holds end position for a Replace command
+    new EditCommand("", Action.REPLACE, "Z-xY", new SequenceI[] { seqs[1] },
             4, 8, al);
     assertEquals("abcdefghjk", seqs[0].getSequenceAsString());
+    assertEquals("fghjZ-xYopq", seqs[1].getSequenceAsString());
+    assertEquals("fghjZxYopq",
+            seqs[1].getDatasetSequence().getSequenceAsString());
     assertEquals("qrstuvwxyz", seqs[2].getSequenceAsString());
     assertEquals("1234567890", seqs[3].getSequenceAsString());
   }
 
   /**
+   * Test the replace command (used to manually edit a sequence)
+   */
+  @Test(groups = { "Functional" })
+  public void testReplace_withGaps()
+  {
+    SequenceI seq = new Sequence("seq", "ABC--DEF");
+    seq.createDatasetSequence();
+    assertEquals("ABCDEF", seq.getDatasetSequence().getSequenceAsString());
+    assertEquals(1, seq.getStart());
+    assertEquals(6, seq.getEnd());
+
+    /*
+     * replace C- with XYZ
+     * NB arg4 = start column of selection for edit (base 0)
+     * arg5 = column after end of selection for edit
+     */
+    EditCommand edit = new EditCommand("", Action.REPLACE, "xyZ",
+            new SequenceI[]
+            { seq }, 2,
+            4, al);
+    assertEquals("ABxyZ-DEF", seq.getSequenceAsString());
+    assertEquals(1, seq.getStart());
+    assertEquals(8, seq.getEnd());
+    assertEquals("ABxyZDEF",
+            seq.getDatasetSequence().getSequenceAsString());
+    assertEquals(8, seq.getDatasetSequence().getEnd());
+
+    /*
+     * undo the edit
+     */
+    AlignmentI[] views = new AlignmentI[]
+    { new Alignment(new SequenceI[] { seq }) };
+    edit.undoCommand(views);
+
+    assertEquals("ABC--DEF", seq.getSequenceAsString());
+    assertEquals("ABCDEF", seq.getDatasetSequence().getSequenceAsString());
+    assertEquals(1, seq.getStart());
+    assertEquals(6, seq.getEnd());
+    assertEquals(6, seq.getDatasetSequence().getEnd());
+
+    /*
+     * redo the edit
+     */
+    edit.doCommand(views);
+
+    assertEquals("ABxyZ-DEF", seq.getSequenceAsString());
+    assertEquals(1, seq.getStart());
+    assertEquals(8, seq.getEnd());
+    assertEquals("ABxyZDEF",
+            seq.getDatasetSequence().getSequenceAsString());
+    assertEquals(8, seq.getDatasetSequence().getEnd());
+
+  }
+
+  /**
    * Test replace command when it doesn't cause a sequence edit (see comment in
    */
   @Test(groups = { "Functional" })
@@ -293,6 +358,7 @@ public class EditCommandTest
     EditCommand edit = new EditCommand("", Action.REPLACE, "----",
             new SequenceI[]
             { seqs[1] }, 0, 4, al);
+
     // trimmed start
     assertEquals("----klmnopq", seqs[1].getSequenceAsString());
     // and ds is preserved
@@ -301,6 +367,8 @@ public class EditCommandTest
     assertEquals("fghjklmnopq", dsseq.getSequenceAsString());
     // and that alignment sequence start has been adjusted
     assertEquals(5, seqs[1].getStart());
+    assertEquals(11, seqs[1].getEnd());
+
     AlignmentI[] views = new AlignmentI[] { new Alignment(seqs) };
     // and undo
     edit.undoCommand(views);
@@ -311,6 +379,22 @@ public class EditCommandTest
     assertEquals("fghjklmnopq", seqs[1].getSequenceAsString());
     // and start/end numbering also restored
     assertEquals(1, seqs[1].getStart());
+    assertEquals(11, seqs[1].getEnd());
+
+    // now redo
+    edit.undoCommand(views);
+
+    // and repeat asserts for the original edit
+
+    // trimmed start
+    assertEquals("----klmnopq", seqs[1].getSequenceAsString());
+    // and ds is preserved
+    assertTrue(dsseq == seqs[1].getDatasetSequence());
+    // and it is unchanged
+    assertEquals("fghjklmnopq", dsseq.getSequenceAsString());
+    // and that alignment sequence start has been adjusted
+    assertEquals(5, seqs[1].getStart());
+    assertEquals(11, seqs[1].getEnd());
 
   }
 
@@ -816,7 +900,6 @@ public class EditCommandTest
      * and validate the resulting remaining sequence features!
      */
     SequenceI[] sqs = new SequenceI[] { seq0 };
-    boolean checkDsSize = true;
 
     for (int from = 0; from < seq0.getLength(); from++)
     {
@@ -837,15 +920,14 @@ public class EditCommandTest
                 copySequenceFeatures,
                 copySeq0.getSequenceFeatures().toString());
 
-        if (checkDsSize)
-        {
-          /*
-           * verify a new dataset sequence has appeared
-           */
-          assertEquals("Wrong Dataset size after cut",
-                  newDatasetSequence ? 2 : 1, alignment.getDataset()
-                          .getHeight());
-        }
+        /*
+         * verify any new dataset sequence was added to the
+         * alignment dataset
+         */
+        assertEquals("Wrong Dataset size after " + msg,
+                newDatasetSequence ? 2 : 1,
+                alignment.getDataset().getHeight());
+
         /*
          * undo and verify all restored
          */
@@ -857,19 +939,13 @@ public class EditCommandTest
 
         /*
          * verify copy alignment dataset sequence still unaffected
+         * and alignment dataset has shrunk (if it was added to)
          */
         assertEquals("Original dataset sequence was modified",
                 copySequenceFeatures,
                 copySeq0.getSequenceFeatures().toString());
-
-        if (checkDsSize)
-        {
-          /*
-           * verify dataset sequence has shrunk
-           */
-          assertEquals("Wrong Dataset size after cut", 1,
-                  alignment.getDataset().getHeight());
-        }
+        assertEquals("Wrong Dataset size after Undo of " + msg, 1,
+                alignment.getDataset().getHeight());
 
         /*
          * redo and verify
@@ -879,20 +955,14 @@ public class EditCommandTest
 
         /*
          * verify copy alignment dataset sequence unaffected
+         * and any new dataset sequence readded to alignment dataset
          */
         assertEquals("Original dataset sequence was modified",
                 copySequenceFeatures,
                 copySeq0.getSequenceFeatures().toString());
-
-        if (checkDsSize)
-        {
-          /*
-           * verify a new dataset sequence has appeared again
-           */
-          assertEquals("Wrong Dataset size after cut",
-                  newDatasetSequence ? 2 : 1, alignment.getDataset()
-                          .getHeight());
-        }
+        assertEquals("Wrong Dataset size after Redo of " + msg,
+                newDatasetSequence ? 2 : 1,
+                alignment.getDataset().getHeight());
 
         /*
          * undo ready for next cut
@@ -901,18 +971,13 @@ public class EditCommandTest
 
         /*
          * final verify that copy alignment dataset sequence is still unaffected
+         * and that alignment dataset has shrunk
          */
         assertEquals("Original dataset sequence was modified",
                 copySequenceFeatures,
                 copySeq0.getSequenceFeatures().toString());
-        if (checkDsSize)
-        {
-          /*
-           * and that dataset sequence has shrunk
-           */
-          assertEquals("Wrong Dataset size after cut", 1,
-                  alignment.getDataset().getHeight());
-        }
+        assertEquals("Wrong Dataset size after final Undo of " + msg, 1,
+                alignment.getDataset().getHeight());
       }
     }
   }