X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fviewmodel%2FOverviewDimensionsTest.java;h=1ea07ea0f8f0f6b89d46008e15036946789e3c17;hb=7f4da0a2b0c10f158a03dbfce8878e67e90c4a68;hp=7c40fe92bb025b833018888c68d7d9786e6e53fa;hpb=fce4313f5daea7f5b5914bfaefd11e946664942c;p=jalview.git diff --git a/test/jalview/viewmodel/OverviewDimensionsTest.java b/test/jalview/viewmodel/OverviewDimensionsTest.java index 7c40fe9..1ea07ea 100644 --- a/test/jalview/viewmodel/OverviewDimensionsTest.java +++ b/test/jalview/viewmodel/OverviewDimensionsTest.java @@ -22,136 +22,93 @@ package jalview.viewmodel; import static org.testng.Assert.assertEquals; -import jalview.bin.Cache; -import jalview.bin.Jalview; +import jalview.analysis.AlignmentGenerator; import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.ColumnSelection; import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; -import jalview.gui.AlignFrame; -import jalview.gui.AlignViewport; -import jalview.gui.Desktop; -import jalview.gui.JvOptionPane; -import jalview.io.DataSourceType; -import jalview.io.FileLoader; -import java.util.List; +import java.util.Hashtable; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -public class OverviewDimensionsTest { - - boolean showConservationSetting; - - SequenceI seq1 = new Sequence( - "Seq1", - "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC"); - - SequenceI seq2 = new Sequence( - "Seq2", - "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC"); - - SequenceI seq3 = new Sequence( - "Seq3", - "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC"); - - SequenceI seq4 = new Sequence( - "Seq4", - "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC"); - - SequenceI seq5 = new Sequence( - "Seq5", - "ABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBACABCABCABCABCABCABCABCABCBACBACBACBAC"); - - AlignFrame af; - AlignViewport av; +@Test(singleThreaded = true) +public class OverviewDimensionsTest +{ + AlignmentI al; OverviewDimensions od; - float scalew; - float scaleh; + // cached widths and heights int boxWidth; int boxHeight; - int viewHeight; + int viewWidth; + int alheight; + int alwidth; + + ViewportPositionProps posProps; + + Hashtable hiddenRepSequences = new Hashtable(); + + ColumnSelection hiddenCols = new ColumnSelection(); @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { - JvOptionPane.setInteractiveMode(false); - JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + // create random alignment + AlignmentGenerator gen = new AlignmentGenerator(false); + al = gen.generate(157, 525, 123, 5, 5); } - @BeforeClass(alwaysRun = true) + @BeforeMethod(alwaysRun = true) public void setUp() { - Jalview.main(new String[] { "-nonews", "-props", - "test/jalview/testProps.jvprops" }); - - Cache.applicationProperties.setProperty("SHOW_IDENTITY", - Boolean.TRUE.toString()); - af = new FileLoader().LoadFileWaitTillLoaded( - "examples/testdata/bigal.fa", - DataSourceType.FILE); - - /* - * Wait for viewport to initialise - */ - synchronized (this) + if (!hiddenRepSequences.isEmpty()) { - while (af.getViewport().getEndRes() == 0) - { - try - { - wait(50); - } catch (InterruptedException e) - { - } - } + al.getHiddenSequences().showAll(hiddenRepSequences); } - - // get cached setting for showConservation - // reset it in AfterClass! - showConservationSetting = Cache.getDefault("SHOW_CONSERVATION", true); + hiddenCols.revealAllHiddenColumns(); - av = af.getViewport(); - od = new OverviewDimensions(av); + posProps = new ViewportPositionProps(al); + posProps.setStartRes(0); + posProps.setEndRes(62); + posProps.setStartSeq(0); + posProps.setEndSeq(17); - // Initial box sizing - default path through code - od.setBoxPosition(); - scalew = (float) od.getWidth() - / (av.getAlignment().getWidth() * av.getCharWidth()); - scaleh = (float) od.getSequencesHeight() - / (av.getAlignment().getHeight() * av.getCharHeight()); - boxWidth = (int) ((av.getEndRes() - av.getStartRes() + 1) - * av.getCharWidth() * scalew); - boxHeight = (int) ((av.getEndSeq() - av.getStartSeq()) - * av.getCharHeight() * scaleh); - - viewHeight = av.getEndSeq() - av.getStartSeq(); - } + viewHeight = posProps.getEndSeq() - posProps.getStartSeq() + 1; + viewWidth = posProps.getEndRes() - posProps.getStartRes() + 1; - @BeforeMethod(alwaysRun = true) - public void init() - { - av.showAllHiddenColumns(); - av.showAllHiddenSeqs(); - av.setSelectionGroup(null); - // o/w hidden seqs retain selection group, causes problems later when hiding - // sequences + ColumnSelection hiddenCols = new ColumnSelection(); + + od = new OverviewDimensions(posProps, true); + // Initial box sizing - default path through code + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); mouseClick(od, 0, 0); moveViewport(0, 0); + + // calculate before hidden columns so we get absolute values + alheight = posProps.getAbsoluteAlignmentHeight(); + alwidth = posProps.getAbsoluteAlignmentWidth(); + + boxWidth = Math.round((float) (posProps.getEndRes() + - posProps.getStartRes() + 1) + * od.getWidth() / alwidth); + boxHeight = Math.round((float) (posProps.getEndSeq() + - posProps.getStartSeq() + 1) + * od.getSequencesHeight() / alheight); } @AfterClass(alwaysRun = true) - public void tearDown() + public void cleanUp() { - Cache.applicationProperties.setProperty("SHOW_CONSERVATION", - Boolean.toString(showConservationSetting)); - Desktop.instance.closeAll_actionPerformed(null); + al = null; } /** @@ -174,17 +131,13 @@ public class OverviewDimensionsTest { int maxSeqHeight = 300; int minSeqHeight = 40; - Cache.applicationProperties.setProperty("SHOW_CONSERVATION", - Boolean.toString(true)); - // test for alignment with width > height SequenceI[] seqs1 = new SequenceI[] { seqa, seqb }; Alignment al1 = new Alignment(seqs1); - al1.setDataset(null); - AlignViewport av1 = new AlignViewport(al1); + ViewportPositionProps props = new ViewportPositionProps(al1); - OverviewDimensions od = new OverviewDimensions(av1); - int scaledHeight = 266; + OverviewDimensions od = new OverviewDimensions(props, true); + int scaledHeight = 267; assertEquals(od.getGraphHeight(), defaultGraphHeight); assertEquals(od.getSequencesHeight(), scaledHeight); assertEquals(od.getWidth(), maxWidth); @@ -193,10 +146,9 @@ public class OverviewDimensionsTest { // test for alignment with width < height SequenceI[] seqs2 = new SequenceI[] { seqa, seqb, seqc, seqd }; Alignment al2 = new Alignment(seqs2); - al2.setDataset(null); - AlignViewport av2 = new AlignViewport(al2); + props = new ViewportPositionProps(al2); - od = new OverviewDimensions(av2); + od = new OverviewDimensions(props, true); int scaledWidth = 300; assertEquals(od.getGraphHeight(), defaultGraphHeight); assertEquals(od.getSequencesHeight(), maxSeqHeight); @@ -207,10 +159,9 @@ public class OverviewDimensionsTest { // min value SequenceI[] seqs3 = new SequenceI[] { seqe }; Alignment al3 = new Alignment(seqs3); - al3.setDataset(null); - AlignViewport av3 = new AlignViewport(al3); + props = new ViewportPositionProps(al3); - od = new OverviewDimensions(av3); + od = new OverviewDimensions(props, true); assertEquals(od.getGraphHeight(), defaultGraphHeight); assertEquals(od.getSequencesHeight(), minSeqHeight); assertEquals(od.getWidth(), maxWidth); @@ -220,24 +171,18 @@ public class OverviewDimensionsTest { SequenceI[] seqs4 = new SequenceI[] { seqa, seqb, seqc, seqd, seqa, seqb, seqc, seqd, seqa, seqb, seqc, seqd, seqa, seqb, seqc, seqd }; Alignment al4 = new Alignment(seqs4); - al4.setDataset(null); - AlignViewport av4 = new AlignViewport(al4); + props = new ViewportPositionProps(al4); - od = new OverviewDimensions(av4); + od = new OverviewDimensions(props, true); assertEquals(od.getGraphHeight(), defaultGraphHeight); assertEquals(od.getSequencesHeight(), maxSeqHeight); assertEquals(od.getWidth(), minWidth); assertEquals(od.getHeight(), maxSeqHeight + defaultGraphHeight); - // test for alignment where no conservation annotation is shown - Cache.applicationProperties.setProperty("SHOW_CONSERVATION", - Boolean.toString(false)); - Alignment al5 = new Alignment(seqs4); - al5.setDataset(null); - AlignViewport av5 = new AlignViewport(al5); + props = new ViewportPositionProps(al5); - od = new OverviewDimensions(av5); + od = new OverviewDimensions(props, false); assertEquals(od.getGraphHeight(), 0); assertEquals(od.getSequencesHeight(), maxSeqHeight); assertEquals(od.getWidth(), minWidth); @@ -248,16 +193,12 @@ public class OverviewDimensionsTest { * Test that validation after mouse adjustments to boxX and boxY sets box * dimensions and scroll values correctly, when there are no hidden rows or * columns. - * - * The current implementation uses multiple transformations between coordinate - * systems which often involve casting to int, which causes values to be - * truncated. As a result we can lose accuracy. The tests below use - * approximate test values where appropriate. */ @Test(groups = { "Functional" }) public void testSetBoxFromMouseClick() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); @@ -270,7 +211,7 @@ public class OverviewDimensionsTest { assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollRow(), - (int) (10 / scaleh / av.getCharHeight())); + Math.round((float) 10 * alheight / od.getSequencesHeight())); assertEquals(od.getScrollCol(), 0); // negative boxY value reset to 0 @@ -278,41 +219,48 @@ public class OverviewDimensionsTest { assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getBoxHeight(), boxHeight); - assertEquals(od.getScrollCol(), (int) (6 / scalew / av.getCharWidth())); + assertEquals(od.getScrollCol(), + Math.round((float) 6 * alwidth / od.getWidth())); assertEquals(od.getScrollRow(), 0); // overly large boxX value reset to width-boxWidth mouseClick(od, 100, 6); - assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth(), 1.5); - assertEquals(od.getBoxY(), 6, 1.5); + assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth()); + assertEquals(od.getBoxY(), 6); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (od.getBoxX() / scalew / av.getCharWidth()), 1.5); + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); assertEquals(od.getScrollRow(), - (od.getBoxY() / scaleh / av.getCharHeight()), 1.5); + Math.round((float) od.getBoxY() * alheight + / od.getSequencesHeight())); // overly large boxY value reset to sequenceHeight - boxHeight mouseClick(od, 10, 520); - assertEquals(od.getBoxX(), 10, 1.5); - assertEquals(od.getBoxY(), od.getSequencesHeight() - od.getBoxHeight(), - 1.5); + assertEquals(od.getBoxX(), 10); + assertEquals(od.getBoxY(), od.getSequencesHeight() - od.getBoxHeight()); assertEquals(od.getBoxWidth(), boxWidth); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (od.getBoxX() / scalew / av.getCharWidth()), 1.5); + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); + + // here (float) od.getBoxY() * alheight / od.getSequencesHeight() = 507.5 + // and round rounds to 508; however we get 507 working with row values + // hence the subtraction of 1 assertEquals(od.getScrollRow(), - (od.getBoxY() / scaleh / av.getCharHeight()), 1.5); + Math.round((float) od.getBoxY() * alheight + / od.getSequencesHeight()) - 1); // click past end of alignment, as above mouseClick(od, 3000, 5); - assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth(), 1.5); + assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth()); assertEquals(od.getBoxWidth(), boxWidth); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (od.getBoxX() / scalew / av.getCharWidth()), 1.5); + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); assertEquals(od.getScrollRow(), - (od.getBoxY() / scaleh / av.getCharHeight()), 1.5); + Math.round((float) od.getBoxY() * alheight + / od.getSequencesHeight())); // move viewport so startRes non-zero and then mouseclick moveViewportH(50); @@ -321,14 +269,15 @@ public class OverviewDimensionsTest { int oldboxx = od.getBoxX(); int oldboxy = od.getBoxY(); mouseClick(od, od.getBoxX() + 5, od.getBoxY() + 2); - assertEquals(od.getBoxX(), oldboxx + 5, 1.5); + assertEquals(od.getBoxX(), oldboxx + 5); assertEquals(od.getBoxWidth(), boxWidth); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (od.getBoxX() / scalew / av.getCharWidth()), 1.5); - assertEquals(od.getBoxY(), oldboxy + 2, 1.5); + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); + assertEquals(od.getBoxY(), oldboxy + 2); assertEquals(od.getScrollRow(), - (od.getBoxY() / scaleh / av.getCharHeight()), 1.5); + Math.round((float) od.getBoxY() * alheight + / od.getSequencesHeight())); // click at top corner mouseClick(od, 0, 0); @@ -337,7 +286,7 @@ public class OverviewDimensionsTest { assertEquals(od.getBoxY(), 0); assertEquals(od.getScrollRow(), 0); assertEquals(od.getBoxWidth(), boxWidth); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxHeight(), boxHeight); } /** @@ -347,7 +296,8 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testFromMouseWithHiddenColsAtStart() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); @@ -357,49 +307,51 @@ public class OverviewDimensionsTest { // hide cols at start and check updated box position is correct // changes boxX but not boxwidth int lastHiddenCol = 30; - av.hideColumns(0, lastHiddenCol); - od.setBoxPosition(); + hiddenCols.hideColumns(0, lastHiddenCol); + + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); assertEquals(od.getBoxX(), - (int) ((lastHiddenCol + 1) * scalew * av.getCharWidth())); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + Math.round((float) (lastHiddenCol + 1) * od.getWidth() + / alwidth)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // try to click in hidden cols, check box does not move - // this test currently fails as the overview box does not behave like this! - /* int xpos = 10; - mouseClick(od, xpos, 0); - assertEquals(od.getBoxX(), - (int) ((lastHiddenCol + 1) * scalew * av.getCharWidth())); - assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth); - assertEquals(od.getBoxHeight(), boxHeight); - assertEquals(od.getScrollRow(), 0); - assertEquals(od.getScrollCol(), - (int) (xpos / scalew / av.getCharWidth())); - */ + int xpos = 10; + mouseClick(od, xpos, 0); + assertEquals( + od.getBoxX(), + Math.round((float) (lastHiddenCol + 1) * od.getWidth() + / alwidth)); + assertEquals(od.getBoxY(), 0); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); + assertEquals(od.getScrollRow(), 0); + assertEquals(od.getScrollCol(), 0); + // click to right of hidden columns, box moves to click point testBoxIsAtClickPoint(40, 0); assertEquals(od.getScrollRow(), 0); assertEquals(od.getScrollCol(), - (int) (40 / scalew / av.getCharWidth()) - - lastHiddenCol, 1.5); + Math.round((float) 40 * alwidth / od.getWidth()) + - (lastHiddenCol + 1)); // click to right of hidden columns such that box runs over right hand side // of alignment // box position is adjusted away from the edge // overly large boxX value reset to width-boxWidth - int xpos = 100; + xpos = 100; mouseClick(od, xpos, 5); - assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth(), 1.5); - assertEquals(od.getBoxY(), 5, 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth()); + assertEquals(od.getBoxY(), 5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (int) (od.getBoxX() / scalew / av.getCharWidth()) - - lastHiddenCol, 1.5); + Math.round((float) od.getBoxX() * alwidth / od.getWidth()) + - (lastHiddenCol + 1)); assertEquals(od.getScrollRow(), - (int) (od.getBoxY() / scaleh / av.getCharHeight()), 1.5); - + Math.round((float) od.getBoxY() * alheight + / od.getSequencesHeight())); } /** @@ -409,97 +361,98 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testFromMouseWithHiddenColsInMiddle() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getScrollCol(), 0); assertEquals(od.getScrollRow(), 0); - // hide columns 60-68, no change to box position or dimensions - int firstHidden = 60; - int lastHidden = 68; - av.hideColumns(firstHidden, lastHidden); - od.setBoxPosition(); + // hide columns 63-73, no change to box position or dimensions + int firstHidden = 63; + int lastHidden = 73; + hiddenCols.hideColumns(firstHidden, lastHidden); + + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getScrollCol(), 0); assertEquals(od.getScrollRow(), 0); - + // move box so that it overlaps with hidden cols on one side // box width changes, boxX and scrollCol as for unhidden case - int xpos = 50 - boxWidth; // 50 is position in overview halfway between cols - // 60 and 70 + int xpos = 55 - boxWidth; // 55 is position in overview approx halfway + // between cols 60 and 70 mouseClick(od, xpos, 0); - assertEquals(od.getBoxX(), xpos, 1.5); + assertEquals(od.getBoxX(), xpos); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth - + (lastHidden - firstHidden + 1) * scalew * av.getCharWidth(), - 1.5); + assertEquals( + od.getBoxWidth(), + Math.round(boxWidth + (float) (lastHidden - firstHidden + 1) + * od.getWidth() / alwidth)); assertEquals(od.getBoxHeight(), boxHeight); - assertEquals(od.getScrollCol(), (int) (xpos / scalew / av.getCharWidth()), 1.5); + assertEquals(od.getScrollCol(), + Math.round(xpos * alwidth / od.getWidth())); assertEquals(od.getScrollRow(), 0); // move box so that it completely covers hidden cols // box width changes, boxX and scrollCol as for hidden case - xpos = 30; + xpos = 33; mouseClick(od, xpos, 0); - assertEquals(od.getBoxX(), xpos, 1.5); + assertEquals(od.getBoxX(), xpos); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth - + (lastHidden - firstHidden + 1) * scalew * av.getCharWidth(), - 1.5); + assertEquals( + od.getBoxWidth(), + Math.round(boxWidth + (float) (lastHidden - firstHidden + 1) + * od.getWidth() / alwidth)); assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (int) (xpos / scalew / av.getCharWidth()), 1.5); + Math.round((float) xpos * alwidth / od.getWidth())); assertEquals(od.getScrollRow(), 0); // move box so boxX is in hidden cols, box overhangs at right - // box width back to normal, boxX and scrollCol move to right of hidden area - // TODO currently this test fails in the Jalview GUI, there is a gap between - // the rhs of the hidden area and the box - /* xpos = 50; - mouseClick(od, xpos, 0); - assertEquals(od.getBoxX(), - (lastHidden + 1) * scalew * av.getCharWidth(), 1.5); - assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight); - assertEquals(od.getScrollCol(), - (int) (xpos / scalew / av.getCharWidth()), 1.5); - assertEquals(od.getScrollRow(), 0);*/ + // boxX and scrollCol at left of hidden area, box width extends across + // hidden region + xpos = 50; + mouseClick(od, xpos, 0); + assertEquals(od.getBoxX(), + Math.round((float) (firstHidden - 1) * od.getWidth() / alwidth)); + assertEquals(od.getBoxY(), 0); + assertEquals( + od.getBoxWidth(), + boxWidth + + Math.round((float) (lastHidden - firstHidden + 1) + * od.getWidth() / alwidth)); + assertEquals(od.getBoxHeight(), boxHeight); + assertEquals(od.getScrollCol(), firstHidden - 1); + assertEquals(od.getScrollRow(), 0); // move box so boxX is to right of hidden cols, but does not go beyond full // width of alignment // box width, boxX and scrollCol all as for non-hidden case - // TODO currently this test fails in the Jalview GUI because boxX is - // calculated - // based on the current boxWidth, which includes hidden columns, thereby - // pushing - // the box off the end of the alignment. So boxX is adjusted backwards - // unnecessarily. - /* xpos = 72; - testBoxIsAtClickPoint(xpos, 0); - assertEquals(od.getScrollRow(), 0); - assertEquals(od.getScrollCol(), - (int) (xpos / scalew / av.getCharWidth()) - - lastHidden, 1.5);*/ + xpos = 75; + testBoxIsAtClickPoint(xpos, 0); + assertEquals(od.getScrollRow(), 0); + assertEquals(od.getScrollCol(), + Math.round(xpos * alwidth / od.getWidth()) + - (lastHidden - firstHidden + 1)); // move box so it goes beyond full width of alignment // boxX, scrollCol adjusted back, box width normal xpos = 3000; mouseClick(od, xpos, 5); - assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth(), 1.5); - assertEquals(od.getBoxY(), 5, 1.5); + assertEquals(od.getBoxX(), od.getWidth() - od.getBoxWidth()); + assertEquals(od.getBoxY(), 5); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (od.getBoxX() / scalew / av.getCharWidth()) - - (lastHidden - firstHidden + 1), - 1.5); + Math.round(((float) od.getBoxX() * alwidth / od.getWidth()) + - (lastHidden - firstHidden + 1))); assertEquals(od.getScrollRow(), - (int) (od.getBoxY() / scaleh / av.getCharHeight()), 1.5); + Math.round((float) od.getBoxY() * alheight + / od.getSequencesHeight())); } @@ -510,18 +463,19 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testFromMouseWithHiddenColsAtEnd() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getScrollCol(), 0); assertEquals(od.getScrollRow(), 0); - // hide columns 140-157, no change to box position or dimensions + // hide columns 140-164, no change to box position or dimensions int firstHidden = 140; - int lastHidden = 157; - av.hideColumns(firstHidden, lastHidden); - od.setBoxPosition(); + int lastHidden = 164; + hiddenCols.hideColumns(firstHidden, lastHidden); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); @@ -534,54 +488,47 @@ public class OverviewDimensionsTest { testBoxIsAtClickPoint(xpos, 0); assertEquals(od.getScrollRow(), 0); assertEquals(od.getScrollCol(), - (int) (xpos / scalew / av.getCharWidth()), 1.5); + Math.round((float) xpos * alwidth / od.getWidth())); // click to left of hidden cols, with overlap // boxX and scrollCol adjusted for hidden cols, width normal - // TODO this fails because setBoxPosition screws up the hidden cols calc - // only works in GUI because of AlignmentPanel::setScrollValues - /*xpos = 115 - boxWidth; + xpos = Math.round((float) 145 * od.getWidth() / alwidth) - boxWidth; mouseClick(od, xpos, 0); - assertEquals( - od.getBoxX(), - (int) ((firstHidden - 1) * scalew * av.getCharWidth()) - - od.getBoxWidth(), 1.5); + assertEquals(od.getBoxX(), + Math.round((float) (firstHidden - 1) * od.getWidth() / alwidth) + - boxWidth + 1); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (int) (od.getBoxX() / scalew / av.getCharWidth()), 1.5); - assertEquals(od.getScrollRow(), 0);*/ + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); + assertEquals(od.getScrollRow(), 0); // click in hidden cols // boxX and scrollCol adjusted for hidden cols, width normal - // TODO breaks as above test - /*xpos = 115; - assertEquals( - od.getBoxX(), - (int) ((firstHidden - 1) * scalew * av.getCharWidth()) - - od.getBoxWidth(), 1.5); + xpos = 115; + assertEquals(od.getBoxX(), + Math.round((float) (firstHidden - 1) * od.getWidth() / alwidth) + - boxWidth + 1); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), - (int) (od.getBoxX() / scalew / av.getCharWidth()), 1.5); - assertEquals(od.getScrollRow(), 0);*/ + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); + assertEquals(od.getScrollRow(), 0); // click off end of alignment // boxX and scrollCol adjusted for hidden cols, width normal - // TODO breaks as above test - /* xpos = 3000; - assertEquals( - od.getBoxX(), - (int) ((firstHidden - 1) * scalew * av.getCharWidth()) - - od.getBoxWidth(), 1.5); - assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight); - assertEquals(od.getScrollCol(), - (int) (od.getBoxX() / scalew / av.getCharWidth()), 1.5); - assertEquals(od.getScrollRow(), 0);*/ + xpos = 3000; + assertEquals(od.getBoxX(), + Math.round((float) (firstHidden - 1) * od.getWidth() / alwidth) + - boxWidth + 1); + assertEquals(od.getBoxY(), 0); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); + assertEquals(od.getScrollCol(), + Math.round((float) od.getBoxX() * alwidth / od.getWidth())); + assertEquals(od.getScrollRow(), 0); } /** @@ -595,29 +542,34 @@ public class OverviewDimensionsTest { moveViewport(0, 0); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to right moveViewportH(70); - assertEquals(od.getBoxX(), (int) (70 * scalew * av.getCharWidth())); + assertEquals(od.getBoxX(), + Math.round((float) 70 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport down moveViewportV(100); - assertEquals(od.getBoxX(), (int) (70 * scalew * av.getCharWidth())); - assertEquals(od.getBoxY(), (int) (100 * scaleh * av.getCharHeight())); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxX(), + Math.round((float) 70 * od.getWidth() / alwidth)); + assertEquals(od.getBoxY(), + Math.round(100 * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to bottom right moveViewport(98, 508); - assertEquals(od.getBoxX(), (int) (98 * scalew * av.getCharWidth())); - assertEquals(od.getBoxY(), (int) (508 * scaleh * av.getCharHeight())); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxX(), + Math.round((float) 98 * od.getWidth() / alwidth)); + assertEquals(od.getBoxY(), + Math.round((float) 508 * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } /** @@ -629,23 +581,24 @@ public class OverviewDimensionsTest { { int firstHidden = 0; int lastHidden = 20; - av.hideColumns(firstHidden, lastHidden); + hiddenCols.hideColumns(firstHidden, lastHidden); // move viewport to start of alignment moveViewport(0, 0); assertEquals(od.getBoxX(), - (int) ((lastHidden + 1) * scalew * av.getCharWidth())); + Math.round((float) (lastHidden + 1) * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to end of alignment - need to make startRes by removing // hidden cols because of how viewport/overview are implemented moveViewport(98 - lastHidden - 1, 0); - assertEquals(od.getBoxX(), 98 * scalew * av.getCharWidth(), 1.5); + assertEquals(od.getBoxX(), + Math.round((float) 98 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } /** @@ -655,45 +608,52 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testSetBoxFromViewportHiddenColsInMiddle() { - int firstHidden = 65; - int lastHidden = 75; - av.hideColumns(firstHidden, lastHidden); + int firstHidden = 68; + int lastHidden = 78; + hiddenCols.hideColumns(firstHidden, lastHidden); // move viewport before hidden columns moveViewport(3, 0); - assertEquals(od.getBoxX(), (int) (3 * scalew * av.getCharWidth())); + + assertEquals(od.getBoxX(), + Math.round((float) 3 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + System.out.println(od.getBoxWidth()); + assertEquals(od.getBoxWidth(), boxWidth); + System.out.println(od.getBoxWidth()); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to left of hidden columns with overlap moveViewport(10, 0); - assertEquals(od.getBoxX(), (int) (10 * scalew * av.getCharWidth())); + assertEquals(od.getBoxX(), + Math.round((float) 10 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); assertEquals( od.getBoxWidth(), boxWidth - + (int) ((lastHidden - firstHidden + 1) * scalew * av - .getCharWidth()), 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + + Math.round((float) (lastHidden - firstHidden + 1) + * od.getWidth() / alwidth)); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to straddle hidden columns - moveViewport(60, 0); - assertEquals(od.getBoxX(), (int) (60 * scalew * av.getCharWidth())); + moveViewport(63, 0); + assertEquals(od.getBoxX(), + Math.round((float) 63 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); assertEquals( od.getBoxWidth(), boxWidth - + (int) ((lastHidden - firstHidden + 1) * scalew * av - .getCharWidth()), 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + + Math.round((lastHidden - firstHidden + 1) + * od.getWidth() / alwidth)); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to right of hidden columns, no overlap moveViewport(80 - (lastHidden - firstHidden + 1), 0); - assertEquals(od.getBoxX(), (int) (80 * scalew * av.getCharWidth()), 1.5); + assertEquals(od.getBoxX(), + Math.round((float) 80 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } @@ -704,28 +664,27 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testSetBoxFromViewportHiddenColsAtEnd() { - int firstHidden = 145; - int lastHidden = 157; - av.hideColumns(firstHidden, lastHidden); + int firstHidden = 152; + int lastHidden = 164; + hiddenCols.hideColumns(firstHidden, lastHidden); // move viewport before hidden columns moveViewport(3, 0); - assertEquals(od.getBoxX(), (int) (3 * scalew * av.getCharWidth()), 1.5); + assertEquals(od.getBoxX(), + Math.round((float) 3 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to hidden columns - // TODO boxwidth includes hidden in overview panel (why?) - moveViewport(98, 0); - assertEquals(od.getBoxX(), (int) (98 * scalew * av.getCharWidth()), 1.5); + moveViewport(102, 0); + assertEquals(od.getBoxX(), + Math.round((float) 102 * od.getWidth() / alwidth)); assertEquals(od.getBoxY(), 0); - assertEquals( - od.getBoxWidth(), - boxWidth - + (int) ((lastHidden - firstHidden + 1) * scalew * av - .getCharWidth()), 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth + + Math.round((float) (lastHidden - firstHidden + 1) + * od.getWidth() / alwidth)); + assertEquals(od.getBoxHeight(), boxHeight); } /** @@ -737,33 +696,27 @@ public class OverviewDimensionsTest { { int firstHidden = 0; int lastHidden = 20; - hideSequences(firstHidden, lastHidden + 1, lastHidden + 1); + hideSequences(firstHidden, lastHidden); // move viewport to start of alignment: // box moves to below hidden rows, height remains same moveViewport(0, 0); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), - (lastHidden + 1) * scaleh * av.getCharHeight(), 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); - - // move viewport to end of alignment, need to account for hidden rows - // because of how alignment panel/overview panel are implemented - - // AlignViewport adjusts endSeq using Alignment height which excludes hidden - // rows if we happen to be at the bottom of the alignment - // od.setBoxPosition adjusts endSeq to include hidden rows - // od.checkValid adjusts scroll position to exclude hidden rows - // TODO this test fails because of the above! - - /* moveViewport(0, 525 - viewHeight - lastHidden - 1); - assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), - (525 - viewHeight) * scaleh - * av.getCharHeight(), 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5);*/ + Math.round((float) (lastHidden + 1) * od.getSequencesHeight() + / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); + + // move viewport to end of alignment + moveViewport(0, 525 - viewHeight - lastHidden - 1); + assertEquals(od.getBoxX(), 0); + assertEquals( + od.getBoxY(), + Math.round((float) (525 - viewHeight) * od.getSequencesHeight() + / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } /** @@ -775,27 +728,26 @@ public class OverviewDimensionsTest { { int firstHidden = 200; int lastHidden = 210; - hideSequences(firstHidden, lastHidden + 1, lastHidden + 1); + hideSequences(firstHidden, lastHidden); // move viewport to start of alignment: // box, height etc as in non-hidden case - // TODO fails with boxy=12 because that's what setBoxPosition sets it to! - /*moveViewport(0, 0); + moveViewport(0, 0); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5);*/ + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to straddle hidden rows - // TODO also fails with boxY out by 12 - /*moveViewport(0, 198); + moveViewport(0, 198); assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), (int) (198 * scaleh * av.getCharHeight()), - 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight - + ((lastHidden - firstHidden) * scaleh * av.getCharHeight()), - 1.5);*/ + assertEquals(od.getBoxY(), Math.round ((float)198 * od.getSequencesHeight() + / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals( + od.getBoxHeight(), + Math.round((float) (viewHeight + lastHidden - firstHidden + 1) + * od.getSequencesHeight() / alheight)); } /** @@ -807,29 +759,26 @@ public class OverviewDimensionsTest { { int firstHidden = 500; int lastHidden = 524; - hideSequences(firstHidden - 1, lastHidden, firstHidden - 1); + hideSequences(firstHidden, lastHidden); // move viewport to start of alignment: // box, height etc as in non-hidden case moveViewport(0, 0); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // move viewport to end of alignment - // TODO fails with wrong boxHeight who knows why - /*moveViewport(0, firstHidden - viewHeight - 1); - assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), - (int) ((firstHidden - viewHeight - 1) - * scaleh * av.getCharHeight()), 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals( - od.getBoxHeight(), - boxHeight - + (int) ((lastHidden - firstHidden + 1) * scaleh * av - .getCharHeight()), 1.5);*/ + // viewport sits above hidden rows and does not include them + moveViewport(0, firstHidden - viewHeight - 1); + assertEquals(od.getBoxX(), 0); + assertEquals( + od.getBoxY(), + Math.round((float) (firstHidden - viewHeight - 1) + * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } @@ -840,9 +789,11 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testFromMouseWithHiddenRowsAtStart() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getBoxWidth(), boxWidth); assertEquals(od.getScrollCol(), 0); assertEquals(od.getScrollRow(), 0); @@ -850,31 +801,32 @@ public class OverviewDimensionsTest { // hide rows at start and check updated box position is correct // changes boxY but not boxheight int lastHiddenRow = 30; - hideSequences(0, lastHiddenRow + 1, lastHiddenRow + 1); + hideSequences(0, lastHiddenRow); - od.setBoxPosition(); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), - (int) ((lastHiddenRow + 1) * scaleh * av.getCharHeight())); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); - - // click in hidden rows - // TODO fails because boxHeight is 27 not 25 (possible rounding issue) - /* mouseClick(od, 0, 0); - assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight - + (int) ((lastHiddenRow + 1) * scaleh * av.getCharHeight()), - 1.5);*/ + Math.round((float) (lastHiddenRow + 1) + * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); + + // click in hidden rows - same result + mouseClick(od, 0, 0); + assertEquals(od.getBoxX(), 0); + assertEquals( + od.getBoxY(), + Math.round((float) (lastHiddenRow + 1) + * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // click below hidden rows mouseClick(od, 0, 150); assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), 150, 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxY(), 150); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } /** @@ -884,54 +836,56 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testFromMouseWithHiddenRowsInMiddle() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); + assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), 0); assertEquals(od.getScrollRow(), 0); // hide rows in middle and check updated box position is correct // no changes int firstHiddenRow = 50; - int lastHiddenRow = 60; - hideSequences(firstHiddenRow, lastHiddenRow + 1, lastHiddenRow + 1); + int lastHiddenRow = 54; + hideSequences(firstHiddenRow, lastHiddenRow); + + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); - od.setBoxPosition(); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // click above hidden rows, so that box overlaps - int ypos = 40; - // TODO test fails because box does not change height - dealt with by scroll - // values - /* mouseClick(od, 0, (int) (ypos / scaleh / av.getCharHeight())); - assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), (int) (ypos / scaleh / av.getCharHeight()), - 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals( - od.getBoxHeight(), - boxHeight - + (int) ((lastHiddenRow - firstHiddenRow + 1) / scaleh / av - .getCharHeight()), 1.5); - */ + int ypos = 35; // column value in residues + mouseClick(od, 0, + Math.round((float) ypos * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxX(), 0); + assertEquals(od.getBoxY(), + Math.round((float) ypos * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals( + od.getBoxHeight(), + boxHeight + + Math.round((float) (lastHiddenRow - firstHiddenRow + 1) + * od.getSequencesHeight() / alheight)); + // click so that box straddles hidden rows - ypos = 48; - // TODO test fails because box does not change height - dealt with by scroll - // values - /*mouseClick(od, 0, (int) (ypos / scaleh / av.getCharHeight())); + ypos = 44; // column value in residues + mouseClick(od, 0, + Math.round((float) ypos * od.getSequencesHeight() / alheight)); assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), (int) (ypos / scaleh / av.getCharHeight()), - 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); + assertEquals(od.getBoxY(), + Math.round((float) ypos * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); assertEquals( od.getBoxHeight(), boxHeight - + (int) ((lastHiddenRow - firstHiddenRow + 1) / scaleh / av - .getCharHeight()), 1.5);*/ + + Math.round((float) (lastHiddenRow - firstHiddenRow + 1) + * od.getSequencesHeight() / alheight)); } /** @@ -941,10 +895,12 @@ public class OverviewDimensionsTest { @Test(groups = { "Functional" }) public void testFromMouseWithHiddenRowsAtEnd() { - od.setBoxPositionByMouse(0, 0); + od.updateViewportFromMouse(0, 0, al.getHiddenSequences(), hiddenCols, + posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); assertEquals(od.getScrollCol(), 0); assertEquals(od.getScrollRow(), 0); @@ -952,48 +908,48 @@ public class OverviewDimensionsTest { // no changes int firstHidden = 500; int lastHidden = 524; - hideSequences(firstHidden - 1, lastHidden, firstHidden - 1); + hideSequences(firstHidden, lastHidden); - od.setBoxPosition(); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); assertEquals(od.getBoxX(), 0); assertEquals(od.getBoxY(), 0); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // click above hidden rows int ypos = 40; // row 40 - mouseClick(od, 0, (int) (ypos * scaleh * av.getCharHeight())); + mouseClick(od, 0, + Math.round((float) ypos * od.getSequencesHeight() / alheight)); assertEquals(od.getBoxX(), 0); - assertEquals(od.getBoxY(), (int) (ypos * scaleh * av.getCharHeight()), - 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxY(), + Math.round((float) ypos * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // click above hidden rows so box overlaps // boxY moved upwards, boxHeight remains same - // TODO fails with boxY located at row 497 - correction done by - // setScrollValues - /* ypos = 497; // row 497 - mouseClick(od, 0, (int) (ypos * scaleh * av.getCharHeight())); - assertEquals(od.getBoxX(), 0); - assertEquals( - od.getBoxY(), - (int) ((firstHidden - viewHeight) * scaleh * av.getCharHeight()), - 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5);*/ + ypos = 497; // row 497 + mouseClick(od, 0, + Math.round((float) ypos * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxX(), 0); + assertEquals( + od.getBoxY(), + Math.round((float) (firstHidden - viewHeight) + * od.getSequencesHeight() / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); // click within hidden rows ypos = 505; - // TODO: fails with wrong boxHeight - correction done by setScrollValues(?) - /*mouseClick(od, 0, (int) (ypos * scaleh * av.getCharHeight())); + mouseClick(od, 0, + Math.round((float) ypos * od.getSequencesHeight() / alheight)); assertEquals(od.getBoxX(), 0); assertEquals( od.getBoxY(), - (int) ((firstHidden - viewHeight) * scaleh * av.getCharHeight()), - 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5);*/ + Math.round((firstHidden - viewHeight) * od.getSequencesHeight() + / alheight)); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } /* @@ -1001,10 +957,9 @@ public class OverviewDimensionsTest { */ private void moveViewportH(int startRes) { - int width = av.getEndRes() - av.getStartRes(); - av.setStartRes(startRes); - av.setEndRes(startRes + width); - od.setBoxPosition(); + posProps.setStartRes(startRes); + posProps.setEndRes(startRes + viewWidth - 1); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); } /* @@ -1012,9 +967,9 @@ public class OverviewDimensionsTest { */ private void moveViewportV(int startSeq) { - av.setStartSeq(startSeq); - av.setEndSeq(startSeq + viewHeight); - od.setBoxPosition(); + posProps.setStartSeq(startSeq); + posProps.setEndSeq(startSeq + viewHeight - 1); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); } /* @@ -1022,13 +977,11 @@ public class OverviewDimensionsTest { */ private void moveViewport(int startRes, int startSeq) { - int width = av.getEndRes() - av.getStartRes(); - - av.setStartRes(startRes); - av.setEndRes(startRes + width); - av.setStartSeq(startSeq); - av.setEndSeq(startSeq + viewHeight); - od.setBoxPosition(); + posProps.setStartRes(startRes); + posProps.setEndRes(startRes + viewWidth - 1); + posProps.setStartSeq(startSeq); + posProps.setEndSeq(startSeq + viewHeight - 1); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); } /* @@ -1036,46 +989,48 @@ public class OverviewDimensionsTest { */ private void mouseClick(OverviewDimensions od, int x, int y) { - od.setBoxPositionByMouse(x, y); + od.updateViewportFromMouse(x, y, al.getHiddenSequences(), hiddenCols, + posProps); + // updates require an OverviewPanel to exist which it doesn't here // so call setBoxPosition() as it would be called by the AlignmentPanel // normally - int width = av.getEndRes() - av.getStartRes(); - int height = av.getEndSeq() - av.getStartSeq(); - av.setStartRes(od.getScrollCol()); - av.setEndRes(od.getScrollCol() + width); - av.setStartSeq(od.getScrollRow()); - av.setEndSeq(od.getScrollRow() + height); - od.setBoxPosition(); + + posProps.setStartRes(od.getScrollCol()); + posProps.setEndRes(od.getScrollCol() + viewWidth - 1); + posProps.setStartSeq(od.getScrollRow()); + posProps.setEndSeq(od.getScrollRow() + viewHeight - 1); + od.setBoxPosition(al.getHiddenSequences(), hiddenCols, posProps); } + /* + * Test that the box is positioned with the top left corner at xpos, ypos + * and with the original width and height + */ private void testBoxIsAtClickPoint(int xpos, int ypos) { mouseClick(od, xpos, ypos); - assertEquals(od.getBoxX(), xpos, 1.5); - assertEquals(od.getBoxY(), ypos, 1.5); - assertEquals(od.getBoxWidth(), boxWidth, 1.5); - assertEquals(od.getBoxHeight(), boxHeight, 1.5); + assertEquals(od.getBoxX(), xpos); + assertEquals(od.getBoxY(), ypos); + assertEquals(od.getBoxWidth(), boxWidth); + assertEquals(od.getBoxHeight(), boxHeight); } /* - * Hide sequences between start and end, using hideseq to do the hiding - * (start <= hideseq <= end. Sequence hideseq is not hidden but the others are + * Hide sequences between start and end */ - private void hideSequences(int start, int end, int hideseq) + private void hideSequences(int start, int end) { - SequenceGroup sg = new SequenceGroup(); - List allseqs = av.getAlignment().getSequences(); - for (int i = start; i <= end; ++i) + SequenceI[] allseqs = al.getSequencesArray(); + SequenceGroup theseSeqs = new SequenceGroup(); + + for (int i = start; i <= end; i++) { - sg.addSequence(allseqs.get(i), false); + theseSeqs.addSequence(allseqs[i], false); + al.getHiddenSequences().hideSequence(allseqs[i]); } - av.setSelectionGroup(sg); - /* - * hide group - */ - av.hideSequences(allseqs.get(hideseq), true); + hiddenRepSequences.put(allseqs[start], theseSeqs); } }