JAL-1270 JUnit to TestNG refactoring
[jalview.git] / test / jalview / datamodel / SeqCigarTest.java
1 package jalview.datamodel;
2
3 import static org.testng.AssertJUnit.assertEquals;
4 import static org.testng.AssertJUnit.assertFalse;
5
6 import org.testng.annotations.Test;
7
8 /**
9  * Unit tests for SeqCigar
10  */
11 public class SeqCigarTest
12 {
13   /*
14    * refactored 'as is' from main method
15    * 
16    * TODO: split into separate tests
17    */
18   @Test
19   public void testSomething() throws Exception
20   {
21     String o_seq = "asdfktryasdtqwrtsaslldddptyipqqwaslchvhttt";
22     Sequence s = new Sequence("MySeq", o_seq, 39, 80);
23     String orig_gapped = "----asdf------ktryas---dtqwrtsasll----dddptyipqqwa----slchvhttt";
24     Sequence s_gapped = new Sequence("MySeq", orig_gapped, 39, 80);
25     String ex_cs_gapped = "4I4M6I6M3I11M4I12M4I9M";
26     s_gapped.setDatasetSequence(s);
27     String sub_gapped_s = "------ktryas---dtqwrtsasll----dddptyipqqwa----slchvh";
28     Sequence s_subsequence_gapped = new Sequence("MySeq", sub_gapped_s, 43,
29             77);
30     s_subsequence_gapped.setDatasetSequence(s);
31
32     SeqCigar c_null = new SeqCigar(s);
33     String cs_null = c_null.getCigarstring();
34     assertEquals("Failed to recover ungapped sequence cigar operations",
35             "42M", cs_null);
36     testCigar_string(s_gapped, ex_cs_gapped);
37     SeqCigar gen_sgapped = SeqCigar.parseCigar(s, ex_cs_gapped);
38     assertEquals("Failed parseCigar", ex_cs_gapped,
39             gen_sgapped.getCigarstring());
40
41     testSeqRecovery(gen_sgapped, s_gapped);
42
43     /*
44      * Test dataset resolution
45      */
46     SeqCigar sub_gapped = new SeqCigar(s_subsequence_gapped);
47     testSeqRecovery(sub_gapped, s_subsequence_gapped);
48
49     /*
50      * Test width functions
51      */
52     assertEquals("Failed getWidth", sub_gapped_s.length(),
53             sub_gapped.getWidth());
54   
55     sub_gapped.getFullWidth();
56     assertFalse("hasDeletedRegions is incorrect",
57             sub_gapped.hasDeletedRegions());
58
59     // Test start-end region SeqCigar
60     SeqCigar sub_se_gp = new SeqCigar(s_subsequence_gapped, 8, 48);
61     assertEquals(
62             "SeqCigar(seq, start, end) not properly clipped alignsequence",
63             41, sub_se_gp.getWidth());
64
65     /*
66      * TODO: can we add assertions to the sysouts that follow?
67      */
68     System.out.println("Original sequence align:\n" + sub_gapped_s
69             + "\nReconstructed window from 8 to 48\n" + "XXXXXXXX"
70             + sub_se_gp.getSequenceString('-') + "..." + "\nCigar String:"
71             + sub_se_gp.getCigarstring() + "\n");
72     SequenceI ssgp = sub_se_gp.getSeq('-');
73     System.out.println("\t " + ssgp.getSequenceAsString());
74     for (int r = 0; r < 10; r++)
75     {
76       sub_se_gp = new SeqCigar(s_subsequence_gapped, 8, 48);
77       int sl = sub_se_gp.getWidth();
78       int st = sl - 1 - r;
79       for (int rs = 0; rs < 10; rs++)
80       {
81         int e = st + rs;
82         sub_se_gp.deleteRange(st, e);
83         String ssgapedseq = sub_se_gp.getSeq('-').getSequenceAsString();
84         System.out.println(st + "," + e + "\t:" + ssgapedseq);
85         st -= 3;
86       }
87     }
88
89     SeqCigar[] set = new SeqCigar[]
90     { new SeqCigar(s), new SeqCigar(s_subsequence_gapped, 8, 48),
91         new SeqCigar(s_gapped) };
92     Alignment al = new Alignment(set);
93     for (int i = 0; i < al.getHeight(); i++)
94     {
95       System.out.println("" + al.getSequenceAt(i).getName() + "\t"
96               + al.getSequenceAt(i).getStart() + "\t"
97               + al.getSequenceAt(i).getEnd() + "\t"
98               + al.getSequenceAt(i).getSequenceAsString());
99     }
100
101     System.out.println("Gapped.");
102     set = new SeqCigar[]
103     { new SeqCigar(s), new SeqCigar(s_subsequence_gapped, 8, 48),
104         new SeqCigar(s_gapped) };
105     set[0].deleteRange(20, 25);
106     al = new Alignment(set);
107     for (int i = 0; i < al.getHeight(); i++)
108     {
109       System.out.println("" + al.getSequenceAt(i).getName() + "\t"
110               + al.getSequenceAt(i).getStart() + "\t"
111               + al.getSequenceAt(i).getEnd() + "\t"
112               + al.getSequenceAt(i).getSequenceAsString());
113     }
114
115     // if (!ssgapedseq.equals("ryas---dtqqwa----slchvh"))
116     // System.err.println("Subseqgaped\n------ktryas---dtqwrtsasll----dddptyipqqwa----slchvhryas---dtqwrtsasll--qwa----slchvh\n"+ssgapedseq+"\n"+sub_se_gp.getCigarstring());
117   }
118
119   /**
120    * non rigorous testing
121    * 
122    * @param seq
123    *          Sequence
124    * @param ex_cs_gapped
125    *          String
126    * @return String
127    */
128
129
130   protected void testCigar_string(Sequence seq, String ex_cs_gapped)
131   {
132     SeqCigar c_sgapped = new SeqCigar(seq);
133     String cs_gapped = c_sgapped.getCigarstring();
134     assertEquals("Failed getCigarstring", ex_cs_gapped,
135             cs_gapped);
136   }
137
138
139   protected void testSeqRecovery(SeqCigar gen_sgapped,
140           SequenceI s_gapped)
141   {
142     // this is non-rigorous - start and end recovery is not tested.
143     SequenceI gen_sgapped_s = gen_sgapped.getSeq('-');
144     // assertEquals("Couldn't reconstruct sequence", s_gapped.getSequence(),
145     // gen_sgapped_s);
146     if (!gen_sgapped_s.getSequence().equals(s_gapped.getSequence()))
147     {
148       // TODO: investigate errors reported here, to allow full conversion to
149       // passing JUnit assertion form
150       System.err.println("Couldn't reconstruct sequence.\n"
151               + gen_sgapped_s.getSequenceAsString() + "\n"
152               + s_gapped.getSequenceAsString());
153     }
154   }
155
156 }