Merge branch 'improvement/JAL-4409_implement_extra_schemes_in_getdown' into develop
[jalview.git] / test / jalview / project / Jalview2xmlTests.java
index 9c1b32f..8b2fa74 100644 (file)
@@ -32,7 +32,6 @@ import java.awt.Color;
 import java.awt.Rectangle;
 import java.io.File;
 import java.io.IOException;
-import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.HashMap;
@@ -251,8 +250,9 @@ public class Jalview2xmlTests extends Jalview2xmlBase
 
     boolean diffseqcols = false, diffgseqcols = false;
     SequenceI[] sqs = af.getViewport().getAlignment().getSequencesArray();
-    for (int p = 0, pSize = af.getViewport().getAlignment()
-            .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++)
+    for (int p = 0,
+            pSize = af.getViewport().getAlignment().getWidth(); p < pSize
+                    && (!diffseqcols || !diffgseqcols); p++)
     {
       if (_rcs.findColour(sqs[0].getCharAt(p), p, sqs[0], null, 0f) != _rcs
               .findColour(sqs[5].getCharAt(p), p, sqs[5], null, 0f))
@@ -271,8 +271,9 @@ public class Jalview2xmlTests extends Jalview2xmlBase
     assertTrue(__rcs.isSeqAssociated(),
             "Group Annotation colourscheme wasn't sequence associated");
 
-    for (int p = 0, pSize = af.getViewport().getAlignment()
-            .getWidth(); p < pSize && (!diffseqcols || !diffgseqcols); p++)
+    for (int p = 0,
+            pSize = af.getViewport().getAlignment().getWidth(); p < pSize
+                    && (!diffseqcols || !diffgseqcols); p++)
     {
       if (_rgcs.findColour(sqs[1].getCharAt(p), p, sqs[1], null,
               0f) != _rgcs.findColour(sqs[2].getCharAt(p), p, sqs[2], null,
@@ -1476,7 +1477,17 @@ public class Jalview2xmlTests extends Jalview2xmlBase
     assertEquals(ov1.getCanvas().getResidueColour(), Color.white);
     assertEquals(ov1.getCanvas().getHiddenColour(), Color.yellow);
     assertEquals(ov1.getTitle(), "Overview examples/uniref50.fa Original");
-    assertEquals(ov1.getFrameBounds(), new Rectangle(20, 30, 200, 400));
+
+    double scaling = jalview.gui.JvSwingUtilsTest.getScaling(ov1);
+    // int width = scaling == 1.0 ? 225 : 200;
+    // int width = scaling == 1.0 ? 225 : 200;
+    Rectangle ov1Rectangle = ov1.getFrameBounds();
+    assertEquals(ov1Rectangle,
+            new Rectangle(20, 30, ov1Rectangle.width, 400));
+    int width = ov1Rectangle.width;
+    assertTrue(width >= 200 && width <= 225,
+            "Rectangle width was not in the range expected (200<=width<=225; width="
+                    + width + ")");
     assertTrue(ov1.isShowHiddenRegions());
   }
 
@@ -1550,12 +1561,12 @@ public class Jalview2xmlTests extends Jalview2xmlBase
   @Test(groups = { "Functional" })
   public void testMatrixToFloatsAndBack()
   {
-    int imax=2000;
-    int i=imax;
-    SequenceI sq = new Sequence("dummy","SEQ");
-    while (sq.getLength()<i)
+    int imax = 2000;
+    int i = imax;
+    SequenceI sq = new Sequence("dummy", "SEQ");
+    while (sq.getLength() < i)
     {
-      sq.setSequence(sq.getSequenceAsString()+'Q');
+      sq.setSequence(sq.getSequenceAsString() + 'Q');
     }
     float[][] paevals = new float[i][i];
     for (i = imax - 1; i >= 0; i--)
@@ -1575,16 +1586,17 @@ public class Jalview2xmlTests extends Jalview2xmlBase
             sq.getLength(), sq.getLength());
     assertEquals(vals[3][4], paevals[3][4]);
     assertEquals(vals[4][3], paevals[4][3]);
-    
+
     // test recovery
-    for (i=0;i<imax;i++)
+    for (i = 0; i < imax; i++)
     {
-      for (int j=0;j<imax;j++)
+      for (int j = 0; j < imax; j++)
       {
-        assertEquals(vals[i][j],paevals[i][j]);
+        assertEquals(vals[i][j], paevals[i][j]);
       }
     }
   }
+
   @Test(groups = { "Functional" })
   public void testPAEsaveRestore() throws Exception
   {
@@ -1614,7 +1626,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase
             sq.getLength(), sq.getLength());
     assertEquals(vals[3][4], paevals[3][4]);
     assertEquals(vals[4][3], paevals[4][3]);
-    dummyMat.setGroupSet(GroupSet.makeGroups(dummyMat, false,0.5f, false));
+    dummyMat.setGroupSet(GroupSet.makeGroups(dummyMat, false, 0.5f, false));
     Assert.assertNotSame(dummyMat.getNewick(), "");
     AlignmentAnnotation paeCm = sq.addContactList(dummyMat);
     al.addAnnotation(paeCm);
@@ -1688,12 +1700,13 @@ public class Jalview2xmlTests extends Jalview2xmlBase
     Assert.assertEquals(restoredMat.getNewick(), dummyMat.getNewick());
 
     // verify no duplicate PAE matrix data when new view created and saved
-    
+
     // add reference annotations to view first, then copy
-    AlignmentUtils.addReferenceAnnotationTo(newAl, newAl.getSequenceAt(0), newSeq.getAnnotation()[0],null);
-    
+    AlignmentUtils.addReferenceAnnotationTo(newAl, newAl.getSequenceAt(0),
+            newSeq.getAnnotation()[0], null);
+
     AlignmentViewPanel newview = af.newView("copy of PAE", true);
-    
+
     // redundant asserts here check all is good with the new view firest...
     AlignmentI newviewAl = newview.getAlignment();
     SequenceI newviewSeq = newviewAl.getSequenceAt(0);
@@ -1702,16 +1715,17 @@ public class Jalview2xmlTests extends Jalview2xmlBase
     Assert.assertEquals(newviewSeq.getAnnotation()[0].graph, paeCm.graph);
     // check we have just one contact matrix mapping
     Assert.assertEquals(newviewSeq.getContactMaps().size(), 1);
-    
+
     // and can be found for the annotation on the sequence
     ContactMatrixI newviewMat = newviewSeq
             .getContactMatrixFor(newviewSeq.getAnnotation()[0]);
     Assert.assertNotNull(newviewMat);
 
     Assert.assertTrue(newviewMat == restoredMat);
-    
-    // save the two views and restore. Now look at visible annotation to check all views have shared refs.
-    
+
+    // save the two views and restore. Now look at visible annotation to check
+    // all views have shared refs.
+
     tfile = File.createTempFile("testStoreAndRecoverPAEmatrixTwoViews",
             ".jvp");
     new Jalview2XML(false).saveState(tfile);
@@ -1723,19 +1737,99 @@ public class Jalview2xmlTests extends Jalview2xmlBase
     AlignmentAnnotation view1aa = newAl.getSequenceAt(0).getAnnotation()[0];
 
     newviewAl = af.getAlignPanels().get(1).getAlignment();
-    AlignmentAnnotation view2aa = newviewAl.getSequenceAt(0).getAnnotation()[0];
+    AlignmentAnnotation view2aa = newviewAl.getSequenceAt(0)
+            .getAnnotation()[0];
 
-    // annotations are shared across alignment views - so should still have an identical pair of annotations.
-    Assert.assertTrue(view1aa==view2aa);
+    // annotations are shared across alignment views - so should still have an
+    // identical pair of annotations.
+    Assert.assertTrue(view1aa == view2aa);
     // identical annotations means identical contact matrix mappings
-    Assert.assertEquals(newAl.getDataset().getSequenceAt(0).getContactMaps().size(), 1);
+    Assert.assertEquals(
+            newAl.getDataset().getSequenceAt(0).getContactMaps().size(), 1);
 
-    // TODO Verify when distinct mappable PAEs are created, only one PAE dataset is actually held.
+    // TODO Verify when distinct mappable PAEs are created, only one PAE dataset
+    // is actually held.
     // Assert.assertTrue(view1aa!=view2aa);
     // restoredMat = newAl.getContactMatrixFor(view1aa);
     // newviewMat = newviewAl.getContactMatrixFor(view2aa);
     // Assert.assertTrue(restoredMat!=newviewMat);
-    
+
+  }
+
+  @Test(groups = "Functional")
+  public void testStoreAndRestoreIDwidthAndAnnotationHeight()
+          throws IOException
+  {
+    Desktop.instance.closeAll_actionPerformed(null);
+    final String SECONDVIEW = "With Diffferent IDwidth";
+    // create a new tempfile
+    File tempfile = File.createTempFile("jvIdWidthStoreRestore", "jvp");
+
+    AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(
+            "examples/exampleFile.jvp", DataSourceType.FILE);
+    assertNotNull(af, "Didn't read in the example file correctly.");
+    // FIXME JAL-4281 test made platform dependent to pass, but probably
+    // shouldn't be platform dependent
+    int idWidth = af.alignPanel.getAlignViewport().getIdWidth();
+    double scaling = jalview.gui.JvSwingUtilsTest.getScaling(af.alignPanel);
+    // int expectedWidth = Platform.isMac() ? 144 : Platform.isLinux() ? scaling
+    // == 1.0 ? 131 : 128 : 138;
+    int minExpectedWidth = 128;
+    int maxExpectedWidth = 144;
+    assertTrue(minExpectedWidth <= idWidth && maxExpectedWidth >= idWidth,
+            "Legacy project import should have fixed ID width. Not within the expected range ("
+                    + minExpectedWidth + "-" + maxExpectedWidth + ")");
+    assertTrue(
+            af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+
+    af.alignPanel.getAlignViewport().setIdWidth(100);
+    af.alignPanel.updateLayout();
+    assertTrue(
+            af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+
+    Jalview2XML jv2xml = new jalview.project.Jalview2XML(false);
+    tempfile.delete();
+    jv2xml.saveState(tempfile);
+    assertTrue(jv2xml.errorMessage == null,
+            "Failed to save dummy project with PCA: test broken");
+    af = null;
+    // load again.
+    Desktop.instance.closeAll_actionPerformed(null);
+    af = new FileLoader().LoadFileWaitTillLoaded(
+            tempfile.getCanonicalPath(), DataSourceType.FILE);
+    assertTrue(
+            af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+    assertEquals(af.alignPanel.getAlignViewport().getIdWidth(), 100,
+            "New project exported and import should have adjusted ID width");
+
+    af.alignPanel.getAlignViewport().setIdWidth(100);
+    af.alignPanel.updateLayout();
+    assertTrue(
+            af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+
+    // now make it autoadjusted
+    af.alignPanel.getAlignViewport().setIdWidth(-1);
+    af.alignPanel.getIdPanel().getIdCanvas().setManuallyAdjusted(false);
+    af.alignPanel.updateLayout();
+    assertFalse(
+            af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+    assertTrue(af.alignPanel.getAlignViewport().getIdWidth() > -1,
+            "New project exported and import should have adjusted ID width");
+
+    jv2xml = new jalview.project.Jalview2XML(false);
+    tempfile.delete();
+    jv2xml.saveState(tempfile);
+    assertTrue(jv2xml.errorMessage == null,
+            "Failed to save dummy project with PCA: test broken");
+    af = null;
+    // load again.
+    Desktop.instance.closeAll_actionPerformed(null);
+    af = new FileLoader().LoadFileWaitTillLoaded(
+            tempfile.getCanonicalPath(), DataSourceType.FILE);
+    assertFalse(
+            af.alignPanel.getIdPanel().getIdCanvas().isManuallyAdjusted());
+    assertTrue(af.alignPanel.getAlignViewport().getIdWidth() > -1,
+            "New project exported and import should have adjusted ID width");
   }
 
 }