From a5acb0b7a6763659a73881f6c7d1527082126e5e Mon Sep 17 00:00:00 2001 From: droazen Date: Mon, 4 Apr 2011 18:41:55 +0000 Subject: [PATCH] Fix for bug GSA-314: Detect -XL and -L incompatibility. An ArgumentException is now thrown if the combination of -L and -XL intervals specified on the command line results in an empty interval set after set subtraction. git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5571 348d0f76-0448-11de-a6fe-93d51630548a --- .../sting/gatk/GenomeAnalysisEngine.java | 18 ++++++++++++++++++ .../gatk/GenomeAnalysisEngineUnitTest.java | 17 +++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java index 239b9ad1a..9523ae50b 100755 --- a/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java +++ b/java/src/org/broadinstitute/sting/gatk/GenomeAnalysisEngine.java @@ -118,6 +118,14 @@ public class GenomeAnalysisEngine { */ private GenomeLocSortedSet intervals = null; + /** + * Explicitly assign the interval set to use for this traversal (for unit testing purposes) + * @param intervals set of intervals to use for this traversal + */ + public void setIntervals( GenomeLocSortedSet intervals ) { + this.intervals = intervals; + } + /** * Collection of inputs used by the engine. */ @@ -395,6 +403,16 @@ public class GenomeAnalysisEngine { if(intervals != null && getIntervals().contains(GenomeLoc.UNMAPPED)) throw new ArgumentException("Interval list specifies unmapped region. Only read walkers may include the unmapped region."); } + + // If intervals is non-null and empty at this point, it means that the list of intervals to process + // was filtered down to an empty set (eg., the user specified something like -L chr1 -XL chr1). Since + // this was very likely unintentional, the user should be informed of this. Note that this is different + // from the case where intervals == null, which indicates either that there were no interval arguments, + // or that -L all was specified. + if ( intervals != null && intervals.isEmpty() ) { + throw new ArgumentException("The given combination of -L and -XL options results in an empty set. " + + "No intervals to process."); + } } /** diff --git a/java/test/org/broadinstitute/sting/gatk/GenomeAnalysisEngineUnitTest.java b/java/test/org/broadinstitute/sting/gatk/GenomeAnalysisEngineUnitTest.java index 30bf2db07..7242f88ec 100644 --- a/java/test/org/broadinstitute/sting/gatk/GenomeAnalysisEngineUnitTest.java +++ b/java/test/org/broadinstitute/sting/gatk/GenomeAnalysisEngineUnitTest.java @@ -24,12 +24,13 @@ package org.broadinstitute.sting.gatk; -import org.testng.annotations.Test; - import org.broadinstitute.sting.BaseTest; import org.broadinstitute.sting.commandline.ArgumentException; import org.broadinstitute.sting.gatk.datasources.reads.SAMReaderID; import org.broadinstitute.sting.commandline.Tags; +import org.broadinstitute.sting.utils.GenomeLocSortedSet; + +import org.testng.annotations.Test; import java.io.File; import java.util.ArrayList; @@ -66,4 +67,16 @@ public class GenomeAnalysisEngineUnitTest extends BaseTest { testEngine.setSAMFileIDs(samFiles); testEngine.checkForDuplicateSamFiles(); } + + @Test(expectedExceptions=ArgumentException.class) + public void testEmptyIntervalSetHandling() throws Exception { + GenomeAnalysisEngine testEngine = new GenomeAnalysisEngine(); + + WalkerManager walkerManager = new WalkerManager(); + testEngine.setWalker(walkerManager.createByName("PrintReadsWalker")); + + testEngine.setIntervals(new GenomeLocSortedSet(null)); + + testEngine.validateSuppliedIntervals(); + } }