Clover icon

Coverage Report

  1. Project Clover database Wed Nov 13 2024 16:12:26 GMT
  2. Package jalview.datamodel

File SeqCigarTest.java

 

Code metrics

14
64
5
1
207
132
12
0.19
12.8
5
2.4

Classes

Class Line # Actions
SeqCigarTest 35 64 12
0.9759036397.6%
 

Contributing tests

This file is covered by 2 tests. .

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.datamodel;
22   
23    import static org.testng.AssertJUnit.assertEquals;
24    import static org.testng.AssertJUnit.assertFalse;
25   
26    import jalview.gui.JvOptionPane;
27    import jalview.util.Comparison;
28   
29    import org.testng.annotations.BeforeClass;
30    import org.testng.annotations.Test;
31   
32    /**
33    * Unit tests for SeqCigar
34    */
 
35    public class SeqCigarTest
36    {
37   
 
38  1 toggle @BeforeClass(alwaysRun = true)
39    public void setUpJvOptionPane()
40    {
41  1 JvOptionPane.setInteractiveMode(false);
42  1 JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
43    }
44   
 
45  1 toggle @Test(groups = { "Functional" })
46    public void testFindPosition()
47    {
48  1 SequenceI oseq = new Sequence("MySeq", "ASD---ASD---ASD", 37, 45);
49  1 oseq.createDatasetSequence();
50  1 SeqCigar cs = new SeqCigar(oseq);
51  1 assertEquals(oseq.getSequenceAsString(), cs.getSequenceString('-'));
52  16 for (int c = 0, cLen = oseq.getLength(); c < cLen; c++)
53    {
54  15 int os_p = oseq.findPosition(c);
55  15 int cigar_p = cs.findPosition(c);
56  15 if (Comparison.isGap(oseq.getCharAt(c)))
57    {
58  6 assertEquals("Expected gap at position " + os_p + " column " + c,
59    -1, cigar_p);
60    }
61    else
62    {
63  9 assertEquals("Positions don't match for at column " + c, os_p,
64    cigar_p);
65    }
66    }
67    }
68   
69    /*
70    * refactored 'as is' from main method
71    *
72    * TODO: split into separate tests
73    */
 
74  1 toggle @Test(groups = { "Functional" })
75    public void testSomething() throws Exception
76    {
77  1 String o_seq = "asdfktryasdtqwrtsaslldddptyipqqwaslchvhttt";
78  1 Sequence s = new Sequence("MySeq", o_seq, 39, 80);
79  1 String orig_gapped = "----asdf------ktryas---dtqwrtsasll----dddptyipqqwa----slchvhttt";
80  1 Sequence s_gapped = new Sequence("MySeq", orig_gapped, 39, 80);
81  1 String ex_cs_gapped = "4I4M6I6M3I11M4I12M4I9M";
82  1 s_gapped.setDatasetSequence(s);
83  1 String sub_gapped_s = "------ktryas---dtqwrtsasll----dddptyipqqwa----slchvh";
84  1 Sequence s_subsequence_gapped = new Sequence("MySeq", sub_gapped_s, 43,
85    77);
86  1 s_subsequence_gapped.setDatasetSequence(s);
87   
88  1 SeqCigar c_null = new SeqCigar(s);
89  1 String cs_null = c_null.getCigarstring();
90  1 assertEquals("Failed to recover ungapped sequence cigar operations",
91    "42M", cs_null);
92  1 testCigar_string(s_gapped, ex_cs_gapped);
93  1 SeqCigar gen_sgapped = SeqCigar.parseCigar(s, ex_cs_gapped);
94  1 assertEquals("Failed parseCigar", ex_cs_gapped,
95    gen_sgapped.getCigarstring());
96   
97  1 testSeqRecovery(gen_sgapped, s_gapped);
98   
99    /*
100    * Test dataset resolution
101    */
102  1 SeqCigar sub_gapped = new SeqCigar(s_subsequence_gapped);
103  1 testSeqRecovery(sub_gapped, s_subsequence_gapped);
104   
105    /*
106    * Test width functions
107    */
108  1 assertEquals("Failed getWidth", sub_gapped_s.length(),
109    sub_gapped.getWidth());
110   
111  1 sub_gapped.getFullWidth();
112  1 assertFalse("hasDeletedRegions is incorrect",
113    sub_gapped.hasDeletedRegions());
114   
115    // Test start-end region SeqCigar
116  1 SeqCigar sub_se_gp = new SeqCigar(s_subsequence_gapped, 8, 48);
117  1 assertEquals(
118    "SeqCigar(seq, start, end) not properly clipped alignsequence",
119    41, sub_se_gp.getWidth());
120   
121    /*
122    * TODO: can we add assertions to the sysouts that follow?
123    */
124  1 System.out.println("\nOriginal sequence align:\n" + sub_gapped_s
125    + "\nReconstructed window from 8 to 48\n" + "XXXXXXXX"
126    + sub_se_gp.getSequenceString('-') + "..." + "\nCigar String:"
127    + sub_se_gp.getCigarstring() + "\n");
128  1 SequenceI ssgp = sub_se_gp.getSeq('-');
129  1 System.out.println("\t " + ssgp.getSequenceAsString());
130  11 for (int r = 0; r < 10; r++)
131    {
132  10 sub_se_gp = new SeqCigar(s_subsequence_gapped, 8, 48);
133  10 int sl = sub_se_gp.getWidth();
134  10 int st = sl - 1 - r;
135  110 for (int rs = 0; rs < 10; rs++)
136    {
137  100 int e = st + rs;
138  100 sub_se_gp.deleteRange(st, e);
139  100 String ssgapedseq = sub_se_gp.getSeq('-').getSequenceAsString();
140  100 System.out.println(st + "," + e + "\t:" + ssgapedseq);
141  100 st -= 3;
142    }
143    }
144   
145  1 SeqCigar[] set = new SeqCigar[] { new SeqCigar(s),
146    new SeqCigar(s_subsequence_gapped, 8, 48), new SeqCigar(s_gapped) };
147  1 Alignment al = new Alignment(set);
148  4 for (int i = 0; i < al.getHeight(); i++)
149    {
150  3 System.out.println("" + al.getSequenceAt(i).getName() + "\t"
151    + al.getSequenceAt(i).getStart() + "\t"
152    + al.getSequenceAt(i).getEnd() + "\t"
153    + al.getSequenceAt(i).getSequenceAsString());
154    }
155   
156  1 System.out.println("Gapped.");
157  1 set = new SeqCigar[] { new SeqCigar(s),
158    new SeqCigar(s_subsequence_gapped, 8, 48), new SeqCigar(s_gapped) };
159  1 set[0].deleteRange(20, 25);
160  1 al = new Alignment(set);
161  4 for (int i = 0; i < al.getHeight(); i++)
162    {
163  3 System.out.println("" + al.getSequenceAt(i).getName() + "\t"
164    + al.getSequenceAt(i).getStart() + "\t"
165    + al.getSequenceAt(i).getEnd() + "\t"
166    + al.getSequenceAt(i).getSequenceAsString());
167    }
168   
169    // if (!ssgapedseq.equals("ryas---dtqqwa----slchvh"))
170    // System.err.println("Subseqgaped\n------ktryas---dtqwrtsasll----dddptyipqqwa----slchvhryas---dtqwrtsasll--qwa----slchvh\n"+ssgapedseq+"\n"+sub_se_gp.getCigarstring());
171    }
172   
173    /**
174    * non rigorous testing
175    *
176    * @param seq
177    * Sequence
178    * @param ex_cs_gapped
179    * String
180    * @return String
181    */
182   
 
183  1 toggle protected void testCigar_string(Sequence seq, String ex_cs_gapped)
184    {
185  1 SeqCigar c_sgapped = new SeqCigar(seq);
186  1 String cs_gapped = c_sgapped.getCigarstring();
187  1 assertEquals("Failed getCigarstring", ex_cs_gapped, cs_gapped);
188    }
189   
 
190  2 toggle protected void testSeqRecovery(SeqCigar gen_sgapped, SequenceI s_gapped)
191    {
192    // this is non-rigorous - start and end recovery is not tested.
193  2 SequenceI gen_sgapped_s = gen_sgapped.getSeq('-');
194    // assertEquals("Couldn't reconstruct sequence", s_gapped.getSequence(),
195    // gen_sgapped_s);
196  2 if (!gen_sgapped_s.getSequenceAsString()
197    .equals(s_gapped.getSequenceAsString()))
198    {
199    // TODO: investigate errors reported here, to allow full conversion to
200    // passing JUnit assertion form
201  0 System.err.println("Couldn't reconstruct sequence.\n"
202    + gen_sgapped_s.getSequenceAsString() + "\n"
203    + s_gapped.getSequenceAsString());
204    }
205    }
206   
207    }