gatk-3.8/public/java/test/org/broadinstitute/sting/utils/ReadUtilsUnitTest.java

85 lines
3.9 KiB
Java
Executable File

package org.broadinstitute.sting.utils;
import net.sf.samtools.SAMFileHeader;
import net.sf.samtools.SAMRecord;
import org.broadinstitute.sting.BaseTest;
import org.broadinstitute.sting.utils.pileup.PileupElement;
import org.broadinstitute.sting.utils.sam.ArtificialSAMUtils;
import org.broadinstitute.sting.utils.sam.ReadUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class ReadUtilsUnitTest extends BaseTest {
SAMRecord read, reducedRead;
final static String BASES = "ACTG";
final static String QUALS = "!+5?";
final private static int REDUCED_READ_QUAL = 20;
@BeforeTest
public void init() {
SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1,1,1000);
read = ArtificialSAMUtils.createArtificialRead(header, "read1", 0, 1, BASES.length());
read.setReadUnmappedFlag(true);
read.setReadBases(new String(BASES).getBytes());
read.setBaseQualityString(new String(QUALS));
reducedRead = ArtificialSAMUtils.createArtificialRead(header, "reducedRead", 0, 1, BASES.length());
reducedRead.setReadBases(BASES.getBytes());
reducedRead.setBaseQualityString(QUALS);
reducedRead.setAttribute(ReadUtils.REDUCED_READ_QUALITY_TAG, REDUCED_READ_QUAL);
}
private void testReadBasesAndQuals(SAMRecord read, int expectedStart, int expectedStop) {
SAMRecord clipped = ReadUtils.hardClipBases(read, expectedStart, expectedStop - 1, null);
String expectedBases = BASES.substring(expectedStart, expectedStop);
String expectedQuals = QUALS.substring(expectedStart, expectedStop);
Assert.assertEquals(clipped.getReadBases(), expectedBases.getBytes(), "Clipped bases not those expected");
Assert.assertEquals(clipped.getBaseQualityString(), expectedQuals, "Clipped quals not those expected");
}
@Test public void testNoClip() { testReadBasesAndQuals(read, 0, 4); }
@Test public void testClip1Front() { testReadBasesAndQuals(read, 1, 4); }
@Test public void testClip2Front() { testReadBasesAndQuals(read, 2, 4); }
@Test public void testClip1Back() { testReadBasesAndQuals(read, 0, 3); }
@Test public void testClip2Back() { testReadBasesAndQuals(read, 0, 2); }
@Test
public void testReducedReads() {
Assert.assertFalse(ReadUtils.isReducedRead(read), "isReducedRead is false for normal read");
Assert.assertEquals(ReadUtils.getReducedReadQualityTagValue(read), null, "No reduced read tag in normal read");
Assert.assertTrue(ReadUtils.isReducedRead(reducedRead), "isReducedRead is true for reduced read");
Assert.assertEquals((int) ReadUtils.getReducedReadQualityTagValue(reducedRead), REDUCED_READ_QUAL, "Reduced read tag is set to expected value");
}
@Test
public void testreducedReadWithReducedQualsWithReducedRead() {
SAMRecord replacedRead = ReadUtils.reducedReadWithReducedQuals(reducedRead);
Assert.assertEquals(replacedRead.getReadBases(), reducedRead.getReadBases());
Assert.assertEquals(replacedRead.getBaseQualities().length, reducedRead.getBaseQualities().length);
for ( int i = 0; i < replacedRead.getBaseQualities().length; i++)
Assert.assertEquals(replacedRead.getBaseQualities()[i], REDUCED_READ_QUAL);
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void testreducedReadWithReducedQualsWithNormalRead() {
ReadUtils.reducedReadWithReducedQuals(read);
}
@Test
public void testReducedReadPileupElement() {
PileupElement readp = new PileupElement(read,0);
PileupElement reducedreadp = new PileupElement(reducedRead,0);
Assert.assertFalse(readp.isReducedRead());
Assert.assertTrue(reducedreadp.isReducedRead());
Assert.assertEquals(reducedreadp.getReducedCount(), 0);
Assert.assertEquals(reducedreadp.getReducedQual(), REDUCED_READ_QUAL);
}
}