8df02e3ac6b92209681cbb290fa1037a7551b619
[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     String read = "CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC";
42
43     return new Object[][] { { "1S84M2I14M", read, 21,
44         "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
45         insertions },
46         { "1S84M2I14M", read, 21,
47             "-----------------------GAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGA-GGAGCTCGTTGGTC",
48             insertions3 },
49
50         { "44M1D57M",
51         read,
52         3,
53             "--CGAAG---CTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTG-AAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
54         insertions },
55         { "101M",
56             read, 4,
57             "---CGAA---GCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
58             insertions },
59         { "6M2D76M19S",
60             "CGAAGCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTCCC",
61             4,
62             "---CGAAGC----TTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGA",
63             insertions2 },
64
65         { "44M1D57M",
66             read,
67             3,
68             "--CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTG-AAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
69             noinsertions },
70         { "101M",
71             read, 4,
72             "---CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
73             noinsertions },
74         { "5S96M", read, 7,
75             "------CTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGTTGGTC",
76             noinsertions },
77         { "96M5H", read, 7,
78             "------CGAAGCTCTTTACCCGGAAACCATTGAAATCGGACGGTTTAGTGAAATGGAGGATCAAGTTGGGTTTGGGTTCCGTCCGAACGACGAGGAGCTCGT",
79             noinsertions }, };
80   }
81
82   @Test(dataProvider = "reads", groups = { "Functional" })
83   public void testParse(String cigar, String read, int start, String result,
84           SortedMap<Integer, Integer> insertions)
85   {
86     SAMRecord rec = new SAMRecord(null);
87     rec.setCigarString(cigar);
88     rec.setReadString(read);
89     rec.setAlignmentStart(start);
90
91     CigarParser cp = new CigarParser('-');
92     String bfresult = cp.parseCigarToSequence(rec, insertions);
93
94     System.out.println(result);
95     System.out.println(bfresult);
96     Assert.assertEquals(bfresult, result);
97   }
98
99   @Test(groups = { "Functional" })
100   public void testGetInsertions()
101   {
102     final SAMRecordSetBuilder builder = new SAMRecordSetBuilder();
103     builder.addFrag("read_1", 22, 30000, false, false,
104             "101M", "", 0);
105     builder.addFrag("read_2", 22, 28835, false, false,
106             "50M3I48M", "", 0);
107     builder.addFrag("read_3", 22, 28835, false, false, "3M1I75M2I1M", "",
108             0);
109     builder.addFrag("read_4", 22, 28865, false, false, "48M3I49M", "", 0);
110     builder.addFrag("read_5", 22, 28865, false, false, "49M3I47M2D2M", "",
111             0);
112     builder.addFrag("read_6", 22, 27000, false, false, "2M4I90M5S", "", 0);
113     builder.addFrag("read_7", 22, 27000, false, false, "2M1I98M", "", 0);
114
115     Iterator<SAMRecord> it = builder.iterator();
116     CigarParser cp = new CigarParser('-');
117     SortedMap<Integer, Integer> insertions = cp.getInsertions(it);
118     Assert.assertEquals(insertions.size(), 5);
119     Assert.assertTrue(insertions.containsKey(28838));
120     Assert.assertEquals((int) insertions.get(28838), 1);
121     Assert.assertTrue(insertions.containsKey(28885));
122     Assert.assertEquals((int) insertions.get(28885), 3);
123     Assert.assertTrue(insertions.containsKey(28913));
124     Assert.assertEquals((int) insertions.get(28913), 3);
125     Assert.assertTrue(insertions.containsKey(28914));
126     Assert.assertEquals((int) insertions.get(28914), 3);
127     Assert.assertTrue(insertions.containsKey(27002));
128     Assert.assertEquals((int) insertions.get(27002), 4);
129   }
130 }