Clover icon

Coverage Report

  1. Project Clover database Tue Mar 10 2026 14:58:44 GMT
  2. Package jalview.gui

File ScalePanelTest.java

 

Code metrics

0
114
5
1
264
165
5
0.04
22.8
5
1

Classes

Class Line # Actions
ScalePanelTest 46 114 5
0.00%
 

Contributing tests

No tests hitting this source file were found.

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.testng.Assert.assertEquals;
24    import static org.testng.Assert.assertTrue;
25   
26    import jalview.bin.Cache;
27    import jalview.bin.Jalview;
28    import jalview.datamodel.Alignment;
29    import jalview.datamodel.AlignmentI;
30    import jalview.datamodel.Sequence;
31    import jalview.datamodel.SequenceGroup;
32    import jalview.datamodel.SequenceI;
33    import jalview.io.DataSourceType;
34    import jalview.io.FileLoader;
35    import jalview.util.MessageManager;
36    import jalview.viewmodel.ViewportRanges;
37   
38    import java.awt.event.MouseEvent;
39   
40    import javax.swing.JMenuItem;
41    import javax.swing.JPopupMenu;
42   
43    import org.testng.annotations.BeforeClass;
44    import org.testng.annotations.Test;
45   
 
46    public class ScalePanelTest
47    {
 
48  0 toggle @BeforeClass(alwaysRun = true)
49    public void setUpJvOptionPane()
50    {
51  0 JvOptionPane.setInteractiveMode(false);
52  0 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
53    }
54   
 
55  0 toggle @Test(groups = "Functional")
56    public void testPreventNegativeStartColumn()
57    {
58  0 SequenceI seq1 = new Sequence("Seq1", "MATRESS");
59  0 SequenceI seq2 = new Sequence("Seq2", "MADNESS");
60  0 AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
61   
62  0 AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
63    al.getHeight());
64  0 ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
65   
66  0 MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, 4, 0, 1, false);
67   
68    // check the bounded lookup is not returning negatives
69  0 assertEquals(
70    alignFrame.alignPanel.getSeqPanel().findAlignmentColumn(mouse),
71    0);
72   
73  0 scalePanel.mousePressed(mouse);
74  0 scalePanel.mouseDragged(mouse);
75   
76    // simulate dragging selection leftwards beyond the sequences giving
77    // negative X
78  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, -30, 0, 1, false);
79   
80  0 scalePanel.mouseReleased(mouse);
81   
82  0 SequenceGroup sg = scalePanel.av.getSelectionGroup();
83  0 int startCol = sg.getStartRes();
84   
85  0 assertTrue(startCol >= 0);
86    }
87   
88    /**
89    * Test for JAL-3212
90    */
 
91  0 toggle @Test(groups = "Functional")
92    public void testSelectColumns_withHidden()
93    {
94  0 String seq1 = ">Seq1\nANTOFAGASTAVALPARAISOMONTEVIDEOANTANANARIVO";
95  0 AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(seq1,
96    DataSourceType.PASTE);
97  0 ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
98   
99    /*
100    * hide columns 1-20 (of 43); then 'drag' to select columns 30-31;
101    * 31 is 51 in absolute columns but bug JAL-3212 reduces it to
102    * endRes which is 22
103    */
104  0 AlignViewport viewport = alignFrame.getViewport();
105  0 ViewportRanges ranges = viewport.getRanges();
106  0 assertEquals(ranges.getStartRes(), 0);
107  0 assertEquals(ranges.getEndRes(), 42);
108  0 viewport.hideColumns(0, 19);
109  0 alignFrame.alignPanel.updateLayout();
110  0 assertEquals(ranges.getStartRes(), 0);
111  0 assertEquals(ranges.getEndRes(), 22);
112   
113  0 int cw = viewport.getCharWidth();
114  0 int xPos = 9 * cw + 2;
115  0 MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1,
116    false);
117  0 scalePanel.mousePressed(mouse);
118  0 scalePanel.mouseDragged(mouse);
119  0 xPos += cw;
120  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
121  0 scalePanel.mouseReleased(mouse);
122   
123  0 SequenceGroup sg = scalePanel.av.getSelectionGroup();
124  0 assertEquals(sg.getStartRes(), 29);
125  0 assertEquals(sg.getEndRes(), 30);
126    }
127   
 
128  0 toggle @Test(groups = "Functional")
129    public void testBuildPopupMenu()
130    {
131  0 final String hide = MessageManager.getString("label.hide_columns");
132  0 final String reveal = MessageManager.getString("label.reveal");
133  0 final String revealAll = MessageManager.getString("action.reveal_all");
134   
135  0 String seq1 = ">Seq1\nANTOFAGASTA";
136  0 AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(seq1,
137    DataSourceType.PASTE);
138  0 ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
139  0 AlignViewport viewport = alignFrame.getViewport();
140  0 int cw = viewport.getCharWidth();
141   
142    /*
143    * hide columns 3-4 (counting from 0)
144    */
145  0 viewport.hideColumns(3, 4);
146  0 alignFrame.alignPanel.updateLayout();
147   
148    /*
149    * verify popup menu left/right of hidden column marker
150    * NB need to call mouseMoved first as this sets field 'reveal'
151    */
152  0 int xPos = 1 * cw + 2; // 2 columns left of hidden marker
153  0 MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1,
154    false);
155  0 scalePanel.mouseMoved(mouse);
156  0 JPopupMenu popup = scalePanel.buildPopupMenu(1);
157  0 assertEquals(popup.getSubElements().length, 0);
158   
159    /*
160    * popup just left of hidden marker has 'Reveal'
161    */
162  0 xPos = 2 * cw + 2;
163  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
164  0 scalePanel.mouseMoved(mouse);
165  0 popup = scalePanel.buildPopupMenu(2);
166  0 assertEquals(popup.getSubElements().length, 1);
167  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
168   
169    /*
170    * popup just right of hidden marker has 'Reveal'
171    */
172  0 xPos = 3 * cw + 2;
173  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
174  0 scalePanel.mouseMoved(mouse);
175  0 popup = scalePanel.buildPopupMenu(5); // allowing for 2 hidden columns
176  0 assertEquals(popup.getSubElements().length, 1);
177  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
178   
179    /*
180    * popup further right is empty
181    */
182  0 xPos = 4 * cw + 2;
183  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
184  0 scalePanel.mouseMoved(mouse);
185  0 popup = scalePanel.buildPopupMenu(6); // allowing for 2 hidden columns
186  0 assertEquals(popup.getSubElements().length, 0);
187   
188    /*
189    * 'drag' to select columns around the hidden column marker
190    */
191  0 xPos = 1 * cw + 2;
192  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
193  0 scalePanel.mousePressed(mouse);
194  0 scalePanel.mouseDragged(mouse);
195  0 xPos = 5 * cw + 2;
196  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
197  0 scalePanel.mouseReleased(mouse);
198   
199    /*
200    * popup 2 columns left of marker: 'Hide' only
201    */
202  0 xPos = 1 * cw + 2;
203  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
204  0 scalePanel.mouseMoved(mouse);
205  0 popup = scalePanel.buildPopupMenu(1);
206  0 assertEquals(popup.getSubElements().length, 1);
207  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), hide);
208   
209    /*
210    * popup just left of marker: 'Reveal' and 'Hide'
211    */
212  0 xPos = 2 * cw + 2;
213  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
214  0 scalePanel.mouseMoved(mouse);
215  0 popup = scalePanel.buildPopupMenu(1);
216  0 assertEquals(popup.getSubElements().length, 2);
217  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
218  0 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(), hide);
219   
220    /*
221    * popup just right of marker: 'Reveal' and 'Hide'
222    */
223  0 xPos = 3 * cw + 2;
224  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
225  0 scalePanel.mouseMoved(mouse);
226  0 popup = scalePanel.buildPopupMenu(5);
227  0 assertEquals(popup.getSubElements().length, 2);
228  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
229  0 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(), hide);
230   
231    /*
232    * hiding a second region adds option 'Reveal all' to 'Reveal'
233    */
234  0 viewport.hideColumns(6, 7);
235  0 alignFrame.alignPanel.updateLayout();
236  0 xPos = 3 * cw + 2;
237  0 mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
238  0 scalePanel.mouseMoved(mouse);
239  0 popup = scalePanel.buildPopupMenu(5);
240  0 assertEquals(popup.getSubElements().length, 3);
241  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
242  0 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(),
243    revealAll);
244  0 assertEquals(((JMenuItem) popup.getSubElements()[2]).getText(), hide);
245   
246  0 alignFrame.deselectAllSequenceMenuItem_actionPerformed(null);
247  0 popup = scalePanel.buildPopupMenu(5);
248  0 assertEquals(popup.getSubElements().length, 2);
249  0 assertEquals(((JMenuItem) popup.getSubElements()[0]).getText(), reveal);
250  0 assertEquals(((JMenuItem) popup.getSubElements()[1]).getText(),
251    revealAll);
252    }
253   
 
254  0 toggle @BeforeClass(alwaysRun = true)
255    public static void setUpBeforeClass() throws Exception
256    {
257    /*
258    * use read-only test properties file
259    */
260  0 Cache.loadProperties("test/jalview/io/testProps.jvprops");
261  0 Jalview.main(new String[] { "--nonews" });
262    }
263   
264    }