X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FSeqPanelTest.java;h=cd0b594e6c9b6f56563d8f12e8d579529f6753f5;hb=26a4dfe581da93351c44436473ad4965bb1f261a;hp=4ce26961dd789de221005de6935516fbf64aa1f2;hpb=6c37aee46593060e9b5d0d0a864a73039817570c;p=jalview.git diff --git a/test/jalview/gui/SeqPanelTest.java b/test/jalview/gui/SeqPanelTest.java index 4ce2696..cd0b594 100644 --- a/test/jalview/gui/SeqPanelTest.java +++ b/test/jalview/gui/SeqPanelTest.java @@ -21,11 +21,15 @@ package jalview.gui; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import jalview.api.AlignViewportI; import jalview.bin.Cache; import jalview.bin.Jalview; +import jalview.commands.EditCommand; +import jalview.commands.EditCommand.Action; +import jalview.commands.EditCommand.Edit; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; @@ -34,8 +38,9 @@ import jalview.datamodel.SequenceI; import jalview.gui.SeqPanel.MousePos; import jalview.io.DataSourceType; import jalview.io.FileLoader; +import jalview.util.MessageManager; +import jalview.viewmodel.ViewportRanges; -import java.awt.Event; import java.awt.EventQueue; import java.awt.event.MouseEvent; import java.lang.reflect.InvocationTargetException; @@ -110,6 +115,110 @@ public class SeqPanelTest } @Test(groups = "Functional") + public void testGetEditStatusMessage() + { + assertNull(SeqPanel.getEditStatusMessage(null)); + + EditCommand edit = new EditCommand(); // empty + assertNull(SeqPanel.getEditStatusMessage(edit)); + + SequenceI[] seqs = new SequenceI[] { new Sequence("a", "b") }; + + // 1 gap + edit.addEdit(edit.new Edit(Action.INSERT_GAP, seqs, 1, 1, '-')); + String expected = MessageManager.formatMessage("label.insert_gap", "1"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 3 more gaps makes +4 + edit.addEdit(edit.new Edit(Action.INSERT_GAP, seqs, 1, 3, '-')); + expected = MessageManager.formatMessage("label.insert_gaps", "4"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 2 deletes makes + 2 + edit.addEdit(edit.new Edit(Action.DELETE_GAP, seqs, 1, 2, '-')); + expected = MessageManager.formatMessage("label.insert_gaps", "2"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 2 more deletes makes 0 - no text + edit.addEdit(edit.new Edit(Action.DELETE_GAP, seqs, 1, 2, '-')); + assertNull(SeqPanel.getEditStatusMessage(edit)); + + // 1 more delete makes 1 delete + edit.addEdit(edit.new Edit(Action.DELETE_GAP, seqs, 1, 1, '-')); + expected = MessageManager.formatMessage("label.delete_gap", "1"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 1 more delete makes 2 deletes + edit.addEdit(edit.new Edit(Action.DELETE_GAP, seqs, 1, 1, '-')); + expected = MessageManager.formatMessage("label.delete_gaps", "2"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + } + + /** + * Tests that simulate 'locked editing', where an inserted gap is balanced by + * a gap deletion in the selection group, and vice versa + */ + @Test(groups = "Functional") + public void testGetEditStatusMessage_lockedEditing() + { + EditCommand edit = new EditCommand(); // empty + SequenceI[] seqs = new SequenceI[] { new Sequence("a", "b") }; + + // 1 gap inserted, balanced by 1 delete + Edit e1 = edit.new Edit(Action.INSERT_GAP, seqs, 1, 1, '-'); + edit.addEdit(e1); + Edit e2 = edit.new Edit(Action.DELETE_GAP, seqs, 5, 1, '-'); + e2.setSystemGenerated(true); + edit.addEdit(e2); + String expected = MessageManager.formatMessage("label.insert_gap", "1"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 2 more gaps makes +3 + Edit e3 = edit.new Edit(Action.INSERT_GAP, seqs, 1, 2, '-'); + edit.addEdit(e3); + Edit e4 = edit.new Edit(Action.DELETE_GAP, seqs, 5, 2, '-'); + e4.setSystemGenerated(true); + edit.addEdit(e4); + expected = MessageManager.formatMessage("label.insert_gaps", "3"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 2 deletes makes + 1 + Edit e5 = edit.new Edit(Action.DELETE_GAP, seqs, 1, 2, '-'); + edit.addEdit(e5); + Edit e6 = edit.new Edit(Action.INSERT_GAP, seqs, 5, 2, '-'); + e6.setSystemGenerated(true); + edit.addEdit(e6); + expected = MessageManager.formatMessage("label.insert_gap", "1"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 1 more delete makes 0 - no text + Edit e7 = edit.new Edit(Action.DELETE_GAP, seqs, 1, 1, '-'); + edit.addEdit(e7); + Edit e8 = edit.new Edit(Action.INSERT_GAP, seqs, 5, 1, '-'); + e8.setSystemGenerated(true); + edit.addEdit(e8); + expected = MessageManager.formatMessage("label.insert_gaps", "2"); + assertNull(SeqPanel.getEditStatusMessage(edit)); + + // 1 more delete makes 1 delete + Edit e9 = edit.new Edit(Action.DELETE_GAP, seqs, 1, 1, '-'); + edit.addEdit(e9); + Edit e10 = edit.new Edit(Action.INSERT_GAP, seqs, 5, 1, '-'); + e10.setSystemGenerated(true); + edit.addEdit(e10); + expected = MessageManager.formatMessage("label.delete_gap", "1"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + + // 2 more deletes makes 3 deletes + Edit e11 = edit.new Edit(Action.DELETE_GAP, seqs, 1, 2, '-'); + edit.addEdit(e11); + Edit e12 = edit.new Edit(Action.INSERT_GAP, seqs, 5, 2, '-'); + e12.setSystemGenerated(true); + edit.addEdit(e12); + expected = MessageManager.formatMessage("label.delete_gaps", "3"); + assertEquals(SeqPanel.getEditStatusMessage(edit), expected); + } + public void testFindMousePosition_unwrapped() { String seqData = ">Seq1\nAACDE\n>Seq2\nAA--E\n"; @@ -132,7 +241,7 @@ public class SeqPanelTest /* * mouse at top left of unwrapped panel */ - MouseEvent evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, + MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); MousePos pos = testee.findMousePosition(evt); assertEquals(pos.column, 0); @@ -157,8 +266,8 @@ public class SeqPanelTest av.setScaleAboveWrapped(false); av.setScaleLeftWrapped(false); av.setScaleRightWrapped(false); - alignFrame.alignPanel.paintAlignment(false, false); - waitForSwing(); // for Swing thread + + alignFrame.alignPanel.updateLayout(); final int charHeight = av.getCharHeight(); final int charWidth = av.getCharWidth(); @@ -177,7 +286,7 @@ public class SeqPanelTest * mouse at top left of wrapped panel; there is a gap of charHeight * above the alignment */ - MouseEvent evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, + MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); MousePos pos = testee.findMousePosition(evt); assertEquals(pos.column, 0); @@ -188,7 +297,7 @@ public class SeqPanelTest * cursor at bottom of gap above */ y = charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -198,7 +307,7 @@ public class SeqPanelTest * cursor over top of first sequence */ y = charHeight; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -208,7 +317,7 @@ public class SeqPanelTest * cursor at bottom of first sequence */ y = 2 * charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -218,7 +327,7 @@ public class SeqPanelTest * cursor at top of second sequence */ y = 2 * charHeight; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 1); @@ -228,7 +337,7 @@ public class SeqPanelTest * cursor at bottom of second sequence */ y = 3 * charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 1); @@ -238,7 +347,7 @@ public class SeqPanelTest * cursor at bottom of last sequence */ y = charHeight * (1 + alignmentHeight) - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -249,7 +358,7 @@ public class SeqPanelTest * method reports index of nearest sequence above */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -259,7 +368,7 @@ public class SeqPanelTest * cursor still in the gap above annotations, now at the bottom of it */ y += SeqCanvas.SEQS_ANNOTATION_GAP - 1; // 3-1 = 2 - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -273,7 +382,7 @@ public class SeqPanelTest * cursor at the top of the n'th annotation */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -283,7 +392,7 @@ public class SeqPanelTest * cursor at the bottom of the n'th annotation */ y += annotationRows[n].height - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -294,7 +403,7 @@ public class SeqPanelTest * cursor in gap between wrapped widths */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -304,7 +413,7 @@ public class SeqPanelTest * cursor at bottom of gap between wrapped widths */ y += charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -314,7 +423,7 @@ public class SeqPanelTest * cursor at top of first sequence, second wrapped width */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -332,8 +441,7 @@ public class SeqPanelTest av.setScaleAboveWrapped(true); av.setScaleLeftWrapped(false); av.setScaleRightWrapped(false); - alignFrame.alignPanel.paintAlignment(false, false); - waitForSwing(); + alignFrame.alignPanel.updateLayout(); final int charHeight = av.getCharHeight(); final int charWidth = av.getCharWidth(); @@ -352,7 +460,7 @@ public class SeqPanelTest * mouse at top left of wrapped panel; there is a gap of charHeight * above the alignment */ - MouseEvent evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, + MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); MousePos pos = testee.findMousePosition(evt); assertEquals(pos.column, 0); @@ -364,7 +472,7 @@ public class SeqPanelTest * two charHeights including scale panel */ y = 2 * charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -374,7 +482,7 @@ public class SeqPanelTest * cursor over top of first sequence */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -384,7 +492,7 @@ public class SeqPanelTest * cursor at bottom of first sequence */ y += charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -394,7 +502,7 @@ public class SeqPanelTest * cursor at top of second sequence */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 1); @@ -404,7 +512,7 @@ public class SeqPanelTest * cursor at bottom of second sequence */ y += charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 1); @@ -415,7 +523,7 @@ public class SeqPanelTest * (scale + gap + sequences) */ y = charHeight * (2 + alignmentHeight) - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -425,7 +533,7 @@ public class SeqPanelTest * cursor below sequences, in 3-pixel gap above annotations */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -436,7 +544,7 @@ public class SeqPanelTest * method reports index of nearest sequence above */ y += SeqCanvas.SEQS_ANNOTATION_GAP - 1; // 3-1 = 2 - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -449,7 +557,7 @@ public class SeqPanelTest * cursor at the top of the n'th annotation */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -459,7 +567,7 @@ public class SeqPanelTest * cursor at the bottom of the n'th annotation */ y += annotationRows[n].height - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -470,7 +578,7 @@ public class SeqPanelTest * cursor in gap between wrapped widths */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -480,7 +588,7 @@ public class SeqPanelTest * cursor at bottom of gap between wrapped widths */ y += charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -490,7 +598,7 @@ public class SeqPanelTest * cursor at top of scale, second wrapped width */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -500,7 +608,7 @@ public class SeqPanelTest * cursor at bottom of scale, second wrapped width */ y += charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -510,7 +618,7 @@ public class SeqPanelTest * cursor at top of first sequence, second wrapped width */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -528,8 +636,7 @@ public class SeqPanelTest av.setScaleAboveWrapped(false); av.setScaleLeftWrapped(false); av.setScaleRightWrapped(false); - alignFrame.alignPanel.paintAlignment(false, false); - waitForSwing(); + alignFrame.alignPanel.updateLayout(); final int charHeight = av.getCharHeight(); final int charWidth = av.getCharWidth(); @@ -548,7 +655,7 @@ public class SeqPanelTest * mouse at top left of wrapped panel; there is a gap of charHeight * above the alignment */ - MouseEvent evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, + MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); MousePos pos = testee.findMousePosition(evt); assertEquals(pos.column, 0); @@ -559,7 +666,7 @@ public class SeqPanelTest * cursor over top of first sequence */ y = charHeight; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -569,7 +676,7 @@ public class SeqPanelTest * cursor at bottom of last sequence */ y = charHeight * (1 + alignmentHeight) - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, alignmentHeight - 1); @@ -579,7 +686,7 @@ public class SeqPanelTest * cursor below sequences, at top of charHeight gap between widths */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -589,7 +696,7 @@ public class SeqPanelTest * cursor below sequences, at top of charHeight gap between widths */ y += charHeight - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, -1); @@ -599,7 +706,7 @@ public class SeqPanelTest * cursor at the top of the first sequence, second width */ y += 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, y, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, false, 0); pos = testee.findMousePosition(evt); assertEquals(pos.seqIndex, 0); @@ -616,12 +723,13 @@ public class SeqPanelTest int x = 0; final int charWidth = alignFrame.getViewport().getCharWidth(); assertTrue(charWidth > 0); // sanity check - assertEquals(alignFrame.getViewport().getRanges().getStartRes(), 0); + ViewportRanges ranges = alignFrame.getViewport().getRanges(); + assertEquals(ranges.getStartRes(), 0); /* * mouse at top left of unwrapped panel */ - MouseEvent evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, + MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 0); @@ -629,7 +737,7 @@ public class SeqPanelTest * not quite one charWidth across */ x = charWidth-1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 0); @@ -637,7 +745,7 @@ public class SeqPanelTest * one charWidth across */ x = charWidth; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 1); @@ -645,7 +753,7 @@ public class SeqPanelTest * two charWidths across */ x = 2 * charWidth; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 2); @@ -653,12 +761,14 @@ public class SeqPanelTest * limited to last column of seqcanvas */ x = 20000; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); SeqCanvas seqCanvas = alignFrame.alignPanel.getSeqPanel().seqCanvas; int w = seqCanvas.getWidth(); - // limited to number of whole columns, base 0 - int expected = w / charWidth - 1; + // limited to number of whole columns, base 0, + // and to end of visible range + int expected = w / charWidth; + expected = Math.min(expected, ranges.getEndRes()); assertEquals(testee.findColumn(evt), expected); /* @@ -667,7 +777,7 @@ public class SeqPanelTest alignFrame.getViewport().hideColumns(4, 9); x = 5 * charWidth + 2; // x is in 6th visible column, absolute column 12, or 11 base 0 - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 11); } @@ -682,9 +792,7 @@ public class SeqPanelTest av.setScaleAboveWrapped(false); av.setScaleLeftWrapped(false); av.setScaleRightWrapped(false); - alignFrame.alignPanel.paintAlignment(false, false); - // need to wait for repaint to finish! - waitForSwing(); + alignFrame.alignPanel.updateLayout(); SeqPanel testee = alignFrame.alignPanel.getSeqPanel(); int x = 0; final int charWidth = av.getCharWidth(); @@ -694,7 +802,7 @@ public class SeqPanelTest /* * mouse at top left of wrapped panel, no West (left) scale */ - MouseEvent evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, + MouseEvent evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 0); @@ -702,7 +810,7 @@ public class SeqPanelTest * not quite one charWidth across */ x = charWidth-1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 0); @@ -710,7 +818,7 @@ public class SeqPanelTest * one charWidth across */ x = charWidth; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 1); @@ -718,18 +826,17 @@ public class SeqPanelTest * x over scale left (before drawn columns) results in -1 */ av.setScaleLeftWrapped(true); - alignFrame.alignPanel.paintAlignment(false, false); - waitForSwing(); + alignFrame.alignPanel.updateLayout(); SeqCanvas seqCanvas = testee.seqCanvas; int labelWidth = (int) PA.getValue(seqCanvas, "labelWidthWest"); assertTrue(labelWidth > 0); x = labelWidth - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), -1); x = labelWidth; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), 0); @@ -739,7 +846,7 @@ public class SeqPanelTest int residuesWide = av.getRanges().getViewportWidth(); assertTrue(residuesWide > 0); x = labelWidth + charWidth * residuesWide - 1; - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), residuesWide - 1); @@ -747,15 +854,14 @@ public class SeqPanelTest * x over scale right (beyond drawn columns) results in -1 */ av.setScaleRightWrapped(true); - alignFrame.alignPanel.paintAlignment(false, false); - waitForSwing(); + alignFrame.alignPanel.updateLayout(); labelWidth = (int) PA.getValue(seqCanvas, "labelWidthEast"); assertTrue(labelWidth > 0); int residuesWide2 = av.getRanges().getViewportWidth(); assertTrue(residuesWide2 > 0); assertTrue(residuesWide2 < residuesWide); // available width reduced x += 1; // just over left edge of scale right - evt = new MouseEvent(testee, Event.MOUSE_MOVE, 0L, 0, x, 0, 0, 0, 0, + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, 0, 0, 0, 0, false, 0); assertEquals(testee.findColumn(evt), -1);