X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=test%2Fjalview%2Fio%2FJalview2xmlTests.java;fp=test%2Fjalview%2Fio%2FJalview2xmlTests.java;h=6abb7e5aa81fea8215f910f8a61001a69f80e555;hb=2595e9d4ee0dbbd3406a98c4e49a61ccde806479;hp=3d53234fc634d316e1f5ae1a105d159a410d7ff6;hpb=e20075ba805d744d7cc4976e2b8d5e5840fb0a8d;p=jalview.git diff --git a/test/jalview/io/Jalview2xmlTests.java b/test/jalview/io/Jalview2xmlTests.java index 3d53234..6abb7e5 100644 --- a/test/jalview/io/Jalview2xmlTests.java +++ b/test/jalview/io/Jalview2xmlTests.java @@ -20,11 +20,11 @@ */ 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 static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertSame; +import static org.testng.Assert.assertTrue; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; @@ -38,17 +38,27 @@ import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; +import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; import jalview.gui.Desktop; import jalview.gui.Jalview2XML; +import jalview.gui.JvOptionPane; +import jalview.gui.PopupMenu; +import jalview.gui.SliderPanel; +import jalview.renderer.ResidueShaderI; import jalview.schemes.AnnotationColourGradient; +import jalview.schemes.BuriedColourScheme; import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemeProperty; +import jalview.schemes.JalviewColourScheme; +import jalview.schemes.RNAHelicesColour; +import jalview.schemes.StrandColourScheme; import jalview.schemes.TCoffeeColourScheme; import jalview.structure.StructureImportSettings; import jalview.viewmodel.AlignmentViewport; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -56,12 +66,21 @@ import java.util.Map; import org.testng.Assert; import org.testng.AssertJUnit; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @Test(singleThreaded = true) public class Jalview2xmlTests extends Jalview2xmlBase { + @Override + @BeforeClass(alwaysRun = true) + public void setUpJvOptionPane() + { + JvOptionPane.setInteractiveMode(false); + JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); + } + @Test(groups = { "Functional" }) public void testRNAStructureRecovery() throws Exception { @@ -69,31 +88,33 @@ public class Jalview2xmlTests extends Jalview2xmlBase String tfile = File.createTempFile("JalviewTest", ".jvp") .getAbsolutePath(); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(inFile, - FormatAdapter.FILE); - assertNotNull("Didn't read input file " + inFile, af); + DataSourceType.FILE); + assertNotNull(af, "Didn't read input file " + inFile); int olddsann = countDsAnn(af.getViewport()); - assertTrue("Didn't find any dataset annotations", olddsann > 0); - af.rnahelicesColour_actionPerformed(null); + assertTrue(olddsann > 0, "Didn't find any dataset annotations"); + af.changeColour_actionPerformed(JalviewColourScheme.RNAHelices + .toString()); 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.getViewport().getGlobalColourScheme() instanceof RNAHelicesColour, + "Couldn't apply RNA helices colourscheme"); + assertTrue(af.saveAlignment(tfile, FileFormat.Jalview), + "Failed to store as a project."); af.closeMenuItem_actionPerformed(true); af = null; - af = new FileLoader().LoadFileWaitTillLoaded(tfile, FormatAdapter.FILE); - assertNotNull("Failed to import new project", af); + af = new FileLoader() + .LoadFileWaitTillLoaded(tfile, DataSourceType.FILE); + assertNotNull(af, "Failed to import new project"); int newdsann = countDsAnn(af.getViewport()); - assertTrue( + assertEquals(olddsann, newdsann, "Differing numbers of dataset sequence annotation\nOriginally " - + olddsann + " and now " + newdsann, - olddsann == newdsann); + + olddsann + " and now " + 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); + + af.getViewport().getGlobalColourScheme() instanceof RNAHelicesColour, + "RNA helices colourscheme was not applied on import."); } @Test(groups = { "Functional" }) @@ -103,25 +124,25 @@ public class Jalview2xmlTests extends Jalview2xmlBase String tfile = File.createTempFile("JalviewTest", ".jvp") .getAbsolutePath(); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(inFile, - FormatAdapter.FILE); - assertNotNull("Didn't read input file " + inFile, af); - af.loadJalviewDataFile(inAnnot, FormatAdapter.FILE, null, null); - assertSame("Didn't set T-coffee colourscheme", af.getViewport() - .getGlobalColourScheme().getClass(), TCoffeeColourScheme.class); - assertNotNull("Recognise T-Coffee score from string", - jalview.schemes.ColourSchemeProperty.getColour(af.getViewport() - .getAlignment(), ColourSchemeProperty.getColourName(af - .getViewport().getGlobalColourScheme()))); - - assertTrue("Failed to store as a project.", - af.saveAlignment(tfile, "Jalview")); + DataSourceType.FILE); + assertNotNull(af, "Didn't read input file " + inFile); + af.loadJalviewDataFile(inAnnot, DataSourceType.FILE, null, null); + assertSame(af.getViewport().getGlobalColourScheme().getClass(), + TCoffeeColourScheme.class, "Didn't set T-coffee colourscheme"); + assertNotNull(ColourSchemeProperty.getColourScheme(af.getViewport() + .getAlignment(), af.getViewport().getGlobalColourScheme() + .getSchemeName()), "Recognise T-Coffee score from string"); + + assertTrue(af.saveAlignment(tfile, FileFormat.Jalview), + "Failed to store as a project."); af.closeMenuItem_actionPerformed(true); af = null; - af = new FileLoader().LoadFileWaitTillLoaded(tfile, FormatAdapter.FILE); - assertNotNull("Failed to import new project", af); - assertSame("Didn't set T-coffee colourscheme for imported project.", af - .getViewport().getGlobalColourScheme().getClass(), - TCoffeeColourScheme.class); + af = new FileLoader() + .LoadFileWaitTillLoaded(tfile, DataSourceType.FILE); + assertNotNull(af, "Failed to import new project"); + assertSame(af.getViewport().getGlobalColourScheme().getClass(), + TCoffeeColourScheme.class, + "Didn't set T-coffee colourscheme for imported project."); System.out .println("T-Coffee score shading successfully recovered from project."); } @@ -133,14 +154,15 @@ public class Jalview2xmlTests extends Jalview2xmlBase String tfile = File.createTempFile("JalviewTest", ".jvp") .getAbsolutePath(); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(inFile, - FormatAdapter.FILE); - assertNotNull("Didn't read input file " + inFile, af); - af.loadJalviewDataFile(inAnnot, FormatAdapter.FILE, null, null); + DataSourceType.FILE); + assertNotNull(af, "Didn't read input file " + inFile); + af.loadJalviewDataFile(inAnnot, DataSourceType.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); + + aa != null && aa.length > 0, + "Didn't find any IUPred annotation to use to shade alignment."); AnnotationColourGradient cs = new AnnotationColourGradient(aa[0], null, AnnotationColourGradient.ABOVE_THRESHOLD); AnnotationColourGradient gcs = new AnnotationColourGradient(aa[0], @@ -151,62 +173,63 @@ public class Jalview2xmlTests extends Jalview2xmlBase SequenceGroup sg = new SequenceGroup(); sg.setStartRes(57); sg.setEndRes(92); - sg.cs = gcs; + sg.cs.setColourScheme(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")); + assertTrue(af.saveAlignment(tfile, FileFormat.Jalview), + "Failed to store as a project."); af.closeMenuItem_actionPerformed(true); af = null; - af = new FileLoader().LoadFileWaitTillLoaded(tfile, FormatAdapter.FILE); - assertNotNull("Failed to import new project", af); + af = new FileLoader() + .LoadFileWaitTillLoaded(tfile, DataSourceType.FILE); + assertNotNull(af, "Failed to import new project"); // check for group and alignment colourschemes ColourSchemeI _rcs = af.getViewport().getGlobalColourScheme(); ColourSchemeI _rgcs = af.getViewport().getAlignment().getGroups() - .get(0).cs; - assertNotNull("Didn't recover global colourscheme", _rcs); - assertTrue("Didn't recover annotation colour global scheme", - _rcs instanceof AnnotationColourGradient); + .get(0).getColourScheme(); + assertNotNull(_rcs, "Didn't recover global colourscheme"); + assertTrue(_rcs instanceof AnnotationColourGradient, + "Didn't recover annotation colour global scheme"); AnnotationColourGradient __rcs = (AnnotationColourGradient) _rcs; - assertTrue("Annotation colourscheme wasn't sequence associated", - __rcs.isSeqAssociated()); + assertTrue(__rcs.isSeqAssociated(), + "Annotation colourscheme wasn't sequence associated"); 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])) + if (_rcs.findColour(sqs[0].getCharAt(p), p, sqs[0], null, 0f) != _rcs + .findColour(sqs[5].getCharAt(p), p, sqs[5], null, 0f)) { diffseqcols = true; } } - assertTrue("Got Different sequence colours", diffseqcols); + assertTrue(diffseqcols, "Got Different sequence colours"); System.out .println("Per sequence colourscheme (Background) successfully applied and recovered."); - assertNotNull("Didn't recover group colourscheme", _rgcs); - assertTrue("Didn't recover annotation colour group colourscheme", - _rgcs instanceof AnnotationColourGradient); + assertNotNull(_rgcs, "Didn't recover group colourscheme"); + assertTrue(_rgcs instanceof AnnotationColourGradient, + "Didn't recover annotation colour group colourscheme"); __rcs = (AnnotationColourGradient) _rgcs; - assertTrue("Group Annotation colourscheme wasn't sequence associated", - __rcs.isSeqAssociated()); + assertTrue(__rcs.isSeqAssociated(), + "Group Annotation colourscheme wasn't sequence associated"); 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])) + if (_rgcs.findColour(sqs[1].getCharAt(p), p, sqs[1], null, 0f) != _rgcs + .findColour(sqs[2].getCharAt(p), p, sqs[2], null, 0f)) { diffgseqcols = true; } } - assertTrue("Got Different group sequence colours", diffgseqcols); + assertTrue(diffgseqcols, "Got Different group sequence colours"); System.out .println("Per sequence (Group) colourscheme successfully applied and recovered."); } @@ -217,10 +240,10 @@ public class Jalview2xmlTests extends Jalview2xmlBase int origCount = Desktop.getAlignFrames() == null ? 0 : Desktop .getAlignFrames().length; AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( - "examples/exampleFile_2_7.jar", FormatAdapter.FILE); - assertNotNull("Didn't read in the example file correctly.", af); - assertTrue("Didn't gather the views in the example file.", - Desktop.getAlignFrames().length == 1 + origCount); + "examples/exampleFile_2_7.jar", DataSourceType.FILE); + assertNotNull(af, "Didn't read in the example file correctly."); + assertTrue(Desktop.getAlignFrames().length == 1 + origCount, + "Didn't gather the views in the example file."); } @@ -230,8 +253,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase StructureImportSettings.setProcessSecondaryStructure(true); StructureImportSettings.setVisibleChainAnnotation(true); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( - "examples/exampleFile_2_7.jar", FormatAdapter.FILE); - assertNotNull("Didn't read in the example file correctly.", af); + "examples/exampleFile_2_7.jar", DataSourceType.FILE); + assertNotNull(af, "Didn't read in the example file correctly."); AlignmentViewPanel sps = null; for (AlignmentViewPanel ap : af.alignPanel.alignFrame.getAlignPanels()) { @@ -241,7 +264,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase break; } } - assertNotNull("Couldn't find the structure view", sps); + assertNotNull(sps, "Couldn't find the structure view"); AlignmentAnnotation refan = null; for (AlignmentAnnotation ra : sps.getAlignment() .getAlignmentAnnotation()) @@ -252,13 +275,13 @@ public class Jalview2xmlTests extends Jalview2xmlBase break; } } - assertNotNull("Annotation secondary structure not found.", refan); + assertNotNull(refan, "Annotation secondary structure not found."); SequenceI sq = sps.getAlignment().findName("1A70|"); - assertNotNull("Couldn't find 1a70 null chain", sq); + assertNotNull(sq, "Couldn't find 1a70 null chain"); // compare the manually added temperature factor annotation // to the track automatically transferred from the pdb structure on load - assertNotNull("1a70 has no annotation", sq.getDatasetSequence() - .getAnnotation()); + assertNotNull(sq.getDatasetSequence().getAnnotation(), + "1a70 has no annotation"); for (AlignmentAnnotation ala : sq.getDatasetSequence().getAnnotation()) { AlignmentAnnotation alaa; @@ -272,9 +295,9 @@ public class Jalview2xmlTests extends Jalview2xmlBase try { assertTrue( - "Mismatch at alignment position " + p, (alaa.annotations[p] == null && refan.annotations[p] == null) - || alaa.annotations[p].value == refan.annotations[p].value); + || alaa.annotations[p].value == refan.annotations[p].value, + "Mismatch at alignment position " + p); } catch (NullPointerException q) { Assert.fail("Mismatch of alignment annotations at position " @@ -291,8 +314,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase public void testCopyViewSettings() throws Exception { AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( - "examples/exampleFile_2_7.jar", FormatAdapter.FILE); - assertNotNull("Didn't read in the example file correctly.", af); + "examples/exampleFile_2_7.jar", DataSourceType.FILE); + assertNotNull(af, "Didn't read in the example file correctly."); AlignmentViewPanel sps = null, groups = null; for (AlignmentViewPanel ap : af.alignPanel.alignFrame.getAlignPanels()) { @@ -305,8 +328,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase groups = ap; } } - assertNotNull("Couldn't find the structure view", sps); - assertNotNull("Couldn't find the MAFFT view", groups); + assertNotNull(sps, "Couldn't find the structure view"); + assertNotNull(groups, "Couldn't find the MAFFT view"); ViewStyleI structureStyle = sps.getAlignViewport().getViewStyle(); ViewStyleI groupStyle = groups.getAlignViewport().getViewStyle(); @@ -331,15 +354,16 @@ public class Jalview2xmlTests extends Jalview2xmlBase Desktop.instance.closeAll_actionPerformed(null); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( - "examples/exampleFile_2_7.jar", FormatAdapter.FILE); + "examples/exampleFile_2_7.jar", DataSourceType.FILE); 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())); + assertSame( + af, + Desktop.getAlignFrameFor(af.getViewport()), + "Jalview2XML.loadAlignFrame() didn't return correct AlignFrame reference for multiple view window"); Desktop.explodeViews(af); @@ -363,14 +387,14 @@ public class Jalview2xmlTests extends Jalview2xmlBase Assert.assertEquals(Desktop.getAlignFrames().length, 0); } af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), - FormatAdapter.FILE); + DataSourceType.FILE); Assert.assertNotNull(af); Assert.assertEquals( Desktop.getAlignFrames().length, Desktop.getAlignmentPanels(af.getViewport().getSequenceSetId()).length); Assert.assertEquals( - oldviews, - Desktop.getAlignmentPanels(af.getViewport().getSequenceSetId()).length); + Desktop.getAlignmentPanels(af.getViewport().getSequenceSetId()).length, + oldviews); } /** @@ -384,8 +408,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase { Desktop.instance.closeAll_actionPerformed(null); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( - "examples/exampleFile_2_7.jar", FormatAdapter.FILE); - assertNotNull("Didn't read in the example file correctly.", af); + "examples/exampleFile_2_7.jar", DataSourceType.FILE); + assertNotNull(af, "Didn't read in the example file correctly."); String afid = af.getViewport().getSequenceSetId(); // remember reference sequence for each panel @@ -428,7 +452,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase } af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), - FormatAdapter.FILE); + DataSourceType.FILE); afid = af.getViewport().getSequenceSetId(); for (AlignmentViewPanel ap : Desktop.getAlignmentPanels(afid)) @@ -517,8 +541,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase { Desktop.instance.closeAll_actionPerformed(null); AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( - "examples/uniref50.fa", FormatAdapter.FILE); - assertNotNull("Didn't read in the example file correctly.", af); + "examples/uniref50.fa", DataSourceType.FILE); + assertNotNull(af, "Didn't read in the example file correctly."); String afid = af.getViewport().getSequenceSetId(); // make a second view of the alignment af.newView_actionPerformed(null); @@ -569,7 +593,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase assertSame(repSeq, sg.getSeqrep()); assertTrue(sg.getSequences().contains(repSeq)); assertTrue(sg.getSequences().contains(precedingSeq)); - assertTrue("alignment has groups", alignment.getGroups().isEmpty()); + assertTrue(alignment.getGroups().isEmpty(), "alignment has groups"); Map hiddenRepSeqsMap = av .getHiddenRepSequences(); assertNotNull(hiddenRepSeqsMap); @@ -597,7 +621,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase } af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), - FormatAdapter.FILE); + DataSourceType.FILE); afid = af.getViewport().getSequenceSetId(); for (AlignmentViewPanel ap : Desktop.getAlignmentPanels(afid)) @@ -607,10 +631,10 @@ public class Jalview2xmlTests extends Jalview2xmlBase AlignmentI alignment = ap.getAlignment(); List groups = alignment.getGroups(); assertNotNull(groups); - assertTrue("Alignment has groups", groups.isEmpty()); + assertTrue(groups.isEmpty(), "Alignment has groups"); Map hiddenRepSeqsMap = av .getHiddenRepSequences(); - assertNotNull("No hidden represented sequences", hiddenRepSeqsMap); + assertNotNull(hiddenRepSeqsMap, "No hidden represented sequences"); assertEquals(1, hiddenRepSeqsMap.size()); assertEquals(repSeqs.get(viewName).getDisplayId(true), hiddenRepSeqsMap.keySet().iterator().next() @@ -622,8 +646,10 @@ public class Jalview2xmlTests extends Jalview2xmlBase List hidden = hiddenSeqNames.get(ap.getViewName()); HiddenSequences hs = alignment.getHiddenSequences(); assertEquals( + hidden.size(), + hs.getSize(), "wrong number of restored hidden sequences in " - + ap.getViewName(), hidden.size(), hs.getSize()); + + ap.getViewName()); } } @@ -638,8 +664,8 @@ public class Jalview2xmlTests extends Jalview2xmlBase Desktop.instance.closeAll_actionPerformed(null); String exampleFile = "examples/3W5V.pdb"; AlignFrame af = new FileLoader().LoadFileWaitTillLoaded(exampleFile, - FormatAdapter.FILE); - assertNotNull("Didn't read in the example file correctly.", af); + DataSourceType.FILE); + assertNotNull(af, "Didn't read in the example file correctly."); String afid = af.getViewport().getSequenceSetId(); AlignmentPanel[] alignPanels = Desktop.getAlignmentPanels(afid); @@ -687,7 +713,7 @@ public class Jalview2xmlTests extends Jalview2xmlBase } AlignFrame restoredFrame = new FileLoader().LoadFileWaitTillLoaded( - tfile.getAbsolutePath(), FormatAdapter.FILE); + tfile.getAbsolutePath(), DataSourceType.FILE); String rfid = restoredFrame.getViewport().getSequenceSetId(); AlignmentPanel[] rAlignPanels = Desktop.getAlignmentPanels(rfid); AlignmentViewPanel rap = rAlignPanels[0]; @@ -720,4 +746,99 @@ public class Jalview2xmlTests extends Jalview2xmlBase "Recovered PDBEntry should have a non-null file entry"); } } + + /** + * Configure an alignment and a sub-group each with distinct colour schemes, + * Conservation and PID thresholds, and confirm these are restored from the + * saved project. + * + * @throws IOException + */ + @Test(groups = { "Functional" }) + public void testStoreAndRecoverColourThresholds() throws IOException + { + Desktop.instance.closeAll_actionPerformed(null); + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + "examples/uniref50.fa", DataSourceType.FILE); + + AlignViewport av = af.getViewport(); + AlignmentI al = av.getAlignment(); + + /* + * Colour alignment by Buried Index, Above 10% PID, By Conservation 20% + */ + af.changeColour_actionPerformed(JalviewColourScheme.Buried.toString()); + assertTrue(av.getGlobalColourScheme() instanceof BuriedColourScheme); + af.abovePIDThreshold_actionPerformed(true); + SliderPanel sp = SliderPanel.getSliderPanel(); + assertFalse(sp.isForConservation()); + sp.valueChanged(10); + af.conservationMenuItem_actionPerformed(true); + sp = SliderPanel.getSliderPanel(); + assertTrue(sp.isForConservation()); + sp.valueChanged(20); + ResidueShaderI rs = av.getResidueShading(); + assertEquals(rs.getThreshold(), 10); + assertTrue(rs.conservationApplied()); + assertEquals(rs.getConservationInc(), 20); + + /* + * create a group with Strand colouring, 30% Conservation + * and 40% PID threshold + */ + SequenceGroup sg = new SequenceGroup(); + sg.addSequence(al.getSequenceAt(0), false); + sg.setStartRes(15); + sg.setEndRes(25); + av.setSelectionGroup(sg); + PopupMenu popupMenu = new PopupMenu(af.alignPanel, null, null); + popupMenu.changeColour_actionPerformed(JalviewColourScheme.Strand + .toString()); + assertTrue(sg.getColourScheme() instanceof StrandColourScheme); + assertEquals(al.getGroups().size(), 1); + assertSame(al.getGroups().get(0), sg); + popupMenu.conservationMenuItem_actionPerformed(true); + sp = SliderPanel.getSliderPanel(); + assertTrue(sp.isForConservation()); + sp.valueChanged(30); + popupMenu.abovePIDColour_actionPerformed(true); + sp = SliderPanel.getSliderPanel(); + assertFalse(sp.isForConservation()); + sp.valueChanged(40); + assertTrue(sg.getGroupColourScheme().conservationApplied()); + assertEquals(sg.getGroupColourScheme().getConservationInc(), 30); + assertEquals(sg.getGroupColourScheme().getThreshold(), 40); + + /* + * save project, close windows, reload project, verify + */ + File tfile = File.createTempFile("testStoreAndRecoverColourThresholds", + ".jvp"); + tfile.deleteOnExit(); + new Jalview2XML(false).saveState(tfile); + Desktop.instance.closeAll_actionPerformed(null); + af = new FileLoader().LoadFileWaitTillLoaded(tfile.getAbsolutePath(), + DataSourceType.FILE); + Assert.assertNotNull(af, "Failed to reload project"); + + /* + * verify alignment (background) colouring + */ + rs = af.getViewport().getResidueShading(); + assertTrue(rs.getColourScheme() instanceof BuriedColourScheme); + assertEquals(rs.getThreshold(), 10); + assertTrue(rs.conservationApplied()); + assertEquals(rs.getConservationInc(), 20); + + /* + * verify group colouring + */ + assertEquals(1, af.getViewport().getAlignment().getGroups().size(), 1); + rs = af.getViewport().getAlignment().getGroups().get(0) + .getGroupColourScheme(); + assertTrue(rs.getColourScheme() instanceof StrandColourScheme); + assertEquals(rs.getThreshold(), 40); + assertTrue(rs.conservationApplied()); + assertEquals(rs.getConservationInc(), 30); + } }