JAL-2909 Updated tests
[jalview.git] / test / jalview / datamodel / CigarParserTest.java
1 package jalview.datamodel;
2
3 import java.util.Iterator;
4 import java.util.SortedMap;
5 import java.util.TreeMap;
6
7 import org.testng.Assert;
8 import org.testng.annotations.BeforeClass;
9 import org.testng.annotations.DataProvider;
10 import org.testng.annotations.Test;
11
12 import htsjdk.samtools.SAMRecord;
13 import htsjdk.samtools.SAMRecordSetBuilder;
14
15 public class CigarParserTest
16 {
17   @BeforeClass(alwaysRun = true)
18   public void setup()
19   {
20
21
22
23   }
24
25   @DataProvider(name = "reads")
26   public Object[][] createReadsData()
27   {
28     SortedMap<Integer, Integer> noinsertions = new TreeMap<>();
29
30     SortedMap<Integer, Integer> insertions = new TreeMap<>();
31     insertions.put(8, 3);
32     insertions.put(105, 2);
33
34     SortedMap<Integer, Integer> insertions2 = new TreeMap<>();
35     insertions2.put(11, 2);
36
37     SortedMap<Integer, Integer> insertions3 = new TreeMap<>();
38     insertions3.put(8, 3);
39     insertions3.put(105, 3);
40
41     SortedMap<Integer, Integer> insertions4 = new TreeMap<>();
42     insertions4.put(8, 3);
43     insertions4.put(105, 2);
44     insertions4.put(109, 3);
45     insertions4.put(112, 1);
46
47     String read = "CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC";
48
49     return new Object[][] { { "1S84M2I14M", read, 21,
50         "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
51         insertions }, // first residue is G (accounting for C soft clip) at
52                       // position 21 + 3 (insertions at position 8)
53         { "1S84M2I14M", read, 21,
54             "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGA-GGAGCTCGTTGGTC",
55             insertions3 }, // read has 2 insertions accounted for in
56                            // insertions3, 3rd insertion is added as gap at
57                            // position 105
58         { "1S84M2I14M", read, 21,
59             "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAG---CTC-GTTGGTC",
60             insertions4 }, // 2 insertions in read accounted for at position
61                            // 105; 3 insertions at 109 and 1 insertion at 112
62         { "44M1D57M",
63         read,
64         3,
65             "--CGAAG---CTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTG-AAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
66         insertions },
67         { "101M",
68             read, 4,
69             "---CGAA---GCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
70             insertions },
71         { "6M2D76M19S",
72             "CGAAGCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTCCC",
73             4,
74             "---CGAAGC----TTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGA",
75             insertions2 },
76
77         { "44M1D57M",
78             read,
79             3,
80             "--CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTG-AAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
81             noinsertions },
82         { "101M",
83             read, 4,
84             "---CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
85             noinsertions },
86         { "5S96M", read, 7,
87             "------CTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
88             noinsertions },
89         { "96M5H", read, 7,
90             "------CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGT",
91             noinsertions }, };
92   }
93
94   @Test(dataProvider = "reads", groups = { "Functional" })
95   public void testParse(String cigar, String read, int start, String result,
96           SortedMap<Integer, Integer> insertions)
97   {
98     SAMRecord rec = new SAMRecord(null);
99     rec.setCigarString(cigar);
100     rec.setReadString(read);
101     rec.setAlignmentStart(start);
102
103     CigarParser cp = new CigarParser('-');
104     String bfresult = cp.parseCigarToSequence(rec, insertions, 1);
105
106     System.out.println(result);
107     System.out.println(bfresult);
108     Assert.assertEquals(bfresult, result);
109   }
110
111   @Test(groups = { "Functional" })
112   public void testGetInsertions()
113   {
114     final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
115     builder.addFrag("read_1", 22, 30000, false, false,
116             "101M", "", 0);
117     builder.addFrag("read_2", 22, 28835, false, false,
118             "50M3I48M", "", 0);
119     builder.addFrag("read_3", 22, 28835, false, false, "3M1I75M2I1M", "",
120             0);
121     builder.addFrag("read_4", 22, 28865, false, false, "48M3I49M", "", 0);
122     builder.addFrag("read_5", 22, 28865, false, false, "49M3I47M2D2M", "",
123             0);
124     builder.addFrag("read_6", 22, 27000, false, false, "2M4I90M5S", "", 0);
125     builder.addFrag("read_7", 22, 27000, false, false, "2M1I98M", "", 0);
126
127     builder.addFrag("read_8", 22, 27000, false, false, "3M200N2I5M", "", 0);
128
129     Iterator<SAMRecord> it = builder.iterator();
130     CigarParser cp = new CigarParser('-');
131     SortedMap<Integer, Integer> insertions = cp.getInsertions(it);
132     Assert.assertEquals(insertions.size(), 6);
133     Assert.assertTrue(insertions.containsKey(28838));
134     Assert.assertEquals((int) insertions.get(28838), 1);
135     Assert.assertTrue(insertions.containsKey(28885));
136     Assert.assertEquals((int) insertions.get(28885), 3);
137     Assert.assertTrue(insertions.containsKey(28913));
138     Assert.assertEquals((int) insertions.get(28913), 3);
139     Assert.assertTrue(insertions.containsKey(28914));
140     Assert.assertEquals((int) insertions.get(28914), 3);
141     Assert.assertTrue(insertions.containsKey(27002));
142     Assert.assertEquals((int) insertions.get(27002), 4);
143     Assert.assertTrue(insertions.containsKey(27203));
144     Assert.assertEquals((int) insertions.get(27203), 2);
145   }
146 }