From 37bb8e356841d86e2fbaf9fccfb40cedce3a1019 Mon Sep 17 00:00:00 2001
From: bow <bow@bow.web.id>
Date: Fri, 31 Oct 2014 19:48:32 +0100
Subject: [PATCH] More tests to guard against BAM query sorting error

---
 .../tools/ExtractAlignedFastqUnitTest.scala   | 29 ++++++++++++-------
 1 file changed, 19 insertions(+), 10 deletions(-)

diff --git a/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastqUnitTest.scala b/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastqUnitTest.scala
index e60af8466..1939d5351 100644
--- a/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastqUnitTest.scala
+++ b/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/tools/ExtractAlignedFastqUnitTest.scala
@@ -27,8 +27,11 @@ class ExtractAlignedFastqUnitTest extends TestNGSuite with MockitoSugar with Mat
   private def resourcePath(p: String): String =
     Paths.get(getClass.getResource(p).toURI).toString
 
-  private def makeInterval(chr: String, start: Int, end: Int): Interval =
-    new Interval(chr, start, end)
+  private def makeInterval(chr: String, start: Int, end: Int): Iterator[Interval] =
+    Iterator(new Interval(chr, start, end))
+
+  private def makeInterval(ivs: Iterable[(String, Int, Int)]): Iterator[Interval] =
+    ivs.map(x => new Interval(x._1, x._2, x._3)).toIterator
 
   private def makeRecord(header: String): FastqRecord =
     new FastqRecord(header, "ATGC", "", "HIHI")
@@ -106,15 +109,18 @@ class ExtractAlignedFastqUnitTest extends TestNGSuite with MockitoSugar with Mat
       Array("partial overlap",
         makeInterval("chrQ", 430, 460), sBam01, sFastq1, sFastq1Default.updated("r04", true)),
       Array("enveloped",
-        makeInterval("chrQ", 693, 698), sBam01, sFastq1, sFastq1Default.updated("r03", true))
+        makeInterval("chrQ", 693, 698), sBam01, sFastq1, sFastq1Default.updated("r03", true)),
+      Array("partial overlap and enveloped",
+        makeInterval(List(("chrQ", 693, 698), ("chrQ", 430, 460))), sBam01,
+        sFastq1, sFastq1Default.updated("r03", true).updated("r04", true))
     )
   }
 
   @Test(dataProvider = "singleAlnProvider1")
-  def testSingleBamDefault(name: String, feat: Interval, inAln: File,
+  def testSingleBamDefault(name: String, feats: Iterator[Interval], inAln: File,
                            fastqMap: Map[String, FastqInput], resultMap: Map[String, Boolean]) = {
     require(resultMap.keySet == fastqMap.keySet)
-    val memFunc = makeMembershipFunction(Iterator(feat), inAln)
+    val memFunc = makeMembershipFunction(feats, inAln)
     for ((key, (rec1, rec2)) <- fastqMap) {
       withClue(makeClue(name, inAln, key)) {
         memFunc(rec1, rec2) shouldBe resultMap(key)
@@ -139,10 +145,10 @@ class ExtractAlignedFastqUnitTest extends TestNGSuite with MockitoSugar with Mat
   }
 
   @Test(dataProvider = "singleAlnProvider2")
-  def testSingleBamMinMapQ(name: String, feat: Interval, inAln: File, minMapQ: Int,
+  def testSingleBamMinMapQ(name: String, feats: Iterator[Interval], inAln: File, minMapQ: Int,
                            fastqMap: Map[String, FastqInput], resultMap: Map[String, Boolean]) = {
     require(resultMap.keySet == fastqMap.keySet)
-    val memFunc = makeMembershipFunction(Iterator(feat), inAln, minMapQ)
+    val memFunc = makeMembershipFunction(feats, inAln, minMapQ)
     for ((key, (rec1, rec2)) <- fastqMap) {
       withClue(makeClue(name, inAln, key)) {
         memFunc(rec1, rec2) shouldBe resultMap(key)
@@ -172,15 +178,18 @@ class ExtractAlignedFastqUnitTest extends TestNGSuite with MockitoSugar with Mat
       Array("enveloped",
         makeInterval("chrQ", 693, 698), pBam01, pFastq1, pFastq1Default.updated("r03", true)),
       Array("in intron",
-        makeInterval("chrQ", 900, 999), pBam01, pFastq1, pFastq1Default.updated("r05", true))
+        makeInterval("chrQ", 900, 999), pBam01, pFastq1, pFastq1Default.updated("r05", true)),
+      Array("partial overlap and enveloped",
+        makeInterval(List(("chrQ", 693, 698), ("chrQ", 430, 460))), pBam01,
+        pFastq1, pFastq1Default.updated("r03", true).updated("r04", true))
     )
   }
 
   @Test(dataProvider = "pairAlnProvider1")
-  def testPairBamDefault(name: String, feat: Interval, inAln: File,
+  def testPairBamDefault(name: String, feats: Iterator[Interval], inAln: File,
                          fastqMap: Map[String, FastqInput], resultMap: Map[String, Boolean]) = {
     require(resultMap.keySet == fastqMap.keySet)
-    val memFunc = makeMembershipFunction(Iterator(feat), inAln, commonSuffixLength = 2)
+    val memFunc = makeMembershipFunction(feats, inAln, commonSuffixLength = 2)
     for ((key, (rec1, rec2)) <- fastqMap) {
       withClue(makeClue(name, inAln, key)) {
         memFunc(rec1, rec2) shouldBe resultMap(key)
-- 
GitLab