JAL-3490 match count independent of contiguous matches count
[jalview.git] / test / jalview / datamodel / CigarArrayTest.java
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.datamodel;
22
23 import static org.testng.Assert.assertEquals;
24
25 import jalview.gui.JvOptionPane;
26
27 import org.testng.annotations.BeforeClass;
28 import org.testng.annotations.Test;
29
30 public class CigarArrayTest
31 {
32   @BeforeClass(alwaysRun = true)
33   public void setUpJvOptionPane()
34   {
35     JvOptionPane.setInteractiveMode(false);
36     JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
37   }
38
39   @Test(groups = "Functional")
40   public void testConstructor()
41   {
42     SequenceI seq1 = new Sequence("sq1",
43             "ASFDDABACBACBACBACBACBACBABCABCBACBABCAB");
44     Sequence seq2 = new Sequence("sq2",
45             "TTTTTTACBCBABCABCABCABCBACBACBABCABCABCBA");
46
47     // construct alignment
48     AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
49
50     // hide columns
51     HiddenColumns hc = new HiddenColumns();
52     hc.hideColumns(3, 6);
53     hc.hideColumns(16, 20);
54
55     // select group
56     SequenceGroup sg1 = new SequenceGroup();
57     sg1.addSequence(seq1, false);
58     sg1.setStartRes(2);
59     sg1.setEndRes(23);
60
61     // Cigar array meanings:
62     // M = match
63     // D = deletion
64     // I = insertion
65     // number preceding M/D/I is the number of residues which
66     // match/are deleted/are inserted
67     // In the CigarArray constructor only matches or deletions are created, as
68     // we are comparing a sequence to its own subsequence (the group) + hidden
69     // columns.
70
71     // no hidden columns case
72     CigarArray cig = new CigarArray(al, null, sg1);
73     String result = cig.getCigarstring();
74     assertEquals(result, "22M");
75
76     cig = new CigarArray(al, hc, sg1);
77     result = cig.getCigarstring();
78     assertEquals(result, "1M4D9M5D3M");
79
80     // group starts at hidden cols
81     sg1.setStartRes(3);
82     cig = new CigarArray(al, hc, sg1);
83     result = cig.getCigarstring();
84     assertEquals(result, "4D9M5D3M");
85
86     // group starts at last but 1 hidden col
87     sg1.setStartRes(5);
88     cig = new CigarArray(al, hc, sg1);
89     result = cig.getCigarstring();
90     assertEquals(result, "2D9M5D3M");
91
92     // group starts at last hidden col
93     sg1.setStartRes(6);
94     cig = new CigarArray(al, hc, sg1);
95     result = cig.getCigarstring();
96     assertEquals(result, "1D9M5D3M");
97
98     // group starts just after hidden region
99     sg1.setStartRes(7);
100     cig = new CigarArray(al, hc, sg1);
101     result = cig.getCigarstring();
102     assertEquals(result, "9M5D3M");
103
104     // group ends just before start of hidden region
105     sg1.setStartRes(5);
106     sg1.setEndRes(15);
107     cig = new CigarArray(al, hc, sg1);
108     result = cig.getCigarstring();
109     assertEquals(result, "2D9M");
110
111     // group ends at start of hidden region
112     sg1.setEndRes(16);
113     cig = new CigarArray(al, hc, sg1);
114     result = cig.getCigarstring();
115     assertEquals(result, "2D9M1D");
116
117     // group ends 1 after start of hidden region
118     sg1.setEndRes(17);
119     cig = new CigarArray(al, hc, sg1);
120     result = cig.getCigarstring();
121     assertEquals(result, "2D9M2D");
122
123     // group ends at end of hidden region
124     sg1.setEndRes(20);
125     cig = new CigarArray(al, hc, sg1);
126     result = cig.getCigarstring();
127     assertEquals(result, "2D9M5D");
128
129     // group ends just after end of hidden region
130     sg1.setEndRes(21);
131     cig = new CigarArray(al, hc, sg1);
132     result = cig.getCigarstring();
133     assertEquals(result, "2D9M5D1M");
134
135     // group ends 2 after end of hidden region
136     sg1.setEndRes(22);
137     cig = new CigarArray(al, hc, sg1);
138     result = cig.getCigarstring();
139     assertEquals(result, "2D9M5D2M");
140   }
141 }