package picard.sam;
import htsjdk.samtools.SAMRecord;
import htsjdk.samtools.SAMRecordSetBuilder;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.List;
/**
* Tests related to code in AbstractAlignmentMerger
*/
public class AbstractAlignmentMergerTest {
@Test public void tesOverlappedReadClippingWithNonOverlappedReads() {
final SAMRecordSetBuilder set = new SAMRecordSetBuilder();
set.setReadLength(110);
final List<SAMRecord> recs = set.addPair("q1", 0, 100, 200, false, false, "110M", "110M", false, true, 30);
final SAMRecord r1 = recs.get(0);
final SAMRecord r2 = recs.get(1);
AbstractAlignmentMerger.clipForOverlappingReads(r1, r2);
Assert.assertEquals(r1.getAlignmentStart(), 100);
Assert.assertEquals(r1.getCigarString(), "110M");
Assert.assertEquals(r2.getAlignmentStart(), 200);
Assert.assertEquals(r2.getCigarString(), "110M");
}
@Test public void testBasicOverlappedReadClipping() {
final SAMRecordSetBuilder set = new SAMRecordSetBuilder();
set.setReadLength(110);
final List<SAMRecord> recs = set.addPair("q1", 0, 100, 90, false, false, "110M", "110M", false, true, 30);
final SAMRecord r1 = recs.get(0);
final SAMRecord r2 = recs.get(1);
AbstractAlignmentMerger.clipForOverlappingReads(r1, r2);
Assert.assertEquals(r1.getAlignmentStart(), 100);
Assert.assertEquals(r1.getCigarString(), "100M10S");
Assert.assertEquals(r2.getAlignmentStart(), 100);
Assert.assertEquals(r2.getCigarString(), "10S100M");
}
@Test public void testOverlappedReadClippingWithExistingSoftClipping() {
final SAMRecordSetBuilder set = new SAMRecordSetBuilder();
set.setReadLength(120);
final List<SAMRecord> recs = set.addPair("q1", 0, 100, 95, false, false, "110M10S", "15S105M", false, true, 30);
final SAMRecord r1 = recs.get(0);
final SAMRecord r2 = recs.get(1);
AbstractAlignmentMerger.clipForOverlappingReads(r1, r2);
Assert.assertEquals(r1.getAlignmentStart(), 100);
Assert.assertEquals(r1.getCigarString(), "100M20S");
Assert.assertEquals(r2.getAlignmentStart(), 100);
Assert.assertEquals(r2.getCigarString(), "20S100M");
}
@Test public void testOverlappedReadClippingWithExistingSoftClippingAndHardClipping() {
final SAMRecordSetBuilder set = new SAMRecordSetBuilder();
set.setReadLength(120);
final List<SAMRecord> recs = set.addPair("q1", 0, 100, 95, false, false, "110M10S5H", "5H15S105M", false, true, 30);
final SAMRecord r1 = recs.get(0);
final SAMRecord r2 = recs.get(1);
AbstractAlignmentMerger.clipForOverlappingReads(r1, r2);
Assert.assertEquals(r1.getAlignmentStart(), 100);
Assert.assertEquals(r1.getCigarString(), "100M20S"); // Should ideally be 100M20S5H
Assert.assertEquals(r2.getAlignmentStart(), 100);
Assert.assertEquals(r2.getCigarString(), "20S100M"); // Should ideally be 5H20S100M
}
}