3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertTrue;
6 import jalview.bin.Cache;
7 import jalview.bin.Jalview;
8 import jalview.datamodel.Alignment;
9 import jalview.datamodel.AlignmentI;
10 import jalview.datamodel.Sequence;
11 import jalview.datamodel.SequenceGroup;
12 import jalview.datamodel.SequenceI;
13 import jalview.io.DataSourceType;
14 import jalview.io.FileLoader;
15 import jalview.util.MessageManager;
16 import jalview.viewmodel.ViewportRanges;
18 import java.awt.event.MouseEvent;
20 import javax.swing.JMenuItem;
21 import javax.swing.JPopupMenu;
23 import org.testng.annotations.BeforeClass;
24 import org.testng.annotations.Test;
26 public class ScalePanelTest
28 @BeforeClass(alwaysRun = true)
29 public void setUpJvOptionPane()
31 JvOptionPane.setInteractiveMode(false);
32 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
35 @Test(groups = "Functional")
36 public void testPreventNegativeStartColumn()
38 SequenceI seq1 = new Sequence("Seq1", "MATRESS");
39 SequenceI seq2 = new Sequence("Seq2", "MADNESS");
40 AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
42 AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
44 ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
46 MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, 4, 0, 1, false);
47 scalePanel.mousePressed(mouse);
48 scalePanel.mouseDragged(mouse);
50 // simulate dragging selection leftwards beyond the sequences giving
52 mouse = new MouseEvent(scalePanel, 0, 1, 0, -30, 0, 1, false);
54 scalePanel.mouseReleased(mouse);
56 SequenceGroup sg = scalePanel.av.getSelectionGroup();
57 int startCol = sg.getStartRes();
59 assertTrue(startCol >= 0);
65 @Test(groups = "Functional")
66 public void testSelectColumns_withHidden()
68 String seq1 = ">Seq1\nANTOFAGASTAVALPARAISOMONTEVIDEOANTANANARIVO";
69 AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(seq1,
70 DataSourceType.PASTE);
71 ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
74 * hide columns 1-20 (of 43); then 'drag' to select columns 30-31;
75 * 31 is 51 in absolute columns but bug JAL-3212 reduces it to
78 AlignViewport viewport = alignFrame.getViewport();
79 ViewportRanges ranges = viewport.getRanges();
80 assertEquals(ranges.getStartRes(), 0);
81 assertEquals(ranges.getEndRes(), 42);
82 viewport.hideColumns(0, 19);
83 alignFrame.alignPanel.updateLayout();
84 assertEquals(ranges.getStartRes(), 0);
85 assertEquals(ranges.getEndRes(), 22);
87 int cw = viewport.getCharWidth();
88 int xPos = 9 * cw + 2;
89 MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1,
91 scalePanel.mousePressed(mouse);
92 scalePanel.mouseDragged(mouse);
94 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
95 scalePanel.mouseReleased(mouse);
97 SequenceGroup sg = scalePanel.av.getSelectionGroup();
98 assertEquals(sg.getStartRes(), 29);
99 assertEquals(sg.getEndRes(), 30);
102 @Test(groups = "Functional")
103 public void testBuildPopupMenu()
105 final String hide = MessageManager.getString("label.hide_columns");
106 final String reveal = MessageManager.getString("label.reveal");
107 final String revealAll = MessageManager.getString("action.reveal_all");
109 String seq1 = ">Seq1\nANTOFAGASTA";
110 AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(seq1,
111 DataSourceType.PASTE);
112 ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
113 AlignViewport viewport = alignFrame.getViewport();
114 int cw = viewport.getCharWidth();
117 * hide columns 3-4 (counting from 0)
119 viewport.hideColumns(3, 4);
120 alignFrame.alignPanel.updateLayout();
123 * verify popup menu left/right of hidden column marker
124 * NB need to call mouseMoved first as this sets field 'reveal'
126 int xPos = 1 * cw + 2; // 2 columns left of hidden marker
127 MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1,
129 scalePanel.mouseMoved(mouse);
130 JPopupMenu popup = scalePanel.buildPopupMenu(1);
131 assertEquals(popup.getSubElements().length, 0);
134 * popup just left of hidden marker has 'Reveal'
137 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
138 scalePanel.mouseMoved(mouse);
139 popup = scalePanel.buildPopupMenu(2);
140 assertEquals(popup.getSubElements().length, 1);
141 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
144 * popup just right of hidden marker has 'Reveal'
147 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
148 scalePanel.mouseMoved(mouse);
149 popup = scalePanel.buildPopupMenu(5); // allowing for 2 hidden columns
150 assertEquals(popup.getSubElements().length, 1);
151 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
154 * popup further right is empty
157 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
158 scalePanel.mouseMoved(mouse);
159 popup = scalePanel.buildPopupMenu(6); // allowing for 2 hidden columns
160 assertEquals(popup.getSubElements().length, 0);
163 * 'drag' to select columns around the hidden column marker
166 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
167 scalePanel.mousePressed(mouse);
168 scalePanel.mouseDragged(mouse);
170 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
171 scalePanel.mouseReleased(mouse);
174 * popup 2 columns left of marker: 'Hide' only
177 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
178 scalePanel.mouseMoved(mouse);
179 popup = scalePanel.buildPopupMenu(1);
180 assertEquals(popup.getSubElements().length, 1);
181 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), hide);
184 * popup just left of marker: 'Reveal' and 'Hide'
187 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
188 scalePanel.mouseMoved(mouse);
189 popup = scalePanel.buildPopupMenu(1);
190 assertEquals(popup.getSubElements().length, 2);
191 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
192 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(), hide);
195 * popup just right of marker: 'Reveal' and 'Hide'
198 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
199 scalePanel.mouseMoved(mouse);
200 popup = scalePanel.buildPopupMenu(5);
201 assertEquals(popup.getSubElements().length, 2);
202 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
203 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(), hide);
206 * hiding a second region adds option 'Reveal all' to 'Reveal'
208 viewport.hideColumns(6, 7);
209 alignFrame.alignPanel.updateLayout();
211 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
212 scalePanel.mouseMoved(mouse);
213 popup = scalePanel.buildPopupMenu(5);
214 assertEquals(popup.getSubElements().length, 3);
215 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
216 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(),
218 assertEquals(((JMenuItem) popup.getSubElements()[2]).getText(), hide);
220 alignFrame.deselectAllSequenceMenuItem_actionPerformed(null);
221 popup = scalePanel.buildPopupMenu(5);
222 assertEquals(popup.getSubElements().length, 2);
223 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
224 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(),
228 @BeforeClass(alwaysRun = true)
229 public static void setUpBeforeClass() throws Exception
232 * use read-only test properties file
234 Cache.loadProperties("test/jalview/io/testProps.jvprops");
235 Jalview.main(new String[] { "-nonews" });