diff --git a/public/shiva/.gitignore b/public/shiva/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..eb5a316cbd195d26e3f768c7dd8e1b47299e17f8 --- /dev/null +++ b/public/shiva/.gitignore @@ -0,0 +1 @@ +target diff --git a/public/shiva/pom.xml b/public/shiva/pom.xml index 301fa2b0a56be94a4897dd337785fc17e9645e16..fd5e2e191e777c6fba475739f9c79525a00e2d28 100644 --- a/public/shiva/pom.xml +++ b/public/shiva/pom.xml @@ -23,6 +23,18 @@ Mapping ${project.version} + + org.testng + testng + 6.8 + test + + + org.scalatest + scalatest_2.11 + 2.2.1 + test + \ No newline at end of file diff --git a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala index 0c7c0acc570a39cc97c3112aaecc9367ec91b7c4..d71379a9ff3d925f88991140bd831a2d6c7594e9 100644 --- a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala +++ b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala @@ -40,6 +40,9 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag { def biopetScript: Unit = { val callers = usedCallers.sortBy(_.prio) + require(!inputBams.isEmpty, "No input bams found") + require(callers.exists(_.use), "must select atleast 1 variantcaller") + val cv = new CombineVariants(qscript) cv.outputFile = finalFile cv.setKey = "VariantCaller" diff --git a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala new file mode 100644 index 0000000000000000000000000000000000000000..52db1b61651b0a55ab37ba5eedccb13bf25a8366 --- /dev/null +++ b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala @@ -0,0 +1,84 @@ +package nl.lumc.sasc.biopet.pipelines.shiva + +import java.io.File + +import com.google.common.io.Files +import nl.lumc.sasc.biopet.core.config.Config +import nl.lumc.sasc.biopet.extensions.bcftools.Bcftools +import nl.lumc.sasc.biopet.extensions.gatk.CombineVariants +import nl.lumc.sasc.biopet.tools.{VcfFilter, MpileupToVcf} +import nl.lumc.sasc.biopet.utils.ConfigUtils +import org.apache.commons.io.FileUtils +import org.broadinstitute.gatk.queue.QSettings +import org.scalatest.Matchers +import org.scalatest.testng.TestNGSuite +import org.testng.annotations.{ AfterClass, Test, DataProvider } + +/** + * Created by pjvan_thof on 3/2/15. + */ +class ShivaVariantcallingTest extends TestNGSuite with Matchers { + def initPipeline(map: Map[String, Any]): ShivaVariantcalling = { + new ShivaVariantcalling { + override def configName = "shivavariantcalling" + override def globalConfig = new Config(ConfigUtils.mergeMaps(map, ShivaVariantcallingTest.config)) + qSettings = new QSettings + qSettings.runName = "test" + } + } + + @DataProvider(name = "shivaVariantcallingOptions") + def mappingOptions = { + val raw = Array(true, false) + val bcftools = Array(true, false) + + (for ( + bams <- 0 to 3; + raw <- raw; + bcftools <- bcftools + ) yield Array[Any](bams, raw, bcftools) + ).toArray + } + + @Test(dataProvider = "shivaVariantcallingOptions") + def testShivaVariantcalling(bams: Int, raw: Boolean, bcftools: Boolean) = { + val map = Map("use_raw" -> raw, "use_bcftools" -> bcftools) + val pipeline = initPipeline(map) + + pipeline.inputBams = (for (n <- 1 to bams) yield new File("bam_" + n + ".bam")).toList + + val illegalArgumentException = pipeline.inputBams.isEmpty || !raw && !bcftools + + if (illegalArgumentException) intercept[IllegalArgumentException] { + pipeline.script() + } + + if (!illegalArgumentException) { + pipeline.script() + + pipeline.functions.count(_.isInstanceOf[CombineVariants]) shouldBe 1 + (if (raw) 1 else 0) + //pipeline.functions.count(_.isInstanceOf[Bcftools]) shouldBe (if (bcftools) 1 else 0) + //FIXME: Can not check for bcftools because of piping + pipeline.functions.count(_.isInstanceOf[MpileupToVcf]) shouldBe (if (raw) bams else 0) + pipeline.functions.count(_.isInstanceOf[VcfFilter]) shouldBe (if (raw) bams else 0) + } + } + + @AfterClass def removeTempOutputDir() = { + FileUtils.deleteDirectory(ShivaVariantcallingTest.outputDir) + } + +} + +object ShivaVariantcallingTest { + val outputDir = Files.createTempDir() + + val config = Map( + "name_prefix" -> "test", + "output_dir" -> outputDir, + "reference" -> "test", + "gatk_jar" -> "test", + "samtools" -> Map("exe" -> "test"), + "bcftools" -> Map("exe" -> "test") + ) +} \ No newline at end of file