2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ The Jalview Authors
5 * This file is part of Jalview.
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.
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.
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.
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertFalse;
25 import static org.testng.AssertJUnit.assertSame;
26 import static org.testng.AssertJUnit.assertTrue;
28 import jalview.datamodel.Alignment;
29 import jalview.datamodel.AlignmentI;
30 import jalview.datamodel.Sequence;
31 import jalview.datamodel.SequenceFeature;
32 import jalview.datamodel.SequenceGroup;
33 import jalview.datamodel.SequenceI;
34 import jalview.io.DataSourceType;
35 import jalview.io.FileLoader;
36 import jalview.schemes.BuriedColourScheme;
37 import jalview.schemes.HelixColourScheme;
38 import jalview.schemes.JalviewColourScheme;
39 import jalview.schemes.StrandColourScheme;
40 import jalview.schemes.TurnColourScheme;
41 import jalview.util.MessageManager;
43 import java.util.List;
45 import org.testng.annotations.BeforeClass;
46 import org.testng.annotations.BeforeMethod;
47 import org.testng.annotations.Test;
49 public class AlignFrameTest
53 @BeforeClass(alwaysRun = true)
54 public void setUpJvOptionPane()
56 JvOptionPane.setInteractiveMode(false);
57 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
60 @Test(groups = "Functional")
61 public void testHideFeatureColumns()
63 SequenceI seq1 = new Sequence("Seq1", "ABCDEFGHIJ");
64 SequenceI seq2 = new Sequence("Seq2", "ABCDEFGHIJ");
65 seq1.addSequenceFeature(new SequenceFeature("Metal", "", 1, 5,
67 seq2.addSequenceFeature(new SequenceFeature("Metal", "", 6, 10,
69 seq1.addSequenceFeature(new SequenceFeature("Turn", "", 2, 4,
71 seq2.addSequenceFeature(new SequenceFeature("Turn", "", 7, 9,
73 AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
74 AlignFrame af = new AlignFrame(al, al.getWidth(), al.getHeight());
77 * hiding a feature not present does nothing
79 assertFalse(af.hideFeatureColumns("exon", true));
80 assertTrue(af.getViewport().getColumnSelection().isEmpty());
81 assertTrue(af.getViewport().getColumnSelection().getHiddenColumns()
83 assertFalse(af.hideFeatureColumns("exon", false));
84 assertTrue(af.getViewport().getColumnSelection().isEmpty());
85 assertTrue(af.getViewport().getColumnSelection().getHiddenColumns()
89 * hiding a feature in all columns does nothing
91 assertFalse(af.hideFeatureColumns("Metal", true));
92 assertTrue(af.getViewport().getColumnSelection().isEmpty());
93 List<int[]> hidden = af.getViewport().getColumnSelection()
95 assertTrue(hidden.isEmpty());
98 * hide a feature present in some columns
99 * sequence positions [2-4], [7-9] are column positions
100 * [1-3], [6-8] base zero
102 assertTrue(af.hideFeatureColumns("Turn", true));
103 hidden = af.getViewport().getColumnSelection().getHiddenColumns();
104 assertEquals(2, hidden.size());
105 assertEquals(1, hidden.get(0)[0]);
106 assertEquals(3, hidden.get(0)[1]);
107 assertEquals(6, hidden.get(1)[0]);
108 assertEquals(8, hidden.get(1)[1]);
114 af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
115 DataSourceType.FILE);
119 * Test that changing background (alignment) colour scheme
121 * <li>with Apply Colour to All Groups not selected, does not change group
123 * <li>with Apply Colour to All Groups selected, does change group colours</li>
124 * <li>in neither case, changes alignment or group colour thresholds (PID or
129 public void testChangeColour_background_groupsAndThresholds()
131 AlignViewport av = af.getViewport();
132 AlignmentI al = av.getAlignment();
135 * Colour alignment by Buried Index
137 af.applyToAllGroups_actionPerformed(false);
138 af.changeColour_actionPerformed(JalviewColourScheme.Buried.toString());
139 assertTrue(av.getGlobalColourScheme() instanceof BuriedColourScheme);
140 assertFalse(av.getViewportColourScheme().conservationApplied());
141 assertEquals(av.getViewportColourScheme().getThreshold(), 0);
144 * Apply Conservation 20%
146 af.conservationMenuItem_actionPerformed(true);
147 SliderPanel sp = SliderPanel.getSliderPanel();
148 assertEquals(sp.getTitle(), MessageManager.formatMessage(
149 "label.conservation_colour_increment",
150 new String[] { "Background" }));
151 assertTrue(sp.isForConservation());
153 assertTrue(av.getViewportColourScheme().conservationApplied());
154 assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
157 * Apply PID threshold 10% (conservation still applies as well)
159 af.abovePIDThreshold_actionPerformed(true);
160 sp = SliderPanel.getSliderPanel();
161 assertFalse(sp.isForConservation());
162 assertEquals(sp.getTitle(), MessageManager.formatMessage(
163 "label.percentage_identity_threshold",
164 new String[] { "Background" }));
166 assertEquals(av.getViewportColourScheme().getThreshold(), 10);
167 assertTrue(av.getViewportColourScheme().conservationApplied());
168 assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
171 * create a group with Strand colouring, 30% Conservation
172 * and 40% PID threshold
174 SequenceGroup sg = new SequenceGroup();
175 sg.addSequence(al.getSequenceAt(0), false);
178 av.setSelectionGroup(sg);
181 * apply 30% Conservation to group
183 PopupMenu popupMenu = new PopupMenu(af.alignPanel, null, null);
184 popupMenu.changeColour_actionPerformed(JalviewColourScheme.Strand
186 assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
187 assertEquals(al.getGroups().size(), 1);
188 assertSame(al.getGroups().get(0), sg);
189 popupMenu.conservationMenuItem_actionPerformed(true);
190 sp = SliderPanel.getSliderPanel();
191 assertTrue(sp.isForConservation());
192 assertEquals(sp.getTitle(), MessageManager.formatMessage(
193 "label.conservation_colour_increment",
194 new String[] { sg.getName() }));
196 assertTrue(sg.getGroupColourScheme().conservationApplied());
197 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
200 * apply 40% PID threshold to group
202 popupMenu.abovePIDColour_actionPerformed(true);
203 sp = SliderPanel.getSliderPanel();
204 assertFalse(sp.isForConservation());
205 assertEquals(sp.getTitle(), MessageManager.formatMessage(
206 "label.percentage_identity_threshold",
207 new String[] { sg.getName() }));
209 assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
210 // conservation threshold is unchanged:
211 assertTrue(sg.getGroupColourScheme().conservationApplied());
212 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
215 * change alignment colour - group colour, and all thresholds,
216 * should be unaffected
218 af.changeColour_actionPerformed(JalviewColourScheme.Turn.toString());
219 assertTrue(av.getGlobalColourScheme() instanceof TurnColourScheme);
220 assertTrue(av.getViewportColourScheme().conservationApplied());
221 assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
222 assertEquals(av.getViewportColourScheme().getThreshold(), 10);
223 assertTrue(sg.getColourScheme() instanceof StrandColourScheme);
224 assertTrue(sg.getGroupColourScheme().conservationApplied());
225 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
226 assertEquals(sg.getGroupColourScheme().getThreshold(), 40);
229 * Now change alignment colour with Apply Colour To All Groups
230 * - group colour should change, but not colour thresholds
232 af.applyToAllGroups_actionPerformed(true);
233 af.changeColour_actionPerformed(JalviewColourScheme.Helix.toString());
234 assertTrue(av.getGlobalColourScheme() instanceof HelixColourScheme);
235 assertTrue(av.getViewportColourScheme().conservationApplied());
236 assertEquals(av.getViewportColourScheme().getConservationInc(), 20);
237 assertEquals(av.getViewportColourScheme().getThreshold(), 10);
238 assertTrue(sg.getColourScheme() instanceof HelixColourScheme);
239 assertTrue(sg.getGroupColourScheme().conservationApplied());
240 assertEquals(sg.getGroupColourScheme().getConservationInc(), 30);
241 assertEquals(sg.getGroupColourScheme().getThreshold(), 40);