2009-06-22 22:39:41 +08:00
|
|
|
package org.broadinstitute.sting.utils;
|
|
|
|
|
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2009-06-22 22:39:41 +08:00
|
|
|
import net.sf.samtools.SAMFileHeader;
|
2010-11-02 05:31:44 +08:00
|
|
|
import net.sf.samtools.SAMSequenceDictionary;
|
2009-06-22 22:39:41 +08:00
|
|
|
import org.broadinstitute.sting.BaseTest;
|
2010-09-12 23:07:38 +08:00
|
|
|
import org.broadinstitute.sting.utils.exceptions.ReviewedStingException;
|
2009-06-22 22:39:41 +08:00
|
|
|
import org.broadinstitute.sting.utils.sam.ArtificialSAMUtils;
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
import static org.testng.Assert.assertEquals;
|
|
|
|
|
import static org.testng.Assert.assertTrue;
|
|
|
|
|
import org.testng.annotations.BeforeClass;
|
|
|
|
|
import org.testng.annotations.Test;
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2009-06-22 22:39:41 +08:00
|
|
|
/**
|
|
|
|
|
* @author aaron
|
|
|
|
|
* <p/>
|
2010-04-08 14:14:15 +08:00
|
|
|
* Class GenomeLocParserUnitTest
|
2009-06-22 22:39:41 +08:00
|
|
|
* <p/>
|
|
|
|
|
* Test out the functionality of the new genome loc parser
|
|
|
|
|
*/
|
2010-04-08 14:14:15 +08:00
|
|
|
public class GenomeLocParserUnitTest extends BaseTest {
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=ReviewedStingException.class)
|
2009-06-22 22:39:41 +08:00
|
|
|
public void testUnsetupException() {
|
2010-11-02 05:31:44 +08:00
|
|
|
SAMSequenceDictionary contigInfoCache = GenomeLocParser.contigInfo;
|
2009-09-22 07:32:24 +08:00
|
|
|
GenomeLocParser.contigInfo = null;
|
2010-11-02 05:31:44 +08:00
|
|
|
try {
|
|
|
|
|
GenomeLocParser.createGenomeLoc(0, 0, 0);
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
GenomeLocParser.contigInfo = contigInfoCache;
|
|
|
|
|
}
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
2009-09-22 07:32:24 +08:00
|
|
|
@BeforeClass
|
2010-11-02 05:31:44 +08:00
|
|
|
public void init() {
|
|
|
|
|
GenomeLocParserTestUtils.clearSequenceDictionary();
|
2009-09-22 07:32:24 +08:00
|
|
|
SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 10);
|
|
|
|
|
GenomeLocParser.setupRefContigOrdering(header.getSequenceDictionary());
|
|
|
|
|
}
|
|
|
|
|
|
2009-06-22 22:39:41 +08:00
|
|
|
@Test
|
|
|
|
|
public void testKnownContigOrder() {
|
|
|
|
|
SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 10);
|
2009-09-22 07:32:24 +08:00
|
|
|
GenomeLocParser.contigInfo = null;
|
2009-06-22 22:39:41 +08:00
|
|
|
// assert that it's false when the contig ordering is not setup
|
|
|
|
|
assertTrue(!GenomeLocParser.hasKnownContigOrdering());
|
|
|
|
|
GenomeLocParser.setupRefContigOrdering(header.getSequenceDictionary());
|
|
|
|
|
// assert that it's true when it is setup
|
|
|
|
|
assertTrue(GenomeLocParser.hasKnownContigOrdering());
|
|
|
|
|
}
|
|
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=RuntimeException.class)
|
2009-06-22 22:39:41 +08:00
|
|
|
public void testGetContigIndex() {
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(GenomeLocParser.getContigIndex("blah",true), -1); // should not be in the reference
|
2010-04-01 20:47:48 +08:00
|
|
|
}
|
2009-06-22 22:39:41 +08:00
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testGetContigIndexValid() {
|
|
|
|
|
SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 10);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(GenomeLocParser.getContigIndex("chr1",true), 0); // should be in the reference
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testGetContigInfoUnknownContig() {
|
|
|
|
|
assertEquals(null, GenomeLocParser.getContigInfo("blah")); // should be in the reference
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testGetContigInfoKnownContig() {
|
|
|
|
|
SAMFileHeader header = ArtificialSAMUtils.createArtificialSamHeader(1, 1, 10);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, "chr1".compareTo(GenomeLocParser.getContigInfo("chr1").getSequenceName())); // should be in the reference
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=ReviewedStingException.class)
|
2009-06-22 22:39:41 +08:00
|
|
|
public void testParseBadString() {
|
|
|
|
|
GenomeLocParser.parseGenomeLoc("Bad:0-1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testParseGoodString() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1:1-100");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, loc.getContigIndex());
|
|
|
|
|
assertEquals(loc.getStop(), 100);
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
2010-04-01 20:47:48 +08:00
|
|
|
|
2009-06-22 22:39:41 +08:00
|
|
|
@Test
|
|
|
|
|
public void testCreateGenomeLoc1() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.createGenomeLoc("chr1", 1, 100);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, loc.getContigIndex());
|
|
|
|
|
assertEquals(loc.getStop(), 100);
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
2009-09-22 07:32:24 +08:00
|
|
|
@Test
|
|
|
|
|
public void testCreateGenomeLoc1point5() { // in honor of VAAL!
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1:1");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, loc.getContigIndex());
|
|
|
|
|
assertEquals(loc.getStop(), 1);
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-09-22 07:32:24 +08:00
|
|
|
}
|
|
|
|
|
|
2009-06-22 22:39:41 +08:00
|
|
|
@Test
|
|
|
|
|
public void testCreateGenomeLoc2() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.createGenomeLoc(0, 1, 100);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, loc.getContigIndex());
|
|
|
|
|
assertEquals(loc.getStop(), 100);
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testCreateGenomeLoc3() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.createGenomeLoc(0, 1);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, loc.getContigIndex());
|
|
|
|
|
assertEquals(loc.getStop(), 1);
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testCreateGenomeLoc4() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.createGenomeLoc("chr1", 1);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, loc.getContigIndex());
|
|
|
|
|
assertEquals(loc.getStop(), 1);
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Test
|
|
|
|
|
public void testCreateGenomeLoc5() {
|
2009-09-22 06:37:47 +08:00
|
|
|
GenomeLoc loc = GenomeLocParser.createGenomeLoc(0, 1, 100);
|
2009-06-22 22:39:41 +08:00
|
|
|
GenomeLoc copy = GenomeLocParser.createGenomeLoc(loc);
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(0, copy.getContigIndex());
|
|
|
|
|
assertEquals(copy.getStop(), 100);
|
|
|
|
|
assertEquals(copy.getStart(), 1);
|
2009-09-22 06:37:47 +08:00
|
|
|
}
|
|
|
|
|
|
2009-09-22 07:32:24 +08:00
|
|
|
@Test
|
|
|
|
|
public void testGenomeLocPlusSign() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1:1+");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(loc.getContigIndex(), 0);
|
|
|
|
|
assertEquals(loc.getStop(), 10); // the size
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-09-22 07:32:24 +08:00
|
|
|
}
|
|
|
|
|
|
2009-12-24 05:59:14 +08:00
|
|
|
@Test
|
2009-09-22 12:34:18 +08:00
|
|
|
public void testGenomeLocParseOnlyChrome() {
|
2009-12-24 05:59:14 +08:00
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(loc.getContigIndex(), 0);
|
|
|
|
|
assertEquals(loc.getStop(), 10); // the size
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-09-22 12:34:18 +08:00
|
|
|
}
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=ReviewedStingException.class)
|
2009-09-22 12:34:18 +08:00
|
|
|
public void testGenomeLocParseOnlyBadChrome() {
|
2009-12-24 05:59:14 +08:00
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr12");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(loc.getContigIndex(), 0);
|
|
|
|
|
assertEquals(loc.getStop(), 10); // the size
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-09-22 12:34:18 +08:00
|
|
|
}
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=ReviewedStingException.class)
|
2009-09-22 07:32:24 +08:00
|
|
|
public void testGenomeLocBad() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1:1-");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(loc.getContigIndex(), 0);
|
|
|
|
|
assertEquals(loc.getStop(), 10); // the size
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=ReviewedStingException.class)
|
2009-09-22 12:34:18 +08:00
|
|
|
public void testGenomeLocBad2() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1:1-500-0");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(loc.getContigIndex(), 0);
|
|
|
|
|
assertEquals(loc.getStop(), 10); // the size
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-09-22 12:34:18 +08:00
|
|
|
}
|
2009-12-24 05:59:14 +08:00
|
|
|
|
2010-11-02 05:31:44 +08:00
|
|
|
@Test(expectedExceptions=ReviewedStingException.class)
|
2009-09-22 12:34:18 +08:00
|
|
|
public void testGenomeLocBad3() {
|
|
|
|
|
GenomeLoc loc = GenomeLocParser.parseGenomeLoc("chr1:1--0");
|
2010-11-02 05:31:44 +08:00
|
|
|
assertEquals(loc.getContigIndex(), 0);
|
|
|
|
|
assertEquals(loc.getStop(), 10); // the size
|
|
|
|
|
assertEquals(loc.getStart(), 1);
|
2009-09-22 12:34:18 +08:00
|
|
|
}
|
2010-02-17 04:35:35 +08:00
|
|
|
|
|
|
|
|
// test out the validating methods
|
|
|
|
|
@Test
|
|
|
|
|
public void testValidationOfGenomeLocs() {
|
|
|
|
|
assertTrue(GenomeLocParser.validGenomeLoc("chr1",1,1));
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc("chr2",1,1)); // shouldn't have an entry
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc("chr1",1,11)); // past the end of the contig
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc("chr1",-1,10)); // bad start
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc("chr1",1,-2)); // bad stop
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc("chr1",10,11)); // bad start, past end
|
|
|
|
|
|
|
|
|
|
assertTrue(GenomeLocParser.validGenomeLoc(0,1,1));
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc(1,1,1)); // shouldn't have an entry
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc(0,1,11)); // past the end of the contig
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc(-1,0,10)); // bad start
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc(0,1,-2)); // bad stop
|
|
|
|
|
assertTrue(!GenomeLocParser.validGenomeLoc(0,10,11)); // bad start, past end
|
|
|
|
|
|
|
|
|
|
}
|
2009-06-22 22:39:41 +08:00
|
|
|
}
|