*/
package jalview.commands;
+import java.util.Locale;
+
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
testee = new EditCommand();
seqs = new SequenceI[4];
seqs[0] = new Sequence("seq0", "abcdefghjk");
- seqs[0].setDatasetSequence(new Sequence("seq0ds", "abcdefghjk"));
+ seqs[0].setDatasetSequence(new Sequence("seq0ds", "ABCDEFGHJK"));
seqs[1] = new Sequence("seq1", "fghjklmnopq");
- seqs[1].setDatasetSequence(new Sequence("seq1ds", "fghjklmnopq"));
+ seqs[1].setDatasetSequence(new Sequence("seq1ds", "FGHJKLMNOPQ"));
seqs[2] = new Sequence("seq2", "qrstuvwxyz");
- seqs[2].setDatasetSequence(new Sequence("seq2ds", "qrstuvwxyz"));
+ seqs[2].setDatasetSequence(new Sequence("seq2ds", "QRSTUVWXYZ"));
seqs[3] = new Sequence("seq3", "1234567890");
seqs[3].setDatasetSequence(new Sequence("seq3ds", "1234567890"));
al = new Alignment(seqs);
}
/**
- * 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());
{
// 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());
+ // Dataset Sequence should always be uppercase
+ assertEquals("fghjZxYopq".toUpperCase(Locale.ROOT),
+ seqs[1].getDatasetSequence().getSequenceAsString());
assertEquals("qrstuvwxyz", seqs[2].getSequenceAsString());
assertEquals("1234567890", seqs[3].getSequenceAsString());
}
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
*/
- new EditCommand("", Action.REPLACE, "XYZ", new SequenceI[] { seq }, 2,
+ EditCommand edit = new EditCommand("", Action.REPLACE, "xyZ",
+ new SequenceI[]
+ { seq }, 2,
4, al);
- assertEquals("ABXYZ-DEF", seq.getSequenceAsString());
- assertEquals("ABXYZDEF", seq.getDatasetSequence().getSequenceAsString());
+ assertEquals("ABxyZ-DEF", seq.getSequenceAsString());
+ assertEquals(1, seq.getStart());
+ assertEquals(8, seq.getEnd());
+ // Dataset sequence always uppercase
+ assertEquals("ABxyZDEF".toUpperCase(Locale.ROOT),
+ 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());
+ // dataset sequence should be Uppercase
+ assertEquals("ABxyZDEF".toUpperCase(Locale.ROOT),
+ seq.getDatasetSequence().getSequenceAsString());
+ assertEquals(8, seq.getDatasetSequence().getEnd());
+
}
/**
assertEquals("----klmnopq", seqs[1].getSequenceAsString());
// and ds is preserved
assertTrue(dsseq == seqs[1].getDatasetSequence());
- // and it is unchanged
- assertEquals("fghjklmnopq", dsseq.getSequenceAsString());
+ // and it is unchanged and UPPERCASE !
+ assertEquals("fghjklmnopq".toUpperCase(Locale.ROOT), dsseq.getSequenceAsString());
// and that alignment sequence start has been adjusted
assertEquals(5, seqs[1].getStart());
assertEquals(11, seqs[1].getEnd());
assertEquals("----klmnopq", seqs[1].getSequenceAsString());
// and ds is preserved
assertTrue(dsseq == seqs[1].getDatasetSequence());
- // and it is unchanged
- assertEquals("fghjklmnopq", dsseq.getSequenceAsString());
+ // and it is unchanged AND UPPERCASE !
+ assertEquals("fghjklmnopq".toUpperCase(Locale.ROOT), dsseq.getSequenceAsString());
// and that alignment sequence start has been adjusted
assertEquals(5, seqs[1].getStart());
assertEquals(11, seqs[1].getEnd());
* and validate the resulting remaining sequence features!
*/
SequenceI[] sqs = new SequenceI[] { seq0 };
- boolean checkDsSize = true;
for (int from = 0; from < seq0.getLength(); from++)
{
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
*/
/*
* 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
/*
* 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
/*
* 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());
}
}
}