X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fproject%2FJalview2xmlTests.java;fp=test%2Fjalview%2Fproject%2FJalview2xmlTests.java;h=8b2fa74ecd4a9caf287b52fef5070e47b3e1fe49;hb=e83ce5d8ef826fc0b509a51f154abdf734501077;hp=37f946b95e9295e245dfda69d562627e51f415bc;hpb=786475501a15799d7c4058dbf74e4bf896d03736;p=jalview.git diff --git a/test/jalview/project/Jalview2xmlTests.java b/test/jalview/project/Jalview2xmlTests.java index 37f946b..8b2fa74 100644 --- a/test/jalview/project/Jalview2xmlTests.java +++ b/test/jalview/project/Jalview2xmlTests.java @@ -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; @@ -47,6 +46,7 @@ import org.testng.AssertJUnit; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import jalview.analysis.AlignmentUtils; import jalview.analysis.scoremodels.SimilarityParams; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; @@ -66,6 +66,7 @@ import jalview.datamodel.HiddenSequences; import jalview.datamodel.Mapping; import jalview.datamodel.PDBEntry; import jalview.datamodel.PDBEntry.Type; +import jalview.datamodel.Sequence; import jalview.datamodel.Sequence.DBModList; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceFeature; @@ -249,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)) @@ -269,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, @@ -287,12 +290,12 @@ public class Jalview2xmlTests extends Jalview2xmlBase @Test(groups = { "Functional" }) public void gatherViewsHere() throws Exception { - int origCount = Desktop.getAlignFrames() == null ? 0 - : Desktop.getAlignFrames().length; + int origCount = Desktop.getDesktopAlignFrames() == null ? 0 + : Desktop.getDesktopAlignFrames().length; AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( "examples/exampleFile_2_7.jar", DataSourceType.FILE); assertNotNull(af, "Didn't read in the example file correctly."); - assertTrue(Desktop.getAlignFrames().length == 1 + origCount, + assertTrue(Desktop.getDesktopAlignFrames().length == 1 + origCount, "Didn't gather the views in the example file."); } @@ -430,7 +433,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( "examples/exampleFile_2_7.jar", DataSourceType.FILE); - Assert.assertEquals(Desktop.getAlignFrames().length, 1); + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, 1); String afid = af.getViewport().getSequenceSetId(); // check FileLoader returned a reference to the one alignFrame that is @@ -440,8 +443,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase Desktop.explodeViews(af); - int oldviews = Desktop.getAlignFrames().length; - Assert.assertEquals(Desktop.getAlignFrames().length, + int oldviews = Desktop.getDesktopAlignFrames().length; + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, Desktop.getAlignmentPanels(afid).length); File tfile = File.createTempFile("testStoreAndRecoverExpanded", ".jvp"); try @@ -455,14 +458,14 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.fail("Didn't save the expanded view state", e); } Desktop.instance.closeAll_actionPerformed(null); - if (Desktop.getAlignFrames() != null) + if (Desktop.getDesktopAlignFrames() != null) { - Assert.assertEquals(Desktop.getAlignFrames().length, 0); + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, 0); } af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), DataSourceType.FILE); Assert.assertNotNull(af); - Assert.assertEquals(Desktop.getAlignFrames().length, + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, Desktop.getAlignmentPanels( af.getViewport().getSequenceSetId()).length); Assert.assertEquals(Desktop @@ -519,9 +522,9 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.fail("Didn't save the expanded view state", e); } Desktop.instance.closeAll_actionPerformed(null); - if (Desktop.getAlignFrames() != null) + if (Desktop.getDesktopAlignFrames() != null) { - Assert.assertEquals(Desktop.getAlignFrames().length, 0); + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, 0); } af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), @@ -698,9 +701,9 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.fail("Didn't save the expanded view state", e); } Desktop.instance.closeAll_actionPerformed(null); - if (Desktop.getAlignFrames() != null) + if (Desktop.getDesktopAlignFrames() != null) { - Assert.assertEquals(Desktop.getAlignFrames().length, 0); + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, 0); } af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), @@ -792,9 +795,9 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.fail("Didn't save the state", e); } Desktop.instance.closeAll_actionPerformed(null); - if (Desktop.getAlignFrames() != null) + if (Desktop.getDesktopAlignFrames() != null) { - Assert.assertEquals(Desktop.getAlignFrames().length, 0); + Assert.assertEquals(Desktop.getDesktopAlignFrames().length, 0); } AlignFrame restoredFrame = new FileLoader().LoadFileWaitTillLoaded( @@ -1217,7 +1220,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase assertNotNull(af); AlignmentI ds = null; - for (AlignFrame alignFrame : Desktop.getAlignFrames()) + for (AlignFrame alignFrame : Desktop.getDesktopAlignFrames()) { if (ds == null) { @@ -1474,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()); } @@ -1546,6 +1559,45 @@ 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) + { + sq.setSequence(sq.getSequenceAsString() + 'Q'); + } + float[][] paevals = new float[i][i]; + for (i = imax - 1; i >= 0; i--) + { + for (int j = 0; j <= i; j++) + { + paevals[i][j] = ((i - j < 2) + || ((i > 1 && i < 5) && (j > 1 && i < 5))) ? 1 : 0f; + paevals[j][i] = -paevals[i][j]; + } + } + PAEContactMatrix dummyMat = new PAEContactMatrix(sq, paevals); + String content = ContactMatrix.contactToFloatString(dummyMat); + Assert.assertTrue(content.contains("\t1.")); // at least one element must be + // 1 + float[][] vals = ContactMatrix.fromFloatStringToContacts(content, + 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 (int j = 0; j < imax; j++) + { + assertEquals(vals[i][j], paevals[i][j]); + } + } + } + + @Test(groups = { "Functional" }) public void testPAEsaveRestore() throws Exception { Desktop.instance.closeAll_actionPerformed(null); @@ -1563,7 +1615,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase { paevals[i][j] = ((i - j < 2) || ((i > 1 && i < 5) && (j > 1 && i < 5))) ? 1 : 0f; - paevals[j][i] = paevals[i][j]; + paevals[j][i] = -paevals[i][j]; } } PAEContactMatrix dummyMat = new PAEContactMatrix(sq, paevals); @@ -1573,7 +1625,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase float[][] vals = ContactMatrix.fromFloatStringToContacts(content, sq.getLength(), sq.getLength()); assertEquals(vals[3][4], paevals[3][4]); - dummyMat.setGroupSet(GroupSet.makeGroups(dummyMat, 0.5f, false)); + assertEquals(vals[4][3], paevals[4][3]); + dummyMat.setGroupSet(GroupSet.makeGroups(dummyMat, false, 0.5f, false)); Assert.assertNotSame(dummyMat.getNewick(), ""); AlignmentAnnotation paeCm = sq.addContactList(dummyMat); al.addAnnotation(paeCm); @@ -1645,6 +1698,138 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.assertEquals(restoredMat.getGroups(), dummyMat.getGroups()); Assert.assertEquals(restoredMat.hasTree(), dummyMat.hasTree()); 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); + + 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); + // check annotation of the expected type exists + Assert.assertEquals(newviewSeq.getAnnotation().length, 1); + 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. + + tfile = File.createTempFile("testStoreAndRecoverPAEmatrixTwoViews", + ".jvp"); + new Jalview2XML(false).saveState(tfile); + Desktop.instance.closeAll_actionPerformed(null); + + af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), + DataSourceType.FILE); + newAl = af.getAlignPanels().get(0).getAlignment(); + AlignmentAnnotation view1aa = newAl.getSequenceAt(0).getAnnotation()[0]; + + newviewAl = af.getAlignPanels().get(1).getAlignment(); + 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); + // identical annotations means identical contact matrix mappings + Assert.assertEquals( + newAl.getDataset().getSequenceAt(0).getContactMaps().size(), 1); + + // 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"); } }