X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FSeqCanvasTest.java;h=bcb1cfd7f0c392aebc2ee56bcb2faf0e769282b2;hb=72ac4a5ecabebe8c96feb08c32e5ce1adccc7d46;hp=3722e4780f3c1a309cbc3d38c1b01ea2b2629cc3;hpb=fd81c0b861d73121e3cfded29116690517b902ba;p=jalview.git diff --git a/test/jalview/gui/SeqCanvasTest.java b/test/jalview/gui/SeqCanvasTest.java index 3722e47..bcb1cfd 100644 --- a/test/jalview/gui/SeqCanvasTest.java +++ b/test/jalview/gui/SeqCanvasTest.java @@ -1,3 +1,23 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.gui; import static org.testng.Assert.assertEquals; @@ -9,11 +29,9 @@ import jalview.io.FileLoader; import java.awt.Font; import java.awt.FontMetrics; -import junit.extensions.PA; - import org.testng.annotations.Test; -import sun.swing.SwingUtilities2; +import junit.extensions.PA; public class SeqCanvasTest { @@ -30,6 +48,9 @@ public class SeqCanvasTest AlignmentI al = av.getAlignment(); assertEquals(al.getWidth(), 157); assertEquals(al.getHeight(), 15); + av.getRanges().setStartEndSeq(0, 14); + + SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas; av.setWrapAlignment(true); av.setFont(new Font("SansSerif", Font.PLAIN, 14), true); @@ -38,8 +59,6 @@ public class SeqCanvasTest assertEquals(charHeight, 17); assertEquals(charWidth, 12); - SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas; - /* * first with scales above, left, right */ @@ -47,9 +66,9 @@ public class SeqCanvasTest av.setScaleAboveWrapped(true); av.setScaleLeftWrapped(true); av.setScaleRightWrapped(true); - FontMetrics fm = SwingUtilities2.getFontMetrics(testee, av.getFont()); - int labelWidth = fm.stringWidth("00000"); // width of 3 digits and 2 spaces - assertEquals(labelWidth, 45); // note this is not 5 * charWidth + FontMetrics fm = testee.getFontMetrics(av.getFont()); + int labelWidth = fm.stringWidth("000") + charWidth; + assertEquals(labelWidth, 39); // 3 x 9 + charWidth /* * width 400 pixels leaves (400 - 2*labelWidth) for residue columns @@ -117,8 +136,8 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 19); /* - * turn off West scale - adds labelWidth (45) to available for residues - * which with the 11 remainder makes 56 which is 4 more charWidths rem 8 + * turn off West scale - adds labelWidth (39) to available for residues + * which with the 11 remainder makes 50 which is 4 more charWidths rem 2 */ av.setScaleLeftWrapped(false); wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, @@ -126,9 +145,9 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 23); /* - * add 4 pixels to width to fit in another whole residue column + * add 10 pixels to width to fit in another whole residue column */ - canvasWidth += 3; + canvasWidth += 9; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(wrappedWidth, 23); @@ -138,7 +157,7 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 24); /* - * turn off East scale to gain 45 more pixels (3 columns remainder 9) + * turn off East scale to gain 39 more pixels (3 columns remainder 3) */ av.setScaleRightWrapped(false); wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, @@ -146,15 +165,19 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 27); /* - * add 3 pixels to width to gain a residue column + * add 9 pixels to width to gain a residue column */ - canvasWidth += 3; + canvasWidth += 8; + wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, + canvasHeight); + assertEquals(wrappedWidth, 27); + canvasWidth += 1; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(wrappedWidth, 28); /* - * now West but not East scale - lose 45 pixels or 4 columns + * now West but not East scale - lose 39 pixels or 4 columns */ av.setScaleLeftWrapped(true); wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, @@ -162,9 +185,9 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 24); /* - * adding 9 pixels to width regains one column + * adding 3 pixels to width regains one column */ - canvasWidth += 8; + canvasWidth += 2; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(wrappedWidth, 24); @@ -197,6 +220,7 @@ public class SeqCanvasTest assertEquals(al.getHeight(), 15); av.setWrapAlignment(true); + av.getRanges().setStartEndSeq(0, 14); av.setFont(new Font("SansSerif", Font.PLAIN, 14), true); int charHeight = av.getCharHeight(); int charWidth = av.getCharWidth(); @@ -212,9 +236,9 @@ public class SeqCanvasTest av.setScaleAboveWrapped(true); av.setScaleLeftWrapped(true); av.setScaleRightWrapped(true); - FontMetrics fm = SwingUtilities2.getFontMetrics(testee, av.getFont()); - int labelWidth = fm.stringWidth("00000"); // width of 3 digits and 2 spaces - assertEquals(labelWidth, 45); // note this is not 5 * charWidth + FontMetrics fm = testee.getFontMetrics(av.getFont()); + int labelWidth = fm.stringWidth("000") + charWidth; + assertEquals(labelWidth, 39); // 3 x 9 + charWidth int annotationHeight = testee.getAnnotationHeight(); /* @@ -274,4 +298,42 @@ public class SeqCanvasTest testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3); } + + /** + * Test simulates loading an unwrapped alignment, shrinking it vertically so + * not all sequences are visible, then changing to wrapped mode. The ranges + * endSeq should be unchanged, but the vertical repeat height should include + * all sequences. + */ + @Test(groups = "Functional") + public void testCalculateWrappedGeometry_fromScrolled() + { + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + "examples/uniref50.fa", DataSourceType.FILE); + AlignViewport av = af.getViewport(); + AlignmentI al = av.getAlignment(); + assertEquals(al.getWidth(), 157); + assertEquals(al.getHeight(), 15); + av.getRanges().setStartEndSeq(0, 3); + av.setShowAnnotation(false); + av.setScaleAboveWrapped(true); + + SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas; + + av.setWrapAlignment(true); + av.setFont(new Font("SansSerif", Font.PLAIN, 14), true); + int charHeight = av.getCharHeight(); + int charWidth = av.getCharWidth(); + assertEquals(charHeight, 17); + assertEquals(charWidth, 12); + + int canvasWidth = 400; + int canvasHeight = 300; + testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + + assertEquals(av.getRanges().getEndSeq(), 3); // unchanged + int repeatingHeight = (int) PA.getValue(testee, + "wrappedRepeatHeightPx"); + assertEquals(repeatingHeight, charHeight * (2 + al.getHeight())); + } }