From 309af01a4a460b17ef6b924a20057b372d8fbeac Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Thu, 11 Aug 2016 14:39:39 +0100 Subject: [PATCH] JAL-2154 refactor setup/teardown from Jalview2xml for other 2xml related tests --- test/jalview/io/CrossRef2xmlTests.java | 634 ++++++++++++++++++++++++++++++++ test/jalview/io/Jalview2xmlBase.java | 58 +++ test/jalview/io/Jalview2xmlTests.java | 48 +-- 3 files changed, 693 insertions(+), 47 deletions(-) create mode 100644 test/jalview/io/CrossRef2xmlTests.java create mode 100644 test/jalview/io/Jalview2xmlBase.java diff --git a/test/jalview/io/CrossRef2xmlTests.java b/test/jalview/io/CrossRef2xmlTests.java new file mode 100644 index 0000000..36ea69e --- /dev/null +++ b/test/jalview/io/CrossRef2xmlTests.java @@ -0,0 +1,634 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +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; +import jalview.api.AlignmentViewPanel; +import jalview.api.ViewStyleI; +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; +import jalview.gui.Desktop; +import jalview.gui.Jalview2XML; +import jalview.schemes.AnnotationColourGradient; +import jalview.schemes.ColourSchemeI; +import jalview.structure.StructureImportSettings; +import jalview.viewmodel.AlignmentViewport; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.testng.Assert; +import org.testng.AssertJUnit; +import org.testng.annotations.Test; + +@Test(singleThreaded = true) +public class CrossRef2xmlTests extends Jalview2xmlBase +{ + + @Test(groups = { "Functional" }) + public void testRNAStructureRecovery() throws Exception + { + String inFile = "examples/RF00031_folded.stk"; + String tfile = File.createTempFile("JalviewTest", ".jvp") + .getAbsolutePath(); + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + inFile, FormatAdapter.FILE); + assertTrue("Didn't read input file " + inFile, af != null); + int olddsann = countDsAnn(af.getViewport()); + assertTrue("Didn't find any dataset annotations", olddsann > 0); + af.rnahelicesColour_actionPerformed(null); + assertTrue( + "Couldn't apply RNA helices colourscheme", + af.getViewport().getGlobalColourScheme() instanceof jalview.schemes.RNAHelicesColour); + assertTrue("Failed to store as a project.", + af.saveAlignment(tfile, "Jalview")); + af.closeMenuItem_actionPerformed(true); + af = null; + af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(tfile, + FormatAdapter.FILE); + assertTrue("Failed to import new project", af != null); + int newdsann = countDsAnn(af.getViewport()); + assertTrue( + "Differing numbers of dataset sequence annotation\nOriginally " + + olddsann + " and now " + newdsann, + olddsann == newdsann); + System.out + .println("Read in same number of annotations as originally present (" + + olddsann + ")"); + assertTrue( + "RNA helices colourscheme was not applied on import.", + af.getViewport().getGlobalColourScheme() instanceof jalview.schemes.RNAHelicesColour); + } + + @Test(groups = { "Functional" }) + public void testTCoffeeScores() throws Exception + { + String inFile = "examples/uniref50.fa", inAnnot = "examples/uniref50.score_ascii"; + String tfile = File.createTempFile("JalviewTest", ".jvp") + .getAbsolutePath(); + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + inFile, FormatAdapter.FILE); + assertTrue("Didn't read input file " + inFile, af != null); + af.loadJalviewDataFile(inAnnot, FormatAdapter.FILE, null, null); + assertTrue( + "Didn't set T-coffee colourscheme", + af.getViewport().getGlobalColourScheme().getClass() + .equals(jalview.schemes.TCoffeeColourScheme.class)); + assertTrue( + "Recognise T-Coffee score from string", + jalview.schemes.ColourSchemeProperty.getColour(af.getViewport() + .getAlignment(), + jalview.schemes.ColourSchemeProperty.getColourName(af + .getViewport().getGlobalColourScheme())) != null); + + assertTrue("Failed to store as a project.", + af.saveAlignment(tfile, "Jalview")); + af.closeMenuItem_actionPerformed(true); + af = null; + af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(tfile, + FormatAdapter.FILE); + assertTrue("Failed to import new project", af != null); + assertTrue( + "Didn't set T-coffee colourscheme for imported project.", + af.getViewport().getGlobalColourScheme().getClass() + .equals(jalview.schemes.TCoffeeColourScheme.class)); + System.out + .println("T-Coffee score shading successfully recovered from project."); + } + + @Test(groups = { "Functional" }) + public void testColourByAnnotScores() throws Exception + { + String inFile = "examples/uniref50.fa", inAnnot = "examples/testdata/uniref50_iupred.jva"; + String tfile = File.createTempFile("JalviewTest", ".jvp") + .getAbsolutePath(); + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + inFile, FormatAdapter.FILE); + assertTrue("Didn't read input file " + inFile, af != null); + af.loadJalviewDataFile(inAnnot, FormatAdapter.FILE, null, null); + AlignmentAnnotation[] aa = af.getViewport().getAlignment() + .getSequenceAt(0).getAnnotation("IUPredWS (Short)"); + assertTrue( + "Didn't find any IUPred annotation to use to shade alignment.", + aa != null && aa.length > 0); + AnnotationColourGradient cs = new jalview.schemes.AnnotationColourGradient( + aa[0], null, AnnotationColourGradient.ABOVE_THRESHOLD); + AnnotationColourGradient gcs = new jalview.schemes.AnnotationColourGradient( + aa[0], null, AnnotationColourGradient.BELOW_THRESHOLD); + cs.setSeqAssociated(true); + gcs.setSeqAssociated(true); + af.changeColour(cs); + SequenceGroup sg = new SequenceGroup(); + sg.setStartRes(57); + sg.setEndRes(92); + sg.cs = gcs; + af.getViewport().getAlignment().addGroup(sg); + sg.addSequence(af.getViewport().getAlignment().getSequenceAt(1), false); + sg.addSequence(af.getViewport().getAlignment().getSequenceAt(2), true); + af.alignPanel.alignmentChanged(); + assertTrue("Failed to store as a project.", + af.saveAlignment(tfile, "Jalview")); + af.closeMenuItem_actionPerformed(true); + af = null; + af = new jalview.io.FileLoader().LoadFileWaitTillLoaded(tfile, + FormatAdapter.FILE); + assertTrue("Failed to import new project", af != null); + + // check for group and alignment colourschemes + + ColourSchemeI _rcs = af.getViewport().getGlobalColourScheme(); + ColourSchemeI _rgcs = af.getViewport().getAlignment().getGroups() + .get(0).cs; + assertTrue("Didn't recover global colourscheme", _rcs != null); + assertTrue("Didn't recover annotation colour global scheme", + _rcs instanceof AnnotationColourGradient); + AnnotationColourGradient __rcs = (AnnotationColourGradient) _rcs; + assertTrue("Annotation colourscheme wasn't sequence associated", + __rcs.isSeqAssociated()); + + 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++) + { + if (_rcs.findColour(sqs[0].getCharAt(p), p, sqs[0]) != _rcs + .findColour(sqs[5].getCharAt(p), p, sqs[5])) + { + diffseqcols = true; + } + } + assertTrue("Got Different sequence colours", diffseqcols); + System.out + .println("Per sequence colourscheme (Background) successfully applied and recovered."); + + assertTrue("Didn't recover group colourscheme", _rgcs != null); + assertTrue("Didn't recover annotation colour group colourscheme", + _rgcs instanceof AnnotationColourGradient); + __rcs = (AnnotationColourGradient) _rgcs; + assertTrue("Group Annotation colourscheme wasn't sequence associated", + __rcs.isSeqAssociated()); + + for (int p = 0, pSize = af.getViewport().getAlignment().getWidth(); p < pSize + && (!diffseqcols || !diffgseqcols); p++) + { + if (_rgcs.findColour(sqs[1].getCharAt(p), p, sqs[1]) != _rgcs + .findColour(sqs[2].getCharAt(p), p, sqs[2])) + { + diffgseqcols = true; + } + } + assertTrue("Got Different group sequence colours", diffgseqcols); + System.out + .println("Per sequence (Group) colourscheme successfully applied and recovered."); + } + + @Test(groups = { "Functional" }) + public void gatherViewsHere() throws Exception + { + int origCount = Desktop.getAlignFrames() == null ? 0 : Desktop + .getAlignFrames().length; + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + "examples/exampleFile_2_7.jar", FormatAdapter.FILE); + assertTrue("Didn't read in the example file correctly.", af != null); + assertTrue("Didn't gather the views in the example file.", + Desktop.getAlignFrames().length == 1 + origCount); + + } + + @Test(groups = { "Functional" }) + public void viewRefPdbAnnotation() throws Exception + { + // TODO: Make this pass without setting StructureParser.JALVIEW_PARSER + // StructureImportSettings + // .setDefaultPDBFileParser(StructureParser.JALVIEW_PARSER); + StructureImportSettings.setProcessSecondaryStructure(true); + StructureImportSettings.setVisibleChainAnnotation(true); + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + "examples/exampleFile_2_7.jar", FormatAdapter.FILE); + assertTrue("Didn't read in the example file correctly.", af != null); + AlignmentViewPanel sps = null; + for (AlignmentViewPanel ap : af.alignPanel.alignFrame.getAlignPanels()) + { + if ("Spinach Feredoxin Structure".equals(ap.getViewName())) + { + sps = ap; + break; + } + } + assertTrue("Couldn't find the structure view", sps != null); + SequenceI sq = sps.getAlignment().findName("1A70|"); + AlignmentAnnotation refan = null; + for (AlignmentAnnotation ra : sps.getAlignment() + .getAlignmentAnnotation()) + { + if (ra.graph != 0) + { + refan = ra; + break; + } + } + assertTrue("Annotation secondary structure not found.", refan != null); + assertTrue("Couldn't find 1a70 null chain", sq != null); + // compare the manually added temperature factor annotation + // to the track automatically transferred from the pdb structure on load + for (AlignmentAnnotation ala : sq.getDatasetSequence().getAnnotation()) + { + AlignmentAnnotation alaa; + sq.addAlignmentAnnotation(alaa = new AlignmentAnnotation(ala)); + alaa.adjustForAlignment(); + if (ala.graph == refan.graph) + { + for (int p = 0; p < ala.annotations.length; p++) + { + sq.findPosition(p); + try + { + assertTrue( + "Mismatch at alignment position " + p, + (alaa.annotations[p] == null && refan.annotations[p] == null) + || alaa.annotations[p].value == refan.annotations[p].value); + } catch (NullPointerException q) + { + Assert.fail("Mismatch of alignment annotations at position " + + p + " Ref seq ann: " + refan.annotations[p] + + " alignment " + alaa.annotations[p]); + } + } + } + } + + } + + @Test(groups = { "Functional" }) + public void testCopyViewSettings() throws Exception + { + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + "examples/exampleFile_2_7.jar", FormatAdapter.FILE); + assertTrue("Didn't read in the example file correctly.", af != null); + AlignmentViewPanel sps = null, groups = null; + for (AlignmentViewPanel ap : af.alignPanel.alignFrame.getAlignPanels()) + { + if ("Spinach Feredoxin Structure".equals(ap.getViewName())) + { + sps = ap; + } + if (ap.getViewName().contains("MAFFT")) + { + groups = ap; + } + } + assertTrue("Couldn't find the structure view", sps != null); + assertTrue("Couldn't find the MAFFT view", groups != null); + + ViewStyleI structureStyle = sps.getAlignViewport().getViewStyle(); + ViewStyleI groupStyle = groups.getAlignViewport().getViewStyle(); + AssertJUnit.assertFalse(structureStyle.sameStyle(groupStyle)); + + groups.getAlignViewport().setViewStyle(structureStyle); + AssertJUnit.assertFalse(groupStyle.sameStyle(groups.getAlignViewport() + .getViewStyle())); + Assert.assertTrue(structureStyle.sameStyle(groups.getAlignViewport() + .getViewStyle())); + + } + + /** + * test store and recovery of expanded views + * + * @throws Exception + */ + @Test(groups = { "Functional" }, enabled = true) + public void testStoreAndRecoverExpandedviews() throws Exception + { + Desktop.instance.closeAll_actionPerformed(null); + + AlignFrame af = new jalview.io.FileLoader().LoadFileWaitTillLoaded( + "examples/exampleFile_2_7.jar", FormatAdapter.FILE); + assertTrue("Didn't read in the example file correctly.", af != null); + Assert.assertEquals(Desktop.getAlignFrames().length, 1); + String afid = af.getViewport().getSequenceSetId(); + + // check FileLoader returned a reference to the one alignFrame that is + // actually on the Desktop + assertTrue( + "Jalview2XML.loadAlignFrame() didn't return correct AlignFrame reference for multiple view window", + af == Desktop.getAlignFrameFor(af.getViewport())); + + Desktop.explodeViews(af); + + int oldviews = Desktop.getAlignFrames().length; + Assert.assertEquals(Desktop.getAlignFrames().length, + Desktop.getAlignmentPanels(afid).length); + File tfile = File.createTempFile("testStoreAndRecoverExpanded", ".jvp"); + try + { + new Jalview2XML(false).saveState(tfile); + } catch (Error e) + { + Assert.fail("Didn't save the expanded view state", e); + } catch (Exception 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 jalview.io.FileLoader().LoadFileWaitTillLoaded( + tfile.getAbsolutePath(), FormatAdapter.FILE); + Assert.assertNotNull(af); + Assert.assertEquals( + Desktop.getAlignFrames().length, + Desktop.getAlignmentPanels(af.getViewport().getSequenceSetId()).length); + Assert.assertEquals( + oldviews, + Desktop.getAlignmentPanels(af.getViewport().getSequenceSetId()).length); + } + + /** + * Test save and reload of a project with a different representative sequence + * in each view. + * + * @throws Exception + */ + @Test(groups = { "Functional" }) + public void testStoreAndRecoverReferenceSeqSettings() throws Exception + { + Desktop.instance.closeAll_actionPerformed(null); + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + "examples/exampleFile_2_7.jar", FormatAdapter.FILE); + assertTrue("Didn't read in the example file correctly.", af != null); + String afid = af.getViewport().getSequenceSetId(); + + // remember reference sequence for each panel + Map refseqs = 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(); + SequenceI rep = alignment.getSequenceAt(repIndex); + refseqs.put(ap.getViewName(), rep); + + // code from mark/unmark sequence as reference in jalview.gui.PopupMenu + // todo refactor this to an alignment view controller + av.setDisplayReferenceSeq(true); + av.setColourByReferenceSeq(true); + av.getAlignment().setSeqrep(rep); + + n++; + } + File tfile = File.createTempFile("testStoreAndRecoverReferenceSeq", + ".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)) + { + // check representative + AlignmentI alignment = ap.getAlignment(); + SequenceI rep = alignment.getSeqrep(); + Assert.assertNotNull(rep, + "Couldn't restore sequence representative from project"); + // can't use a strong equals here, because by definition, the sequence IDs + // will be different. + // could set vamsas session save/restore flag to preserve IDs across + // load/saves. + Assert.assertEquals(refseqs.get(ap.getViewName()).toString(), + rep.toString(), + "Representative wasn't the same when recovered."); + Assert.assertTrue(ap.getAlignViewport().isDisplayReferenceSeq(), + "Display reference sequence view setting not set."); + Assert.assertTrue(ap.getAlignViewport().isColourByReferenceSeq(), + "Colour By Reference Seq view setting not set."); + } + } + + @Test(groups = { "Functional" }) + public void testIsVersionStringLaterThan() + { + /* + * No version / development / test / autobuild is leniently assumed to be + * compatible + */ + assertTrue(Jalview2XML.isVersionStringLaterThan(null, null)); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", null)); + assertTrue(Jalview2XML.isVersionStringLaterThan(null, "2.8.3")); + assertTrue(Jalview2XML.isVersionStringLaterThan(null, + "Development Build")); + assertTrue(Jalview2XML.isVersionStringLaterThan(null, + "DEVELOPMENT BUILD")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", + "Development Build")); + assertTrue(Jalview2XML.isVersionStringLaterThan(null, "Test")); + assertTrue(Jalview2XML.isVersionStringLaterThan(null, "TEST")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", "Test")); + assertTrue(Jalview2XML + .isVersionStringLaterThan(null, "Automated Build")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", + "Automated Build")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", + "AUTOMATED BUILD")); + + /* + * same version returns true i.e. compatible + */ + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8", "2.8")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.8.3")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3b1", "2.8.3b1")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3B1", "2.8.3b1")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3b1", "2.8.3B1")); + + /* + * later version returns true + */ + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.8.4")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.9")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.9.2")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8", "2.8.3")); + assertTrue(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.8.3b1")); + + /* + * earlier version returns false + */ + assertFalse(Jalview2XML.isVersionStringLaterThan("2.8.3", "2.8")); + assertFalse(Jalview2XML.isVersionStringLaterThan("2.8.4", "2.8.3")); + assertFalse(Jalview2XML.isVersionStringLaterThan("2.8.3b1", "2.8.3")); + 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()); + } + } +} diff --git a/test/jalview/io/Jalview2xmlBase.java b/test/jalview/io/Jalview2xmlBase.java new file mode 100644 index 0000000..bfd5ca4 --- /dev/null +++ b/test/jalview/io/Jalview2xmlBase.java @@ -0,0 +1,58 @@ +package jalview.io; + +import jalview.bin.Cache; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.SequenceI; + +import java.time.Instant; +import java.util.Date; + +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; + +public class Jalview2xmlBase +{ + + /** + * @throws java.lang.Exception + */ + @BeforeClass(alwaysRun = true) + public static void setUpBeforeClass() throws Exception + { + jalview.bin.Jalview.main(new String[] { "-props", + "test/jalview/io/testProps.jvprops" }); + jalview.bin.Cache.setProperty( + "JALVIEW_NEWS_RSS_LASTMODIFIED", + Cache.date_format.format(Date.from(Instant.now().plusSeconds( + 3600)))); + } + + /** + * @throws java.lang.Exception + */ + @AfterClass(alwaysRun = true) + public static void tearDownAfterClass() throws Exception + { + jalview.gui.Desktop.instance.closeAll_actionPerformed(null); + } + + public int countDsAnn(jalview.viewmodel.AlignmentViewport avp) + { + int numdsann = 0; + for (SequenceI sq : avp.getAlignment().getDataset().getSequences()) + { + if (sq.getAnnotation() != null) + { + for (AlignmentAnnotation dssa : sq.getAnnotation()) + { + if (dssa.isValidStruc()) + { + numdsann++; + } + } + } + } + return numdsann; + } + +} diff --git a/test/jalview/io/Jalview2xmlTests.java b/test/jalview/io/Jalview2xmlTests.java index e1bc3ae..a54d190 100644 --- a/test/jalview/io/Jalview2xmlTests.java +++ b/test/jalview/io/Jalview2xmlTests.java @@ -29,7 +29,6 @@ import static org.testng.AssertJUnit.assertTrue; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; import jalview.api.ViewStyleI; -import jalview.bin.Cache; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.HiddenSequences; @@ -45,64 +44,19 @@ import jalview.structure.StructureImportSettings; import jalview.viewmodel.AlignmentViewport; import java.io.File; -import java.time.Instant; import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import org.testng.Assert; import org.testng.AssertJUnit; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @Test(singleThreaded = true) -public class Jalview2xmlTests +public class Jalview2xmlTests extends Jalview2xmlBase { - /** - * @throws java.lang.Exception - */ - @BeforeClass(alwaysRun = true) - public static void setUpBeforeClass() throws Exception - { - jalview.bin.Jalview.main(new String[] { "-props", - "test/jalview/io/testProps.jvprops" }); - jalview.bin.Cache.setProperty("JALVIEW_NEWS_RSS_LASTMODIFIED", - Cache.date_format.format(Date.from(Instant.now().plusSeconds( - 3600)))); - } - - /** - * @throws java.lang.Exception - */ - @AfterClass(alwaysRun = true) - public static void tearDownAfterClass() throws Exception - { - jalview.gui.Desktop.instance.closeAll_actionPerformed(null); - } - - int countDsAnn(jalview.viewmodel.AlignmentViewport avp) - { - int numdsann = 0; - for (SequenceI sq : avp.getAlignment().getDataset().getSequences()) - { - if (sq.getAnnotation() != null) - { - for (AlignmentAnnotation dssa : sq.getAnnotation()) - { - if (dssa.isValidStruc()) - { - numdsann++; - } - } - } - } - return numdsann; - } - @Test(groups = { "Functional" }) public void testRNAStructureRecovery() throws Exception { -- 1.7.10.2