X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fgui%2FAlignmentPanelTest.java;h=caa4e2294c433ed8979c5213548bc70c28332af1;hb=e83ce5d8ef826fc0b509a51f154abdf734501077;hp=85ca37c9482bd22616628c13b9d2854879b73d9f;hpb=ad6e0dcf682399eb8b7a0ac49d3fcc63f4f991f2;p=jalview.git diff --git a/test/jalview/gui/AlignmentPanelTest.java b/test/jalview/gui/AlignmentPanelTest.java index 85ca37c..caa4e22 100644 --- a/test/jalview/gui/AlignmentPanelTest.java +++ b/test/jalview/gui/AlignmentPanelTest.java @@ -22,6 +22,20 @@ package jalview.gui; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.event.MouseEvent; +import java.lang.reflect.InvocationTargetException; + +import javax.swing.SwingUtilities; + +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; import jalview.api.AlignViewportI; import jalview.bin.Cache; @@ -30,23 +44,19 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.SequenceI; import jalview.io.DataSourceType; import jalview.io.FileLoader; +import jalview.util.Platform; import jalview.viewmodel.ViewportRanges; -import java.awt.Dimension; -import java.awt.Font; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - public class AlignmentPanelTest { AlignFrame af; @BeforeMethod(alwaysRun = true) - public void setUp() + public void setUp() throws InvocationTargetException, InterruptedException { - Jalview.main(new String[] { "-nonews", "-props", - "test/jalview/testProps.jvprops" }); + Jalview.main( + new String[] + { "--nonews", "--props", "test/jalview/testProps.jvprops" }); Cache.applicationProperties.setProperty("SHOW_IDENTITY", Boolean.TRUE.toString()); @@ -54,20 +64,29 @@ public class AlignmentPanelTest DataSourceType.FILE); /* + * ensure the panel has been repainted and so ViewportRanges set + */ + SwingUtilities.invokeAndWait(new Runnable() + { + @Override + public void run() + { + af.repaint(); + } + }); + + /* * wait for Consensus thread to complete */ - synchronized (this) + do { - while (af.getViewport().getConsensusSeq() == null) + try + { + Thread.sleep(50); + } catch (InterruptedException x) { - try - { - wait(50); - } catch (InterruptedException e) - { - } } - } + } while (af.getViewport().getCalcManager().isWorking()); } /** @@ -117,8 +136,8 @@ public class AlignmentPanelTest scrollpos = 130; af.getViewport().showAllHiddenColumns(); af.alignPanel.setScrollValues(scrollpos, 5); - assertEquals(ranges.getEndRes(), af.getViewport() - .getAlignment().getWidth() - 1); + assertEquals(ranges.getEndRes(), + af.getViewport().getAlignment().getWidth() - 1); // now hide some columns, and scroll to position within // distance of the end of the alignment @@ -126,9 +145,11 @@ public class AlignmentPanelTest // columns af.getViewport().hideColumns(30, 50); af.alignPanel.setScrollValues(scrollpos, 5); - assertEquals(ranges.getEndRes(), af.getViewport() - .getAlignment().getWidth() - 1 - 21); // 21 is the number of hidden - // columns + assertEquals(ranges.getEndRes(), + af.getViewport().getAlignment().getWidth() - 1 - 21); // 21 is the + // number of + // hidden + // columns } /** @@ -158,8 +179,8 @@ public class AlignmentPanelTest } /** - * Test the variant of calculateIdWidth that only recomputes the width if it is - * not already saved in the viewport (initial value is -1) + * Test the variant of calculateIdWidth that only recomputes the width if it + * is not already saved in the viewport (initial value is -1) */ @Test(groups = "Functional") public void testCalculateIdWidth_noArgs() @@ -190,9 +211,10 @@ public class AlignmentPanelTest /** * Test the variant of calculateIdWidth that computes the longest of any - * sequence name or annotation label width + * sequence name or annotation label width FIXME: JAL-4291: test needs + * updating for JAL-244 and JAL-4091 */ - @Test(groups = "Functional") + @Test(groups = "Functional", enabled = false) public void testCalculateIdWidth_withMaxWidth() { AlignViewportI av = af.alignPanel.getAlignViewport(); @@ -201,13 +223,20 @@ public class AlignmentPanelTest av.setShowAnnotation(false); av.setIdWidth(18); + FontMetrics fmfor = new Container() + .getFontMetrics(new Font(af.viewport.font.getName(), + Font.ITALIC, af.viewport.font.getSize())); + /* * note 4 pixels 'padding' are added to the longest seq name/annotation label */ Dimension d = af.alignPanel.calculateIdWidth(2000); + // Assumption ID_WIDTH_PADDING == 4 + int expwidth = 3 + fmfor.stringWidth("Conservation"); + assertEquals(d.width, 166); // 4 + pixel width of "Q93Z60_ARATH/1-118" assertEquals(d.height, 12); // fixed value (not used?) - assertEquals(av.getIdWidth(), 18); // not changed by this method + assertEquals(av.getIdWidth(), expwidth); // not changed by this method /* * make the longest sequence name longer @@ -227,7 +256,11 @@ public class AlignmentPanelTest AlignmentAnnotation aa = av.getAlignment().getAlignmentAnnotation()[0]; aa.label = "THIS IS A VERY LONG LABEL INDEED"; d = af.alignPanel.calculateIdWidth(2000); - assertEquals(d.width, 229); // 4 + pixel width of "THIS IS A VERY LONG LABEL INDEED" + // Assumption ID_WIDTH_PADDING == 3 + expwidth = 3 + fmfor.stringWidth(aa.label); + + assertEquals(d.width, expwidth); // 228 == ID_WIDTH_PADDING + pixel width of + // "THIS IS A VERY LONG LABEL INDEED" assertEquals(d.height, 12); /* @@ -239,15 +272,19 @@ public class AlignmentPanelTest assertEquals(d.height, 12); } - @Test(groups = "Functional") + @Test(groups = { "Functional", "Not-bamboo" }) public void testGetVisibleWidth() { + double scaling = jalview.gui.JvSwingUtilsTest.getScaling(af.alignPanel); /* * width for onscreen rendering is IDPanel width */ int w = af.alignPanel.getVisibleIdWidth(true); assertEquals(w, af.alignPanel.getIdPanel().getWidth()); - assertEquals(w, 115); + + // different scaling (1.0, 2.0) gives different results + int expectedWidth = scaling == 1.0 ? 112 : Platform.isMac() ? 115 : 107; + assertEquals(w, expectedWidth); /* * width for offscreen rendering is the same @@ -267,6 +304,98 @@ public class AlignmentPanelTest * preference for auto id width overrides fixed width */ Cache.setProperty("FIGURE_AUTOIDWIDTH", Boolean.TRUE.toString()); - assertEquals(115, af.alignPanel.getVisibleIdWidth(false)); + w = af.alignPanel.getVisibleIdWidth(false); + // allow some leeway for different OS renderings + assertTrue(w > 105 && w < 120); + // different scaling (1.0, 2.0) gives different results + assertEquals(w, expectedWidth); + } + + @Test(groups = { "Functional", "Not-bamboo" }) + public void testresetIdWidth() + { + double scaling = jalview.gui.JvSwingUtilsTest.getScaling(af.alignPanel); + /* + * width for onscreen rendering is IDPanel width + */ + int w = af.alignPanel.getVisibleIdWidth(true); + int actual = af.alignPanel.getIdPanel().getWidth(); + assertEquals(w, actual); + // allow some leeway for different OS renderings + assertTrue(w > 105 && w < 120); + // different scaling (1.0, 2.0) gives different results + int expectedWidth = scaling == 1.0 ? 112 : Platform.isMac() ? 115 : 107; + assertEquals(w, expectedWidth); + + // manually adjust + af.viewport.setIdWidth(200); + // fake mouse drag sets manuallyAdjusted to true (0,0 not moving mouse) + MouseEvent drag = new MouseEvent(af.alignPanel, + MouseEvent.MOUSE_DRAGGED, System.currentTimeMillis(), 0, 0, 0, + MouseEvent.BUTTON1, false); + af.alignPanel.idwidthAdjuster.mouseDragged(drag); + af.alignPanel.paintComponent(af.alignPanel.getGraphics()); + w = af.alignPanel.calculateIdWidth().width; + assertTrue( + af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted()); + actual = af.alignPanel.getIdPanel().getWidth(); + assertEquals(w, actual); + + af.viewport.setIdWidth(-1); + af.alignPanel.calculateIdWidth(); + af.alignPanel.getIdPanel().getIdCanvas().setManuallyAdjusted(false); + w = af.alignPanel.calculateIdWidth().width; + af.alignPanel.paintComponent(af.alignPanel.getGraphics()); + + actual = af.alignPanel.getIdPanel().getWidth(); + assertEquals(w, actual); + + // setting a negative IdWidth and then running calculateIdWidth resets width + // to optimal id width + // allow some leeway for different OS renderings + assertTrue(w > 105 && w < 120); + // different scaling (1.0, 2.0) gives different results + assertEquals(w, expectedWidth); + } + + @Test(groups = "Functional") + public void testSetOverviewTitle() + { + OverviewPanel ov1 = this.af.openOverviewPanel(true); + String alignFrameTitle = af.getTitle(); + assertEquals(ov1.getTitle(), "Overview " + alignFrameTitle); + + /* + * on New View, existing overview should get " Original" added to title + * and new view's overview should get " View 1" added + */ + af.newView_actionPerformed(null); + assertEquals(ov1.getTitle(), + "Overview " + alignFrameTitle + " Original"); + OverviewPanel ov2 = this.af.openOverviewPanel(true); + assertEquals(ov2.getTitle(), "Overview " + alignFrameTitle + " View 1"); + } + + @Test(groups = "Functional") + public void testSetOverviewTitle_automaticOverview() + { + Cache.setProperty("SHOW_OVERVIEW", "true"); + AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded( + "examples/uniref50.fa", DataSourceType.FILE); + OverviewPanel ov1 = alignFrame.alignPanel.getOverviewPanel(); + assertNotNull(ov1); + String alignFrameTitle = alignFrame.getTitle(); + assertEquals(ov1.getTitle(), "Overview " + alignFrameTitle); + + /* + * on New View, existing overview should get " Original" added to title + * and new view's automatic overview should have " View 1" added + */ + alignFrame.newView_actionPerformed(null); + assertEquals(ov1.getTitle(), + "Overview " + alignFrameTitle + " Original"); + OverviewPanel ov2 = alignFrame.alignPanel.getOverviewPanel(); + assertNotNull(ov2); + assertEquals(ov2.getTitle(), "Overview " + alignFrameTitle + " View 1"); } -} +} \ No newline at end of file