package picard.util;
import htsjdk.samtools.SAMFileHeader;
import htsjdk.samtools.SAMRecord;
import htsjdk.samtools.SAMRecordSetBuilder;
import htsjdk.samtools.util.PeekableIterator;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* Unit tests for QuerySortedReadPairIteratorUtil
*/
public class QuerySortedReadPairIteratorUtilTest {
private static final int READ_LENGTH = 20;
@Test
public void testBasicPairedRead() {
SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
builder.setReadLength(READ_LENGTH);
builder.addPair("mapped_paired", 1, 1, 31);
PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(builder.iterator());
QuerySortedReadPairIteratorUtil.ReadPair pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNotNull(pair);
Assert.assertNotNull(pair.read1);
Assert.assertNotNull(pair.read2);
Assert.assertEquals("mapped_paired", pair.read1.getReadName());
Assert.assertEquals("mapped_paired", pair.read2.getReadName());
pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNull(pair);
}
@Test
public void testBasicUnmappedReadPair() {
SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
builder.setReadLength(READ_LENGTH);
builder.addUnmappedPair("unmapped_paired");
PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(builder.iterator());
QuerySortedReadPairIteratorUtil.ReadPair pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNotNull(pair);
Assert.assertNotNull(pair.read1);
Assert.assertNotNull(pair.read2);
Assert.assertEquals("unmapped_paired", pair.read1.getReadName());
Assert.assertEquals("unmapped_paired", pair.read2.getReadName());
pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNull(pair);
}
@Test
public void testBasicHalfmappedReadPair() {
SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
builder.setReadLength(READ_LENGTH);
builder.addPair("halfmapped_paired", 1, 1, 31, false, true, "20M", "20M", true, false, 20);
PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(builder.iterator());
QuerySortedReadPairIteratorUtil.ReadPair pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNotNull(pair);
Assert.assertNotNull(pair.read1);
Assert.assertNotNull(pair.read2);
Assert.assertEquals("halfmapped_paired", pair.read1.getReadName());
Assert.assertEquals("halfmapped_paired", pair.read2.getReadName());
pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNull(pair);
}
@Test
public void testFragmentNoReadPair() {
SAMRecordSetBuilder builder = new SAMRecordSetBuilder(false, SAMFileHeader.SortOrder.queryname);
builder.setReadLength(READ_LENGTH);
builder.addFrag("mapped_frag_a", 1, 1, false);
builder.addFrag("mapped_frag_b", 1, 1, false);
PeekableIterator<SAMRecord> iterator = new PeekableIterator<SAMRecord>(builder.iterator());
QuerySortedReadPairIteratorUtil.ReadPair pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNotNull(pair);
Assert.assertNotNull(pair.read1);
Assert.assertNull(pair.read2);
Assert.assertEquals("mapped_frag_a", pair.read1.getReadName());
pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNotNull(pair);
Assert.assertNotNull(pair.read1);
Assert.assertNull(pair.read2);
Assert.assertEquals("mapped_frag_b", pair.read1.getReadName());
pair = QuerySortedReadPairIteratorUtil.getNextReadPair(iterator);
Assert.assertNull(pair);
}
}