Clover icon

Coverage Report

  1. Project Clover database Wed Sep 18 2024 02:54:09 BST
  2. Package jalview.gui

File AlignFrameTest.java

 

Code metrics

4
282
9
1
634
394
12
0.04
31.33
9
1.33

Classes

Class Line # Actions
AlignFrameTest 60 282 12
0.993220399.3%
 

Contributing tests

This file is covered by 5 tests. .

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.gui;
22   
23    import static org.junit.Assert.assertNotEquals;
24    import static org.testng.Assert.assertEquals;
25    import static org.testng.Assert.assertFalse;
26    import static org.testng.Assert.assertNotSame;
27    import static org.testng.Assert.assertSame;
28    import static org.testng.Assert.assertTrue;
29   
30    import java.awt.Color;
31    import java.util.Iterator;
32   
33    import org.testng.annotations.AfterMethod;
34    import org.testng.annotations.BeforeClass;
35    import org.testng.annotations.BeforeMethod;
36    import org.testng.annotations.Test;
37   
38    import jalview.api.FeatureColourI;
39    import jalview.bin.Cache;
40    import jalview.bin.Jalview;
41    import jalview.datamodel.Alignment;
42    import jalview.datamodel.AlignmentI;
43    import jalview.datamodel.HiddenColumns;
44    import jalview.datamodel.Sequence;
45    import jalview.datamodel.SequenceFeature;
46    import jalview.datamodel.SequenceGroup;
47    import jalview.datamodel.SequenceI;
48    import jalview.io.DataSourceType;
49    import jalview.io.FileLoader;
50    import jalview.project.Jalview2xmlTests;
51    import jalview.renderer.ResidueShaderI;
52    import jalview.schemes.BuriedColourScheme;
53    import jalview.schemes.FeatureColour;
54    import jalview.schemes.HelixColourScheme;
55    import jalview.schemes.JalviewColourScheme;
56    import jalview.schemes.StrandColourScheme;
57    import jalview.schemes.TurnColourScheme;
58    import jalview.util.MessageManager;
59   
 
60    public class AlignFrameTest
61    {
62    AlignFrame af;
63   
 
64  1 toggle @BeforeClass(alwaysRun = true)
65    public static void setUpBeforeClass() throws Exception
66    {
67  1 setUpJvOptionPane();
68    /*
69    * use read-only test properties file
70    */
71  1 Cache.loadProperties("test/jalview/io/testProps.jvprops");
72  1 Jalview.main(new String[] { "--nonews" });
73    }
74   
 
75  5 toggle @AfterMethod(alwaysRun = true)
76    public void tearDown()
77    {
78  5 if (Desktop.instance != null)
79  5 Desktop.instance.closeAll_actionPerformed(null);
80    }
81   
82    /**
83    * configure (read-only) properties for test to ensure Consensus is computed
84    * for colour Above PID testing
85    */
 
86  5 toggle @BeforeMethod(alwaysRun = true)
87    public void setUp()
88    {
89  5 Cache.loadProperties("test/jalview/io/testProps.jvprops");
90  5 Cache.applicationProperties.setProperty("SHOW_IDENTITY",
91    Boolean.TRUE.toString());
92  5 af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
93    DataSourceType.FILE);
94   
95    /*
96    * wait for Consensus thread to complete
97    */
98  5 do
99    {
100  5 try
101    {
102  5 Thread.sleep(50);
103    } catch (InterruptedException x)
104    {
105    }
106  5 } while (af.getViewport().getCalcManager().isWorking());
107    }
108   
 
109  1 toggle public static void setUpJvOptionPane()
110    {
111  1 JvOptionPane.setInteractiveMode(false);
112  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
113    }
114   
 
115  1 toggle @Test(groups = "Functional")
116    public void testHideFeatureColumns()
117    {
118  1 SequenceI seq1 = new Sequence("Seq1", "ABCDEFGHIJ");
119  1 SequenceI seq2 = new Sequence("Seq2", "ABCDEFGHIJ");
120  1 seq1.addSequenceFeature(
121    new SequenceFeature("Metal", "", 1, 5, 0f, null));
122  1 seq2.addSequenceFeature(
123    new SequenceFeature("Metal", "", 6, 10, 10f, null));
124  1 seq1.addSequenceFeature(
125    new SequenceFeature("Turn", "", 2, 4, Float.NaN, null));
126  1 seq2.addSequenceFeature(
127    new SequenceFeature("Turn", "", 7, 9, Float.NaN, null));
128  1 AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
129  1 AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
130    al.getHeight());
131   
132    /*
133    * make all features visible (select feature columns checks visibility)
134    */
135  1 alignFrame.getFeatureRenderer().findAllFeatures(true);
136   
137    /*
138    * hiding a feature not present does nothing
139    */
140  1 assertFalse(alignFrame.hideFeatureColumns("exon", true));
141  1 assertTrue(alignFrame.getViewport().getColumnSelection().isEmpty());
142   
143  1 assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
144    .getNumberOfRegions(), 0);
145   
146  1 assertFalse(alignFrame.hideFeatureColumns("exon", false));
147  1 assertTrue(alignFrame.getViewport().getColumnSelection().isEmpty());
148   
149  1 assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
150    .getNumberOfRegions(), 0);
151   
152    /*
153    * hiding a feature in all columns does nothing
154    */
155  1 assertFalse(alignFrame.hideFeatureColumns("Metal", true));
156  1 assertTrue(alignFrame.getViewport().getColumnSelection().isEmpty());
157   
158  1 assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
159    .getNumberOfRegions(), 0);
160   
161    /*
162    * threshold Metal to hide features where score < 5
163    * seq1 feature in columns 1-5 is hidden
164    * seq2 feature in columns 6-10 is shown
165    */
166  1 FeatureColourI fc = new FeatureColour(null, Color.red, Color.blue, null,
167    0f, 10f);
168  1 fc.setAboveThreshold(true);
169  1 fc.setThreshold(5f);
170  1 alignFrame.getFeatureRenderer().setColour("Metal", fc);
171  1 assertTrue(alignFrame.hideFeatureColumns("Metal", true));
172  1 HiddenColumns hidden = alignFrame.getViewport().getAlignment()
173    .getHiddenColumns();
174  1 assertEquals(hidden.getNumberOfRegions(), 1);
175  1 Iterator<int[]> regions = hidden.iterator();
176  1 int[] next = regions.next();
177  1 assertEquals(next[0], 5);
178  1 assertEquals(next[1], 9);
179   
180    /*
181    * hide a feature present in some columns
182    * sequence positions [2-4], [7-9] are column positions
183    * [1-3], [6-8] base zero
184    */
185  1 alignFrame.getViewport().showAllHiddenColumns();
186  1 assertTrue(alignFrame.hideFeatureColumns("Turn", true));
187  1 regions = alignFrame.getViewport().getAlignment().getHiddenColumns()
188    .iterator();
189  1 assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
190    .getNumberOfRegions(), 2);
191  1 next = regions.next();
192  1 assertEquals(next[0], 1);
193  1 assertEquals(next[1], 3);
194  1 next = regions.next();
195  1 assertEquals(next[0], 6);
196  1 assertEquals(next[1], 8);
197    }
198   
199    /**
200    * Test that changing background (alignment) colour scheme
201    * <ul>
202    * <li>with Apply Colour to All Groups not selected, does not change group
203    * colours</li>
204    * <li>with Apply Colour to All Groups selected, does change group
205    * colours</li>
206    * <li>in neither case, changes alignment or group colour thresholds (PID or
207    * Conservation)</li>
208    * </ul>
209    */
 
210  1 toggle @Test(groups = "Functional")
211    public void testChangeColour_background_groupsAndThresholds()
212    {
213  1 AlignViewport av = af.getViewport();
214  1 AlignmentI al = av.getAlignment();
215   
216    /*
217    * Colour alignment by Buried Index
218    */
219  1 af.applyToAllGroups_actionPerformed(false);
220  1 af.changeColour_actionPerformed(JalviewColourScheme.Buried.toString());
221  1 assertTrue(av.getGlobalColourScheme() instanceof BuriedColourScheme);
222  1 assertFalse(av.getResidueShading().conservationApplied());
223  1 assertEquals(av.getResidueShading().getThreshold(), 0);
224   
225    /*
226    * Apply Conservation 20%
227    */
228  1 af.conservationMenuItem_actionPerformed(true);
229  1 SliderPanel sp = SliderPanel.getSliderPanel();
230  1 assertEquals(sp.getTitle(), MessageManager.formatMessage(
231    "label.conservation_colour_increment", new String[]
232    { "Background" }));
233  1 assertTrue(sp.isForConservation());
234  1 sp.valueChanged(20);
235  1 assertTrue(av.getResidueShading().conservationApplied());
236  1 assertEquals(av.getResidueShading().getConservationInc(), 20);
237   
238    /*
239    * Apply PID threshold 10% (conservation still applies as well)
240    */
241  1 af.abovePIDThreshold_actionPerformed(true);
242  1 sp = SliderPanel.getSliderPanel();
243  1 assertFalse(sp.isForConservation());
244  1 assertEquals(sp.getTitle(), MessageManager.formatMessage(
245    "label.percentage_identity_threshold", new String[]
246    { "Background" }));
247  1 sp.valueChanged(10);
248  1 assertEquals(av.getResidueShading().getThreshold(), 10);
249  1 assertTrue(av.getResidueShading().conservationApplied());
250  1 assertEquals(av.getResidueShading().getConservationInc(), 20);
251   
252    /*
253    * create a group with Strand colouring, 30% Conservation
254    * and 40% PID threshold
255    */
256  1 SequenceGroup sg = new SequenceGroup();
257  1 sg.addSequence(al.getSequenceAt(0), false);
258  1 sg.setStartRes(15);
259  1 sg.setEndRes(25);
260  1 av.setSelectionGroup(sg);
261   
262    /*
263    * apply 30% Conservation to group
264    * (notice menu action applies to selection group even if mouse click
265    * is at a sequence not in the group)
266    */
267  1 PopupMenu popupMenu = new PopupMenu(af.alignPanel, al.getSequenceAt(2),
268    null);
269  1 popupMenu.changeColour_actionPerformed(
270    JalviewColourScheme.Strand.toString());
271  1 assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
272  1 assertEquals(al.getGroups().size(), 1);
273  1 assertSame(al.getGroups().get(0), sg);
274  1 popupMenu.conservationMenuItem_actionPerformed(true);
275  1 sp = SliderPanel.getSliderPanel();
276  1 assertTrue(sp.isForConservation());
277  1 assertEquals(sp.getTitle(), MessageManager.formatMessage(
278    "label.conservation_colour_increment", new String[]
279    { sg.getName() }));
280  1 sp.valueChanged(30);
281  1 assertTrue(sg.getGroupColourScheme().conservationApplied());
282  1 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
283   
284    /*
285    * apply 40% PID threshold to group
286    */
287  1 popupMenu.abovePIDColour_actionPerformed(true);
288  1 sp = SliderPanel.getSliderPanel();
289  1 assertFalse(sp.isForConservation());
290  1 assertEquals(sp.getTitle(), MessageManager.formatMessage(
291    "label.percentage_identity_threshold", new String[]
292    { sg.getName() }));
293  1 sp.valueChanged(40);
294  1 assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
295    // conservation threshold is unchanged:
296  1 assertTrue(sg.getGroupColourScheme().conservationApplied());
297  1 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
298   
299    /*
300    * change alignment colour - group colour, and all thresholds,
301    * should be unaffected
302    */
303  1 af.changeColour_actionPerformed(JalviewColourScheme.Turn.toString());
304  1 assertTrue(av.getGlobalColourScheme() instanceof TurnColourScheme);
305  1 assertTrue(av.getResidueShading().conservationApplied());
306  1 assertEquals(av.getResidueShading().getConservationInc(), 20);
307  1 assertEquals(av.getResidueShading().getThreshold(), 10);
308  1 assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
309  1 assertTrue(sg.getGroupColourScheme().conservationApplied());
310  1 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
311  1 assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
312   
313    /*
314    * Now change alignment colour with Apply Colour To All Groups
315    * - group colour should change, but not colour thresholds
316    */
317  1 af.applyToAllGroups_actionPerformed(true);
318  1 af.changeColour_actionPerformed(JalviewColourScheme.Helix.toString());
319  1 assertTrue(av.getGlobalColourScheme() instanceof HelixColourScheme);
320  1 assertTrue(av.getResidueShading().conservationApplied());
321  1 assertEquals(av.getResidueShading().getConservationInc(), 20);
322  1 assertEquals(av.getResidueShading().getThreshold(), 10);
323  1 assertTrue(sg.getColourScheme() instanceof HelixColourScheme);
324  1 assertTrue(sg.getGroupColourScheme().conservationApplied());
325  1 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
326  1 assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
327    }
328   
329    /**
330    * Test residue colouring with various options
331    * <ol>
332    * <li>no PID or Conservation threshold</li>
333    * <li>colour by Conservation applied</li>
334    * <li>colour by Conservation removed</li>
335    * <li>colour above PID - various values</li>
336    * <li>colour above PID removed</li>
337    * <li>Above PID plus By Conservation combined</li>
338    * <li>remove Above PID to leave just By Conservation</li>
339    * <li>re-add Above PID</li>
340    * <li>remove By Conservation to leave just Above PID</li>
341    * <li>remove Above PID to leave original colours</li>
342    * </ol>
343    */
 
344  1 toggle @Test(groups = "Functional")
345    public void testColourThresholdActions()
346    {
347  1 AlignViewport av = af.getViewport();
348  1 AlignmentI al = av.getAlignment();
349   
350    /*
351    * Colour alignment by Helix Propensity, no thresholds
352    */
353  1 af.applyToAllGroups_actionPerformed(false);
354  1 af.changeColour_actionPerformed(JalviewColourScheme.Helix.toString());
355  1 assertTrue(av.getGlobalColourScheme() instanceof HelixColourScheme);
356  1 assertFalse(av.getResidueShading().conservationApplied());
357  1 assertEquals(av.getResidueShading().getThreshold(), 0);
358   
359    /*
360    * inspect the colour of
361    * FER_CAPAN.9(I), column 15 (14 base 0)
362    * FER_CAPAN.10(SER), column 16 (15 base 0)
363    */
364  1 SequenceI ferCapan = al.findName("FER_CAPAN");
365  1 ResidueShaderI rs = av.getResidueShading();
366  1 Color c = rs.findColour('I', 14, ferCapan);
367  1 Color i_original = new Color(138, 117, 138);
368  1 assertEquals(c, i_original);
369  1 c = rs.findColour('S', 15, ferCapan);
370  1 Color s_original = new Color(54, 201, 54);
371  1 assertEquals(c, s_original);
372   
373    /*
374    * colour by conservation with increment 10
375    */
376  1 af.conservationMenuItem_actionPerformed(true);
377  1 SliderPanel sp = SliderPanel.getSliderPanel();
378  1 assertTrue(sp.isForConservation());
379  1 assertEquals(sp.getValue(), 30); // initial slider setting
380  1 c = rs.findColour('I', 14, ferCapan);
381  1 Color i_faded = new Color(255, 255, 255);
382  1 assertEquals(c, i_faded);
383  1 sp.valueChanged(10);
384  1 assertSame(rs, av.getResidueShading());
385  1 assertEquals(rs.getConservationInc(), 10);
386  1 c = rs.findColour('I', 14, ferCapan);
387  1 i_faded = new Color(196, 186, 196);
388  1 assertEquals(c, i_faded);
389  1 c = rs.findColour('S', 15, ferCapan);
390  1 Color s_faded = new Color(144, 225, 144);
391  1 assertEquals(c, s_faded);
392   
393    /*
394    * deselect By Conservation - colour should revert
395    */
396  1 af.conservationMenuItem_actionPerformed(false);
397  1 c = rs.findColour('S', 15, ferCapan);
398  1 assertEquals(c, s_original);
399   
400    /*
401    * now Above PID, threshold = 0%
402    * should be no change
403    */
404  1 af.abovePIDThreshold_actionPerformed(true);
405  1 sp = SliderPanel.getSliderPanel();
406  1 assertFalse(sp.isForConservation());
407  1 assertEquals(sp.getValue(), 0); // initial slider setting
408  1 c = rs.findColour('I', 14, ferCapan);
409  1 assertEquals(c, i_original);
410  1 c = rs.findColour('S', 15, ferCapan);
411  1 assertEquals(c, s_original);
412   
413    /*
414    * Above PID, threshold = 1%
415    * 15.I becomes White because no match to consensus (V)
416    * 16.S remains coloured as matches 66.66% consensus
417    */
418  1 sp.valueChanged(1);
419  1 c = rs.findColour('I', 14, ferCapan);
420  1 assertEquals(c, Color.white);
421  1 c = rs.findColour('S', 15, ferCapan);
422  1 assertEquals(c, s_original);
423   
424    /*
425    * threshold 66% - no further change yet...
426    */
427  1 sp.valueChanged(66);
428  1 c = rs.findColour('I', 14, ferCapan);
429  1 assertEquals(c, Color.white);
430  1 c = rs.findColour('S', 15, ferCapan);
431  1 assertEquals(c, s_original);
432   
433    /*
434    * threshold 67% - now both residues are white
435    */
436  1 sp.valueChanged(67);
437  1 c = rs.findColour('I', 14, ferCapan);
438  1 assertEquals(c, Color.white);
439  1 c = rs.findColour('S', 15, ferCapan);
440  1 assertEquals(c, Color.white);
441   
442    /*
443    * deselect Above PID - colours should revert
444    */
445  1 af.abovePIDThreshold_actionPerformed(false);
446  1 c = rs.findColour('I', 14, ferCapan);
447  1 assertEquals(c, i_original);
448  1 c = rs.findColour('S', 15, ferCapan);
449  1 assertEquals(c, s_original);
450   
451    /*
452    * Now combine Above 50% PID and By Conservation 10%
453    * 15.I is White because no match to consensus (V)
454    * 16.S is coloured but faded
455    */
456  1 af.abovePIDThreshold_actionPerformed(true);
457  1 sp = SliderPanel.getSliderPanel();
458  1 assertFalse(sp.isForConservation());
459  1 sp.valueChanged(50);
460  1 af.conservationMenuItem_actionPerformed(true);
461  1 sp = SliderPanel.getSliderPanel();
462  1 assertTrue(sp.isForConservation());
463  1 sp.valueChanged(10);
464  1 c = rs.findColour('I', 14, ferCapan);
465  1 assertEquals(c, Color.white);
466  1 c = rs.findColour('S', 15, ferCapan);
467  1 assertEquals(c, s_faded);
468   
469    /*
470    * turn off Above PID - should just leave Conservation fading as before
471    */
472  1 af.abovePIDThreshold_actionPerformed(false);
473  1 c = rs.findColour('I', 14, ferCapan);
474  1 assertEquals(c, i_faded);
475  1 c = rs.findColour('S', 15, ferCapan);
476  1 assertEquals(c, s_faded);
477   
478    /*
479    * Now add Above 50% PID to conservation colouring
480    * - should give the same as PID followed by conservation (above)
481    */
482  1 af.abovePIDThreshold_actionPerformed(true);
483  1 SliderPanel.getSliderPanel().valueChanged(50);
484  1 c = rs.findColour('I', 14, ferCapan);
485  1 assertEquals(c, Color.white);
486  1 c = rs.findColour('S', 15, ferCapan);
487  1 assertEquals(c, s_faded);
488   
489    /*
490    * turn off By Conservation
491    * should leave I white, S original (unfaded) colour
492    */
493  1 af.conservationMenuItem_actionPerformed(false);
494  1 c = rs.findColour('I', 14, ferCapan);
495  1 assertEquals(c, Color.white);
496  1 c = rs.findColour('S', 15, ferCapan);
497  1 assertEquals(c, s_original);
498   
499    /*
500    * finally turn off Above PID to leave original colours
501    */
502  1 af.abovePIDThreshold_actionPerformed(false);
503  1 c = rs.findColour('I', 14, ferCapan);
504  1 assertEquals(c, i_original);
505  1 c = rs.findColour('S', 15, ferCapan);
506  1 assertEquals(c, s_original);
507    }
508   
509    /**
510    * Verify that making a New View transfers alignment and group colour schemes,
511    * including any thresholds, to the new view. Because New View is performed by
512    * saving and reloading a 'project' file, this is similar to verifying a
513    * project save and reload.
514    *
515    * @see Jalview2xmlTests#testStoreAndRecoverColourThresholds()
516    */
 
517  1 toggle @Test(groups = "Functional")
518    public void testNewView_colourThresholds()
519    {
520  1 AlignViewport av = af.getViewport();
521  1 AlignmentI al = av.getAlignment();
522   
523    /*
524    * Colour alignment by Buried Index, Above 10% PID, By Conservation 20%
525    */
526  1 af.changeColour_actionPerformed(JalviewColourScheme.Buried.toString());
527  1 assertTrue(av.getGlobalColourScheme() instanceof BuriedColourScheme);
528  1 af.abovePIDThreshold_actionPerformed(true);
529  1 SliderPanel sp = SliderPanel.getSliderPanel();
530  1 assertFalse(sp.isForConservation());
531  1 sp.valueChanged(10);
532  1 af.conservationMenuItem_actionPerformed(true);
533  1 sp = SliderPanel.getSliderPanel();
534  1 assertTrue(sp.isForConservation());
535  1 sp.valueChanged(20);
536  1 ResidueShaderI rs = av.getResidueShading();
537  1 assertEquals(rs.getThreshold(), 10);
538  1 assertTrue(rs.conservationApplied());
539  1 assertEquals(rs.getConservationInc(), 20);
540   
541    /*
542    * create a group with Strand colouring, 30% Conservation
543    * and 40% PID threshold
544    */
545  1 SequenceGroup sg = new SequenceGroup();
546  1 sg.addSequence(al.getSequenceAt(0), false);
547  1 sg.setStartRes(15);
548  1 sg.setEndRes(25);
549  1 av.setSelectionGroup(sg);
550  1 PopupMenu popupMenu = new PopupMenu(af.alignPanel, al.getSequenceAt(0),
551    null);
552  1 popupMenu.changeColour_actionPerformed(
553    JalviewColourScheme.Strand.toString());
554  1 assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
555  1 assertEquals(al.getGroups().size(), 1);
556  1 assertSame(al.getGroups().get(0), sg);
557  1 popupMenu.conservationMenuItem_actionPerformed(true);
558  1 sp = SliderPanel.getSliderPanel();
559  1 assertTrue(sp.isForConservation());
560  1 sp.valueChanged(30);
561  1 popupMenu.abovePIDColour_actionPerformed(true);
562  1 sp = SliderPanel.getSliderPanel();
563  1 assertFalse(sp.isForConservation());
564  1 sp.valueChanged(40);
565  1 rs = sg.getGroupColourScheme();
566  1 assertTrue(rs.conservationApplied());
567  1 assertEquals(rs.getConservationInc(), 30);
568  1 assertEquals(rs.getThreshold(), 40);
569   
570    /*
571    * set slider panel focus to the background alignment
572    */
573  1 af.conservationMenuItem_actionPerformed(true);
574  1 sp = SliderPanel.getSliderPanel();
575  1 assertTrue(sp.isForConservation());
576  1 assertEquals(sp.getTitle(), MessageManager.formatMessage(
577    "label.conservation_colour_increment", new String[]
578    { "Background" }));
579   
580    /*
581    * make a new View, verify alignment and group colour schemes
582    */
583  1 af.newView_actionPerformed(null);
584  1 assertEquals(af.alignPanel.getViewName(), "View 1");
585  1 AlignViewport av2 = af.getViewport();
586  1 assertNotSame(av, av2);
587  1 assertSame(av2, af.alignPanel.av);
588  1 rs = av2.getResidueShading();
589  1 assertNotSame(av.getResidueShading(), rs);
590  1 assertEquals(rs.getThreshold(), 10);
591  1 assertTrue(rs.conservationApplied(), rs.toString());
592  1 assertEquals(rs.getConservationInc(), 20);
593  1 assertEquals(av2.getAlignment().getGroups().size(), 1);
594  1 sg = av2.getAlignment().getGroups().get(0);
595  1 rs = sg.getGroupColourScheme();
596  1 assertTrue(rs.conservationApplied());
597  1 assertEquals(rs.getConservationInc(), 30);
598  1 assertEquals(rs.getThreshold(), 40);
599   
600    /*
601    * check the Conservation SliderPanel (still open) is linked to
602    * and updates the new view (JAL-2385)
603    */
604  1 sp = SliderPanel.getSliderPanel();
605  1 assertTrue(sp.isForConservation());
606  1 assertEquals(sp.getTitle(), MessageManager.formatMessage(
607    "label.conservation_colour_increment", new String[]
608    { "View 1" }));
609  1 sp.valueChanged(22);
610  1 assertEquals(av2.getResidueShading().getConservationInc(), 22);
611    }
612   
613    /**
614    * Verify that making a New View preserves the dataset reference for the
615    * alignment. Otherwise, see a 'duplicate jar entry' reference when trying to
616    * save alignments with multiple views, and codon mappings will not be shared
617    * across all panels in a split frame.
618    *
619    * @see Jalview2xmlTests#testStoreAndRecoverColourThresholds()
620    */
 
621  1 toggle @Test(groups = "Functional")
622    public void testNewView_dsRefPreserved()
623    {
624  1 AlignViewport av = af.getViewport();
625  1 AlignmentI al = av.getAlignment();
626  1 AlignmentI original_ds = al.getDataset();
627  1 af.newView_actionPerformed(null);
628  1 assertNotEquals("New view didn't select the a new panel", av,
629    af.getViewport());
630  1 org.testng.Assert.assertEquals(original_ds,
631    af.getViewport().getAlignment().getDataset(),
632    "Dataset was not preserved in new view");
633    }
634    }