diff --git a/mapping/src/test/resources/empty.sam b/mapping/src/test/resources/empty.sam new file mode 100644 index 0000000000000000000000000000000000000000..26ac25ee2cd79105b11d4896ea684edcb89f8c41 --- /dev/null +++ b/mapping/src/test/resources/empty.sam @@ -0,0 +1,4 @@ +@HD VN:1.5 SO:coordinate +@SQ SN:chr1 LN:9 UR:file:/home/pjvan_thof/pipelines/biopet/public/mapping/src/test/resources/ref.fa M5:fe15dbbd0900310caf32827f6da57550 +@RG ID:001 SM:sample3 LB:lib1 +r02 0 chr1 210 60 10M * 0 0 TACGTACGTA EEFFGGHHII RG:Z:001 diff --git a/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala b/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala index cadb2d8d2d43f53fae65e75b1db69d4f9a09550f..abb3bf59e306e64565df90e02e689cc48e7c81ae 100644 --- a/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala +++ b/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingTest.scala @@ -30,6 +30,8 @@ trait MultisampleMappingTestTrait extends TestNGSuite with Matchers { def unmappedToGears = false def sample1 = Array(true, false) def sample2 = Array(true, false) + def sample3 = false + def sample4 = false @DataProvider(name = "mappingOptions") def mappingOptions = { @@ -44,6 +46,8 @@ trait MultisampleMappingTestTrait extends TestNGSuite with Matchers { var m: Map[String, Any] = MultisampleMappingTestTrait.config if (sample1) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample1, m) if (sample2) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample2, m) + if (sample3) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample3, m) + if (sample4) m = ConfigUtils.mergeMaps(MultisampleMappingTestTrait.sample4, m) m ++ Map( "merge_strategy" -> merge.toString, "bam_to_fastq" -> bamToFastq, @@ -52,19 +56,23 @@ trait MultisampleMappingTestTrait extends TestNGSuite with Matchers { ) } - if (!sample1 && !sample2) { // When no samples + if (!sample1 && !sample2 && !sample3 && !sample4) { // When no samples intercept[IllegalArgumentException] { initPipeline(map).script() } + } else if (sample4 && !bamToFastq && !correctReadgroups) { + intercept[IllegalStateException] { + initPipeline(map).script() + } } else { val pipeline = initPipeline(map) pipeline.script() - val numberLibs = (if (sample1) 1 else 0) + (if (sample2) 2 else 0) + val numberFastqLibs = (if (sample1) 1 else 0) + (if (sample2) 2 else 0) + (if (sample3 && bamToFastq) 1 else 0) + (if (sample4 && bamToFastq) 1 else 0) val numberSamples = (if (sample1) 1 else 0) + (if (sample2) 1 else 0) import MultisampleMapping.MergeStrategy - pipeline.functions.count(_.isInstanceOf[MarkDuplicates]) shouldBe (numberLibs + + pipeline.functions.count(_.isInstanceOf[MarkDuplicates]) shouldBe (numberFastqLibs + (if (sample2 && (merge == MergeStrategy.MarkDuplicates || merge == MergeStrategy.PreProcessMarkDuplicates)) 1 else 0)) pipeline.functions.count(_.isInstanceOf[MergeSamFiles]) shouldBe ( (if (sample2 && (merge == MergeStrategy.MergeSam || merge == MergeStrategy.PreProcessMergeSam)) 1 else 0)) @@ -84,6 +92,43 @@ class MultisampleMappingTest extends MultisampleMappingTestTrait { override def sample1 = Array(true) } +class MultisampleMappingNoSamplesTest extends MultisampleMappingTestTrait { + override def sample1 = Array(false) + override def sample2 = Array(false) + override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates) +} + +class MultisampleMappingBamTest extends MultisampleMappingTestTrait { + override def sample1 = Array(false) + override def sample2 = Array(false) + override def sample3 = true + override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates) +} + +class MultisampleMappingWrongBamTest extends MultisampleMappingTestTrait { + override def sample1 = Array(false) + override def sample2 = Array(false) + override def sample4 = true + override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates) +} + +class MultisampleMappingCorrectBamTest extends MultisampleMappingTestTrait { + override def sample1 = Array(false) + override def sample2 = Array(false) + override def correctReadgroups = true + override def sample4 = true + override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates) +} + +class MultisampleMappingBamToFastqTest extends MultisampleMappingTestTrait { + override def sample1 = Array(false) + override def sample2 = Array(false) + override def bamToFastq = true + override def sample3 = true + override def sample4 = true + override def mergeStrategies = MultisampleMapping.MergeStrategy.values.filter(_ == MultisampleMapping.MergeStrategy.PreProcessMarkDuplicates) +} + object MultisampleMappingTestTrait { val outputDir = Files.createTempDir() outputDir.deleteOnExit() @@ -104,6 +149,7 @@ object MultisampleMappingTestTrait { copyFile("ref.fa") copyFile("ref.dict") copyFile("ref.fa.fai") + copyFile("empty.sam") val config = Map( "name_prefix" -> "test", @@ -146,4 +192,20 @@ object MultisampleMappingTestTrait { ) ) ))) + + val sample3 = Map( + "samples" -> Map("sample3" -> Map("libraries" -> Map( + "lib1" -> Map( + "bam" -> (outputDir + File.separator + "empty.sam") + ) + ) + ))) + + val sample4 = Map( + "samples" -> Map("sample4" -> Map("libraries" -> Map( + "lib1" -> Map( + "bam" -> (outputDir + File.separator + "empty.sam") + ) + ) + ))) }