X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FJalview2xmlTests.java;fp=test%2Fjalview%2Fio%2FJalview2xmlTests.java;h=38153df44959f69daef08227e56ea89e800cda2f;hb=8f5031f8cc3b6da5ce8d639a5b6e0365c1904623;hp=a77e10a8bae967e79b97d09dae7fe9f2107e923e;hpb=69f930f786254940db0a7c247cc350098e940bbf;p=jalview.git diff --git a/test/jalview/io/Jalview2xmlTests.java b/test/jalview/io/Jalview2xmlTests.java index a77e10a..38153df 100644 --- a/test/jalview/io/Jalview2xmlTests.java +++ b/test/jalview/io/Jalview2xmlTests.java @@ -22,6 +22,8 @@ package jalview.io; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; +import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; import jalview.api.AlignViewportI; @@ -31,6 +33,7 @@ import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.HiddenSequences; +import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; @@ -437,12 +440,8 @@ public class Jalview2xmlTests assertTrue("Didn't read in the example file correctly.", af != null); String afid = af.getViewport().getSequenceSetId(); - /* - * remember representative and hidden sequences marked - * on each panel - */ + // remember reference sequence for each panel Map refseqs = new HashMap(); - Map> hiddenSeqNames = new HashMap>(); /* * mark sequence 2, 3, 4.. in panels 1, 2, 3... @@ -456,31 +455,7 @@ public class Jalview2xmlTests int repIndex = n % alignment.getHeight(); SequenceI rep = alignment.getSequenceAt(repIndex); refseqs.put(ap.getViewName(), rep); - List hiddenNames = new ArrayList(); - hiddenSeqNames.put(ap.getViewName(), hiddenNames); - - /* - * hide rep sequence and the one before it - */ - SequenceI seqToHide = alignment.getSequenceAt(repIndex); - SequenceGroup sg = new SequenceGroup(); - sg.addSequence(seqToHide, false); - SequenceI precedingSeq = alignment.getSequenceAt(repIndex - 1); - sg.addSequence(precedingSeq, false); - av.setSelectionGroup(sg); - ((AlignmentViewport) av).hideSequences(seqToHide, true); - /* - * record names of hidden sequences - */ - HiddenSequences hs = alignment.getHiddenSequences(); - for (SequenceI seq : hs.hiddenSequences) - { - if (seq != null) - { - hiddenNames.add(seq.getName()); - } - } // code from mark/unmark sequence as reference in jalview.gui.PopupMenu // todo refactor this to an alignment view controller av.setDisplayReferenceSeq(true); @@ -526,16 +501,6 @@ public class Jalview2xmlTests "Display reference sequence view setting not set."); Assert.assertTrue(ap.getAlignViewport().isColourByReferenceSeq(), "Colour By Reference Seq view setting not set."); - - /* - * verify hidden sequences in restored panel - */ - List hidden = hiddenSeqNames.get(ap.getViewName()); - HiddenSequences hs = alignment.getHiddenSequences(); - assertEquals( - "wrong number of restored hidden sequences in " - + ap.getViewName(), - hidden.size(), hs.getSize()); } } @@ -592,4 +557,126 @@ public class Jalview2xmlTests assertFalse(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.8.2b1")); assertFalse(Jalview2XML.isVersionStringLaterThan("2.8.0b2", "2.8.0b1")); } + + /** + * Test save and reload of a project with a different sequence group (and + * representative sequence) in each view. + * + * @throws Exception + */ + @Test(groups = { "Functional" }) + public void testStoreAndRecoverGroupRepSeqs() throws Exception + { + Desktop.instance.closeAll_actionPerformed(null); + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + "examples/uniref50.fa", FormatAdapter.FILE); + assertTrue("Didn't read in the example file correctly.", af != null); + String afid = af.getViewport().getSequenceSetId(); + // make a second view of the alignment + af.newView_actionPerformed(null); + + /* + * remember representative and hidden sequences marked + * on each panel + */ + Map repSeqs = new HashMap(); + Map> hiddenSeqNames = new HashMap>(); + + /* + * mark sequence 2, 3, 4.. in panels 1, 2, 3... + * as reference sequence for itself and the preceding sequence + */ + int n = 1; + for (AlignmentViewPanel ap : Desktop.getAlignmentPanels(afid)) + { + AlignViewportI av = ap.getAlignViewport(); + AlignmentI alignment = ap.getAlignment(); + int repIndex = n % alignment.getHeight(); + // ensure at least one preceding sequence i.e. index >= 1 + repIndex = Math.max(repIndex, 1); + SequenceI repSeq = alignment.getSequenceAt(repIndex); + repSeqs.put(ap.getViewName(), repSeq); + List hiddenNames = new ArrayList(); + hiddenSeqNames.put(ap.getViewName(), hiddenNames); + + /* + * have rep sequence represent itself and the one before it + * this hides the group (except for the rep seq) + */ + SequenceGroup sg = new SequenceGroup(); + sg.addSequence(repSeq, false); + SequenceI precedingSeq = alignment.getSequenceAt(repIndex - 1); + sg.addSequence(precedingSeq, false); + sg.setSeqrep(repSeq); + assertTrue(sg.getSequences().contains(repSeq)); + assertTrue(sg.getSequences().contains(precedingSeq)); + av.setSelectionGroup(sg); + assertSame(repSeq, sg.getSeqrep()); + + /* + * represent group with sequence adds to a map of hidden rep sequences + * (it does not create a group on the alignment) + */ + ((AlignmentViewport) av).hideSequences(repSeq, true); + assertSame(repSeq, sg.getSeqrep()); + assertTrue(sg.getSequences().contains(repSeq)); + assertTrue(sg.getSequences().contains(precedingSeq)); + assertTrue("alignment has groups", alignment.getGroups().isEmpty()); + Map hiddenRepSeqsMap = av.getHiddenRepSequences(); + assertNotNull(hiddenRepSeqsMap); + assertEquals(1, hiddenRepSeqsMap.size()); + assertSame(sg, hiddenRepSeqsMap.get(repSeq)); + assertTrue(alignment.getHiddenSequences().isHidden(precedingSeq)); + assertFalse(alignment.getHiddenSequences().isHidden(repSeq)); + hiddenNames.add(precedingSeq.getName()); + + n++; + } + File tfile = File + .createTempFile("testStoreAndRecoverGroupReps", + ".jvp"); + try + { + new Jalview2XML(false).saveState(tfile); + } catch (Throwable e) + { + Assert.fail("Didn't save the expanded view state", e); + } + Desktop.instance.closeAll_actionPerformed(null); + if (Desktop.getAlignFrames() != null) + { + Assert.assertEquals(Desktop.getAlignFrames().length, 0); + } + + af = new FileLoader().LoadFileWaitTillLoaded( + tfile.getAbsolutePath(), FormatAdapter.FILE); + afid = af.getViewport().getSequenceSetId(); + + for (AlignmentViewPanel ap : Desktop.getAlignmentPanels(afid)) + { + String viewName = ap.getViewName(); + AlignViewportI av = ap.getAlignViewport(); + AlignmentI alignment = ap.getAlignment(); + List groups = alignment.getGroups(); + assertNotNull(groups); + assertTrue("Alignment has groups", groups.isEmpty()); + Map hiddenRepSeqsMap = av + .getHiddenRepSequences(); + assertNotNull("No hidden represented sequences", hiddenRepSeqsMap); + assertEquals(1, hiddenRepSeqsMap.size()); + assertEquals(repSeqs.get(viewName).getDisplayId(true), + hiddenRepSeqsMap.keySet().iterator().next() + .getDisplayId(true)); + + /* + * verify hidden sequences in restored panel + */ + List hidden = hiddenSeqNames.get(ap.getViewName()); + HiddenSequences hs = alignment.getHiddenSequences(); + assertEquals( + "wrong number of restored hidden sequences in " + + ap.getViewName(), + hidden.size(), hs.getSize()); + } + } }