X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=inline;f=test%2Fjalview%2Fgui%2FSeqPanelTest.java;h=b0fc116d31da3b72fc47efb9027e826f23e8faf8;hb=acd9913f415ff09bdac6739982d2fb4752b46b8e;hp=0d4993630723cca5ac96768791174cdf53aa62cc;hpb=d34f80c67881e79d7304eb143e9c907bc16d052b;p=jalview.git diff --git a/test/jalview/gui/SeqPanelTest.java b/test/jalview/gui/SeqPanelTest.java index 0d49936..b0fc116 100644 --- a/test/jalview/gui/SeqPanelTest.java +++ b/test/jalview/gui/SeqPanelTest.java @@ -24,6 +24,17 @@ import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; +import java.awt.EventQueue; +import java.awt.FontMetrics; +import java.awt.event.MouseEvent; +import java.lang.reflect.InvocationTargetException; + +import javax.swing.JLabel; + +import org.testng.annotations.AfterMethod; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + import jalview.api.AlignViewportI; import jalview.bin.Cache; import jalview.bin.Jalview; @@ -33,24 +44,15 @@ import jalview.commands.EditCommand.Edit; import jalview.datamodel.Alignment; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; +import jalview.datamodel.SearchResults; +import jalview.datamodel.SearchResultsI; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceI; import jalview.gui.SeqPanel.MousePos; import jalview.io.DataSourceType; import jalview.io.FileLoader; import jalview.util.MessageManager; - -import java.awt.Event; -import java.awt.EventQueue; -import java.awt.event.MouseEvent; -import java.lang.reflect.InvocationTargetException; - -import javax.swing.JLabel; - -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - +import jalview.viewmodel.ViewportRanges; import junit.extensions.PA; public class SeqPanelTest @@ -241,7 +243,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); @@ -266,8 +268,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(); @@ -286,7 +288,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); @@ -297,7 +299,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); @@ -307,7 +309,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); @@ -317,7 +319,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); @@ -327,7 +329,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); @@ -337,7 +339,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); @@ -347,7 +349,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); @@ -358,7 +360,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); @@ -368,7 +370,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); @@ -382,7 +384,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); @@ -392,7 +394,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); @@ -403,7 +405,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); @@ -413,7 +415,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); @@ -423,7 +425,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); @@ -441,8 +443,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(); @@ -461,7 +462,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); @@ -473,7 +474,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); @@ -483,7 +484,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); @@ -493,7 +494,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); @@ -503,7 +504,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); @@ -513,7 +514,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); @@ -524,7 +525,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); @@ -534,7 +535,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); @@ -545,7 +546,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); @@ -558,7 +559,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); @@ -568,10 +569,15 @@ 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); + SeqCanvas sc = testee.seqCanvas; + assertEquals(pos.seqIndex, alignmentHeight - 1, + String.format("%s n=%d y=%d %d, %d, %d, %d", + annotationRows[n].label, n, y, sc.getWidth(), + sc.getHeight(), sc.wrappedRepeatHeightPx, + sc.wrappedSpaceAboveAlignment)); assertEquals(pos.annotationIndex, n); } @@ -579,7 +585,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); @@ -589,7 +595,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); @@ -599,7 +605,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); @@ -609,7 +615,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); @@ -619,7 +625,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); @@ -631,14 +637,14 @@ public class SeqPanelTest { Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS", "false"); Cache.applicationProperties.setProperty("WRAP_ALIGNMENT", "true"); + Cache.applicationProperties.setProperty("FONT_SIZE", "10"); AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded( "examples/uniref50.fa", DataSourceType.FILE); AlignViewportI av = alignFrame.getViewport(); 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(); @@ -657,7 +663,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); @@ -668,7 +674,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); @@ -678,7 +684,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); @@ -688,7 +694,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); @@ -698,7 +704,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); @@ -708,7 +714,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); @@ -725,12 +731,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); @@ -738,7 +745,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); @@ -746,7 +753,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); @@ -754,7 +761,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); @@ -762,12 +769,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); /* @@ -776,7 +785,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); } @@ -791,9 +800,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(); @@ -803,7 +810,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); @@ -811,7 +818,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); @@ -819,7 +826,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); @@ -827,18 +834,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); @@ -848,7 +854,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); @@ -856,15 +862,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); @@ -900,4 +905,157 @@ public class SeqPanelTest e.printStackTrace(); } } + @Test(groups = "Functional") + public void testFindMousePosition_wrapped_scales_longSequence() + { + Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS", "false"); + Cache.applicationProperties.setProperty("WRAP_ALIGNMENT", "true"); + Cache.applicationProperties.setProperty("FONT_SIZE", "14"); + Cache.applicationProperties.setProperty("FONT_NAME", "SansSerif"); + Cache.applicationProperties.setProperty("FONT_STYLE", "0"); + // sequence of 50 bases, doubled 10 times, = 51200 bases + String dna = "ATGGCCATTGGGCCCAAATTTCCCAAAGGGTTTCCCTGAGGTCAGTCAGA"; + for (int i = 0 ; i < 10 ; i++) + { + dna += dna; + } + assertEquals(dna.length(), 51200); + AlignFrame alignFrame = new FileLoader() + .LoadFileWaitTillLoaded(dna, DataSourceType.PASTE); + SeqPanel testee = alignFrame.alignPanel.getSeqPanel(); + AlignViewport av = alignFrame.getViewport(); + av.setScaleAboveWrapped(true); + av.setScaleLeftWrapped(true); + av.setScaleRightWrapped(true); + alignFrame.alignPanel.updateLayout(); + + try + { + Thread.sleep(200); + } catch (InterruptedException e) + { + } + + final int charHeight = av.getCharHeight(); + final int charWidth = av.getCharWidth(); + assertEquals(charHeight, 17); + assertEquals(charWidth, 12); + + FontMetrics fm = testee.getFontMetrics(av.getFont()); + int labelWidth = fm.stringWidth("00000") + charWidth; + assertEquals(labelWidth, 57); // 5 x 9 + charWidth + assertEquals(testee.seqCanvas.getLabelWidthWest(), labelWidth); + + int x = 0; + int y = 0; + + /* + * mouse at top left of wrapped panel; there is a gap of 2 * charHeight + * above the alignment + */ + 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, -1); // over scale left, not an alignment column + assertEquals(pos.seqIndex, -1); // above sequences + assertEquals(pos.annotationIndex, -1); + + /* + * cursor over scale above first sequence + */ + y += charHeight; + x = labelWidth; + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, -1); + assertEquals(pos.column, 0); + assertEquals(pos.annotationIndex, -1); + + /* + * cursor over scale left of first sequence + */ + y += charHeight; + x = 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); + assertEquals(pos.column, -1); + assertEquals(pos.annotationIndex, -1); + + /* + * cursor over start of first sequence + */ + x = labelWidth; + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, 0); + assertEquals(pos.column, 0); + assertEquals(pos.annotationIndex, -1); + + /* + * move one character right, to bottom pixel of same row + */ + x += charWidth; + y += charHeight - 1; + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, 0); + assertEquals(pos.column, 1); + + /* + * move down one pixel - now in the no man's land between rows + */ + y += 1; + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, -1); + assertEquals(pos.column, 1); + + /* + * move down two char heights less one pixel - still in the no man's land + * (scale above + spacer line) + */ + y += (2 * charHeight - 1); + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, -1); + assertEquals(pos.column, 1); + + /* + * move down one more pixel - now on the next row of the sequence + */ + y += 1; + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, 0); + assertEquals(pos.column, 1 + av.getWrappedWidth()); + + /* + * scroll to near the end of the sequence + */ + SearchResultsI sr = new SearchResults(); + int scrollTo = dna.length() - 1000; + sr.addResult(av.getAlignment().getSequenceAt(0), scrollTo, scrollTo); + alignFrame.alignPanel.scrollToPosition(sr); + + /* + * place the mouse on the first column of the 6th sequence, and + * verify that (computed) findMousePosition matches (actual) ViewportRanges + */ + x = labelWidth; + y = 17 * charHeight; // 17 = 6 times two header rows and 5 sequence rows + evt = new MouseEvent(testee, MouseEvent.MOUSE_MOVED, 0L, 0, x, y, 0, 0, 0, + false, 0); + pos = testee.findMousePosition(evt); + assertEquals(pos.seqIndex, 0); + int expected = av.getRanges().getStartRes() + 5 * av.getWrappedWidth(); + assertEquals(pos.column, expected); + } }