X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fcommands%2FEditCommandTest.java;h=8e04cdd36293d9a44672fd694dc79937c9236cd0;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=c13e72999e288a80d3923df8dd52063cc098f355;hpb=b4a5ba04502e2c947b249269a147257dd9fda77f;p=jalview.git diff --git a/test/jalview/commands/EditCommandTest.java b/test/jalview/commands/EditCommandTest.java index c13e729..8e04cdd 100644 --- a/test/jalview/commands/EditCommandTest.java +++ b/test/jalview/commands/EditCommandTest.java @@ -20,6 +20,8 @@ */ 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; @@ -90,11 +92,11 @@ public class EditCommandTest 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); @@ -153,18 +155,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,9 +281,15 @@ 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()); + // 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()); } @@ -298,19 +311,24 @@ public class EditCommandTest * 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", + EditCommand edit = new EditCommand("", Action.REPLACE, "xyZ", new SequenceI[] - { seq }, 2, - 4, al); - assertEquals("ABXYZ-DEF", seq.getSequenceAsString()); + { seq }, 2, 4, al); + assertEquals("ABxyZ-DEF", seq.getSequenceAsString()); assertEquals(1, seq.getStart()); assertEquals(8, seq.getEnd()); - assertEquals("ABXYZDEF", seq.getDatasetSequence().getSequenceAsString()); + // Dataset sequence always uppercase + assertEquals("ABxyZDEF".toUpperCase(Locale.ROOT), + seq.getDatasetSequence().getSequenceAsString()); assertEquals(8, seq.getDatasetSequence().getEnd()); - edit.undoCommand( - new AlignmentI[] - { new Alignment(new SequenceI[] { seq }) }); + /* + * 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()); @@ -318,14 +336,16 @@ public class EditCommandTest assertEquals(6, seq.getEnd()); assertEquals(6, seq.getDatasetSequence().getEnd()); - edit.undoCommand( - new AlignmentI[] - { new Alignment(new SequenceI[] { seq }) }); + /* + * redo the edit + */ + edit.doCommand(views); - assertEquals("ABXYZ-DEF", seq.getSequenceAsString()); + assertEquals("ABxyZ-DEF", seq.getSequenceAsString()); assertEquals(1, seq.getStart()); assertEquals(8, seq.getEnd()); - assertEquals("ABXYZDEF", + // dataset sequence should be Uppercase + assertEquals("ABxyZDEF".toUpperCase(Locale.ROOT), seq.getDatasetSequence().getSequenceAsString()); assertEquals(8, seq.getDatasetSequence().getEnd()); @@ -348,8 +368,9 @@ public class EditCommandTest 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()); @@ -375,8 +396,9 @@ public class EditCommandTest 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()); @@ -394,17 +416,20 @@ public class EditCommandTest * 3 insert gap in a row (aka mouse drag right): */ Edit e = new EditCommand().new Edit(Action.INSERT_GAP, - new SequenceI[] { seqs[0] }, 1, 1, al); + new SequenceI[] + { seqs[0] }, 1, 1, al); testee.addEdit(e); SequenceI edited = new Sequence("seq0", "a?bcdefghjk"); edited.setDatasetSequence(seqs[0].getDatasetSequence()); e = new EditCommand().new Edit(Action.INSERT_GAP, - new SequenceI[] { edited }, 2, 1, al); + new SequenceI[] + { edited }, 2, 1, al); testee.addEdit(e); edited = new Sequence("seq0", "a??bcdefghjk"); edited.setDatasetSequence(seqs[0].getDatasetSequence()); e = new EditCommand().new Edit(Action.INSERT_GAP, - new SequenceI[] { edited }, 3, 1, al); + new SequenceI[] + { edited }, 3, 1, al); testee.addEdit(e); assertEquals(1, testee.getSize()); assertEquals(Action.INSERT_GAP, testee.getEdit(0).getAction()); @@ -415,7 +440,8 @@ public class EditCommandTest * Add a non-contiguous edit - should not be merged. */ e = new EditCommand().new Edit(Action.INSERT_GAP, - new SequenceI[] { edited }, 5, 2, al); + new SequenceI[] + { edited }, 5, 2, al); testee.addEdit(e); assertEquals(2, testee.getSize()); assertEquals(5, testee.getEdit(1).getPosition()); @@ -425,7 +451,8 @@ public class EditCommandTest * Add a Delete after the Insert - should not be merged. */ e = new EditCommand().new Edit(Action.DELETE_GAP, - new SequenceI[] { edited }, 6, 2, al); + new SequenceI[] + { edited }, 6, 2, al); testee.addEdit(e); assertEquals(3, testee.getSize()); assertEquals(Action.DELETE_GAP, testee.getEdit(2).getAction()); @@ -445,21 +472,24 @@ public class EditCommandTest */ seqs[0].setSequence("a???bcdefghjk"); Edit e = new EditCommand().new Edit(Action.DELETE_GAP, - new SequenceI[] { seqs[0] }, 4, 1, al); + new SequenceI[] + { seqs[0] }, 4, 1, al); testee.addEdit(e); assertEquals(1, testee.getSize()); SequenceI edited = new Sequence("seq0", "a??bcdefghjk"); edited.setDatasetSequence(seqs[0].getDatasetSequence()); e = new EditCommand().new Edit(Action.DELETE_GAP, - new SequenceI[] { edited }, 3, 1, al); + new SequenceI[] + { edited }, 3, 1, al); testee.addEdit(e); assertEquals(1, testee.getSize()); edited = new Sequence("seq0", "a?bcdefghjk"); edited.setDatasetSequence(seqs[0].getDatasetSequence()); e = new EditCommand().new Edit(Action.DELETE_GAP, - new SequenceI[] { edited }, 2, 1, al); + new SequenceI[] + { edited }, 2, 1, al); testee.addEdit(e); assertEquals(1, testee.getSize()); assertEquals(Action.DELETE_GAP, testee.getEdit(0).getAction()); @@ -470,7 +500,8 @@ public class EditCommandTest * Add a non-contiguous edit - should not be merged. */ e = new EditCommand().new Edit(Action.DELETE_GAP, - new SequenceI[] { edited }, 2, 1, al); + new SequenceI[] + { edited }, 2, 1, al); testee.addEdit(e); assertEquals(2, testee.getSize()); assertEquals(Action.DELETE_GAP, testee.getEdit(0).getAction()); @@ -481,7 +512,8 @@ public class EditCommandTest * Add an Insert after the Delete - should not be merged. */ e = new EditCommand().new Edit(Action.INSERT_GAP, - new SequenceI[] { edited }, 1, 1, al); + new SequenceI[] + { edited }, 1, 1, al); testee.addEdit(e); assertEquals(3, testee.getSize()); assertEquals(Action.INSERT_GAP, testee.getEdit(2).getAction()); @@ -499,12 +531,14 @@ public class EditCommandTest { seqs[0].setSequence("a???bcdefghjk"); Edit e = new EditCommand().new Edit(Action.DELETE_GAP, - new SequenceI[] { seqs[0] }, 4, 1, al); + new SequenceI[] + { seqs[0] }, 4, 1, al); testee.addEdit(e); seqs[1].setSequence("f??ghjklmnopq"); - Edit e2 = new EditCommand().new Edit(Action.DELETE_GAP, new SequenceI[] - { seqs[1] }, 3, 1, al); + Edit e2 = new EditCommand().new Edit(Action.DELETE_GAP, + new SequenceI[] + { seqs[1] }, 3, 1, al); testee.addEdit(e2); assertEquals(2, testee.getSize()); assertSame(e, testee.getEdit(0)); @@ -521,25 +555,27 @@ public class EditCommandTest /* * 2 insert gap in a row (aka mouse drag right), on two sequences: */ - Edit e = new EditCommand().new Edit(Action.INSERT_GAP, new SequenceI[] { - seqs[0], seqs[1] }, 1, 1, al); + Edit e = new EditCommand().new Edit(Action.INSERT_GAP, + new SequenceI[] + { seqs[0], seqs[1] }, 1, 1, al); testee.addEdit(e); SequenceI seq1edited = new Sequence("seq0", "a?bcdefghjk"); seq1edited.setDatasetSequence(seqs[0].getDatasetSequence()); SequenceI seq2edited = new Sequence("seq1", "f?ghjklmnopq"); seq2edited.setDatasetSequence(seqs[1].getDatasetSequence()); - e = new EditCommand().new Edit(Action.INSERT_GAP, new SequenceI[] { - seq1edited, seq2edited }, 2, 1, al); + e = new EditCommand().new Edit(Action.INSERT_GAP, + new SequenceI[] + { seq1edited, seq2edited }, 2, 1, al); testee.addEdit(e); assertEquals(1, testee.getSize()); assertEquals(Action.INSERT_GAP, testee.getEdit(0).getAction()); assertEquals(1, testee.getEdit(0).getPosition()); assertEquals(2, testee.getEdit(0).getNumber()); - assertEquals(seqs[0].getDatasetSequence(), testee.getEdit(0) - .getSequences()[0].getDatasetSequence()); - assertEquals(seqs[1].getDatasetSequence(), testee.getEdit(0) - .getSequences()[1].getDatasetSequence()); + assertEquals(seqs[0].getDatasetSequence(), + testee.getEdit(0).getSequences()[0].getDatasetSequence()); + assertEquals(seqs[1].getDatasetSequence(), + testee.getEdit(0).getSequences()[1].getDatasetSequence()); } /** @@ -777,22 +813,22 @@ public class EditCommandTest * a cut of columns/residues 4-7 */ SequenceI seq0 = seqs[0]; // abcdefghjk/1-10 - seq0.addSequenceFeature(new SequenceFeature("before", "", 1, 3, 0f, - null)); - seq0.addSequenceFeature(new SequenceFeature("overlap left", "", 2, 6, - 0f, null)); - seq0.addSequenceFeature(new SequenceFeature("internal", "", 5, 6, 0f, - null)); - seq0.addSequenceFeature(new SequenceFeature("overlap right", "", 7, 8, - 0f, null)); - seq0.addSequenceFeature(new SequenceFeature("after", "", 8, 10, 0f, - null)); + seq0.addSequenceFeature( + new SequenceFeature("before", "", 1, 3, 0f, null)); + seq0.addSequenceFeature( + new SequenceFeature("overlap left", "", 2, 6, 0f, null)); + seq0.addSequenceFeature( + new SequenceFeature("internal", "", 5, 6, 0f, null)); + seq0.addSequenceFeature( + new SequenceFeature("overlap right", "", 7, 8, 0f, null)); + seq0.addSequenceFeature( + new SequenceFeature("after", "", 8, 10, 0f, null)); /* * add some contact features */ - SequenceFeature internalContact = new SequenceFeature("disulphide bond", "", 5, - 6, 0f, null); + SequenceFeature internalContact = new SequenceFeature("disulphide bond", + "", 5, 6, 0f, null); seq0.addSequenceFeature(internalContact); // should get deleted SequenceFeature overlapLeftContact = new SequenceFeature( "disulphide bond", "", 2, 6, 0f, null); @@ -800,8 +836,8 @@ public class EditCommandTest SequenceFeature overlapRightContact = new SequenceFeature( "disulphide bond", "", 5, 8, 0f, null); seq0.addSequenceFeature(overlapRightContact); // should get deleted - SequenceFeature spanningContact = new SequenceFeature( - "disulphide bond", "", 2, 9, 0f, null); + SequenceFeature spanningContact = new SequenceFeature("disulphide bond", + "", 2, 9, 0f, null); seq0.addSequenceFeature(spanningContact); // should get shortened 3' /* @@ -867,8 +903,8 @@ public class EditCommandTest for (int to = from; to <= end; to++) { String desc = String.format("%d-%d", from, to); - SequenceFeature sf = new SequenceFeature("test", desc, from, to, - 0f, null); + SequenceFeature sf = new SequenceFeature("test", desc, from, to, 0f, + null); sf.setValue("from", Integer.valueOf(from)); sf.setValue("to", Integer.valueOf(to)); seq0.addSequenceFeature(sf); @@ -885,14 +921,13 @@ 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++) { for (int to = from; to < seq0.getLength(); to++) { - EditCommand ec = new EditCommand("Cut", Action.CUT, sqs, from, (to - - from + 1), alignment); + EditCommand ec = new EditCommand("Cut", Action.CUT, sqs, from, + (to - from + 1), alignment); final String msg = String.format("Cut %d-%d ", from + 1, to + 1); boolean newDatasetSequence = copySeq0.getDatasetSequence() != seq0 .getDatasetSequence(); @@ -906,15 +941,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 */ @@ -926,19 +960,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 @@ -948,20 +976,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 @@ -970,18 +992,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()); } } } @@ -1026,8 +1043,8 @@ public class EditCommandTest else { // failure in checkFeatureRelocation is more informative! - assertEquals(msg + "wrong number of features left", func(5) - - func(to - from + 1), sfs.size()); + assertEquals(msg + "wrong number of features left", + func(5) - func(to - from + 1), sfs.size()); } /* @@ -1054,9 +1071,8 @@ public class EditCommandTest { final int oldFrom = ((Integer) sf.getValue("from")).intValue(); final int oldTo = ((Integer) sf.getValue("to")).intValue(); - String msg = String.format( - "Undo cut of [%d-%d], feature at [%d-%d] ", from + 1, to + 1, - oldFrom, oldTo); + String msg = String.format("Undo cut of [%d-%d], feature at [%d-%d] ", + from + 1, to + 1, oldFrom, oldTo); assertEquals(msg + "start", oldFrom, sf.getBegin()); assertEquals(msg + "end", oldTo, sf.getEnd()); } @@ -1074,7 +1090,7 @@ public class EditCommandTest * @param seqStart */ private void verifyFeatureRelocation(SequenceFeature sf, int from, int to, - boolean newDataset, int seqStart) + boolean newDataset, int seqStart) { // TODO handle the gapped sequence case as well int cutSize = to - from + 1; @@ -1141,8 +1157,7 @@ public class EditCommandTest SequenceI seq0 = new Sequence("seq/8-11", "A-BCC"); seq0.createDatasetSequence(); assertEquals(8, seq0.getStart()); - seq0.addSequenceFeature(new SequenceFeature("", "", 10, 11, 0f, - null)); + seq0.addSequenceFeature(new SequenceFeature("", "", 10, 11, 0f, null)); SequenceI[] seqsArray = new SequenceI[] { seq0 }; AlignmentI alignment = new Alignment(seqsArray); @@ -1152,7 +1167,7 @@ public class EditCommandTest */ Edit ec = testee.new Edit(Action.CUT, seqsArray, 0, 3, alignment); EditCommand.cut(ec, new AlignmentI[] { alignment }); - + /* * feature on CC(10-11) should still be on CC(10-11) */