JAL-3212 unit test and fix for Scale Panel bug
[jalview.git] / test / jalview / gui / ScalePanelTest.java
1 package jalview.gui;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertTrue;
5
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.viewmodel.ViewportRanges;
16
17 import java.awt.event.MouseEvent;
18
19 import org.testng.annotations.BeforeClass;
20 import org.testng.annotations.Test;
21
22 public class ScalePanelTest
23 {
24   @BeforeClass(alwaysRun = true)
25   public void setUpJvOptionPane()
26   {
27     JvOptionPane.setInteractiveMode(false);
28     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
29   }
30
31   @Test(groups = "Functional")
32   public void testPreventNegativeStartColumn()
33   {
34     SequenceI seq1 = new Sequence("Seq1", "MATRESS");
35     SequenceI seq2 = new Sequence("Seq2", "MADNESS");
36     AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
37
38     AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
39             al.getHeight());
40     ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
41
42     MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, 4, 0, 1, false);
43     scalePanel.mousePressed(mouse);
44     scalePanel.mouseDragged(mouse);
45
46     // simulate dragging selection leftwards beyond the sequences giving
47     // negative X
48     mouse = new MouseEvent(scalePanel, 0, 1, 0, -30, 0, 1, false);
49
50     scalePanel.mouseReleased(mouse);
51
52     SequenceGroup sg = scalePanel.av.getSelectionGroup();
53     int startCol = sg.getStartRes();
54
55     assertTrue(startCol >= 0);
56   }
57
58   /**
59    * Test for JAL-3212
60    */
61   @Test(groups = "Functional")
62   public void testSelectColumns_withHidden()
63   {
64     String seq1 = ">Seq1\nANTOFAGASTAVALPARAISOMONTEVIDEOANTANANARIVO";
65     AlignFrame alignFrame = new FileLoader().LoadFileWaitTillLoaded(seq1,
66             DataSourceType.PASTE);
67     ScalePanel scalePanel = alignFrame.alignPanel.getScalePanel();
68
69     /*
70      * hide columns 1-20 (of 43); then 'drag' to select columns 30-31;
71      * 31 is 51 in absolute columns but bug JAL-3212 reduces it to
72      * endRes which is 22
73      */
74     AlignViewport viewport = alignFrame.getViewport();
75     ViewportRanges ranges = viewport.getRanges();
76     assertEquals(ranges.getStartRes(), 0);
77     assertEquals(ranges.getEndRes(), 42);
78     viewport.hideColumns(0, 19);
79     alignFrame.alignPanel.updateLayout();
80     assertEquals(ranges.getStartRes(), 0);
81     assertEquals(ranges.getEndRes(), 22);
82     
83     int cw = viewport.getCharWidth();
84     int xPos = 9 * cw + 2;
85     MouseEvent mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1,
86             false);
87     scalePanel.mousePressed(mouse);
88     scalePanel.mouseDragged(mouse);
89     xPos += cw;
90     mouse = new MouseEvent(scalePanel, 0, 1, 0, xPos, 0, 1, false);
91     scalePanel.mouseReleased(mouse);
92
93     SequenceGroup sg = scalePanel.av.getSelectionGroup();
94     assertEquals(sg.getStartRes(), 29);
95     assertEquals(sg.getEndRes(), 30);
96   }
97
98   @BeforeClass(alwaysRun = true)
99   public static void setUpBeforeClass() throws Exception
100   {
101     /*
102      * use read-only test properties file
103      */
104     Cache.loadProperties("test/jalview/io/testProps.jvprops");
105     Jalview.main(new String[] { "-nonews" });
106   }
107
108 }