Merge branch 'develop' into features/JAL-4219_extended_fasta_rna_ss
[jalview.git] / test / jalview / gui / AlignmentPanelTest.java
index 892cdef..caa4e22 100644 (file)
@@ -23,11 +23,13 @@ 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;
@@ -42,6 +44,7 @@ import jalview.datamodel.AlignmentAnnotation;
 import jalview.datamodel.SequenceI;
 import jalview.io.DataSourceType;
 import jalview.io.FileLoader;
+import jalview.util.Platform;
 import jalview.viewmodel.ViewportRanges;
 
 public class AlignmentPanelTest
@@ -208,10 +211,10 @@ public class AlignmentPanelTest
 
   /**
    * Test the variant of calculateIdWidth that computes the longest of any
-   * sequence name or annotation label width
-   * FIXME: JAL-4291: test needs updating for JAL-244 and JAL-4091
+   * sequence name or annotation label width FIXME: JAL-4291: test needs
+   * updating for JAL-244 and JAL-4091
    */
-  @Test(groups = "Functional",enabled=false)
+  @Test(groups = "Functional", enabled = false)
   public void testCalculateIdWidth_withMaxWidth()
   {
     AlignViewportI av = af.alignPanel.getAlignViewport();
@@ -272,12 +275,16 @@ public class AlignmentPanelTest
   @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
@@ -297,7 +304,58 @@ 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")