From cc6a184fe3002c985e6383f89826d89164845abb Mon Sep 17 00:00:00 2001
From: bow <bow@bow.web.id>
Date: Mon, 27 Oct 2014 23:50:25 +0100
Subject: [PATCH] Add unit tests for file writing

---
 .../src/test/resources/paired01a.fq           | 20 +++++++
 .../src/test/resources/paired01b.fq           | 20 +++++++
 .../src/test/resources/single01.fq            | 20 +++++++
 .../tools/ExtractAlignedFastqUnitTest.scala   | 58 ++++++++++++++++++-
 4 files changed, 116 insertions(+), 2 deletions(-)
 create mode 100644 biopet-framework/src/test/resources/paired01a.fq
 create mode 100644 biopet-framework/src/test/resources/paired01b.fq
 create mode 100644 biopet-framework/src/test/resources/single01.fq

diff --git a/biopet-framework/src/test/resources/paired01a.fq b/biopet-framework/src/test/resources/paired01a.fq
new file mode 100644
index 000000000..530a1bb9b
--- /dev/null
+++ b/biopet-framework/src/test/resources/paired01a.fq
@@ -0,0 +1,20 @@
+@r01/1
+A
++
+H
+@r02/1
+T
++
+I
+@r03/1
+G
++
+H
+@r04/1
+C
++
+I
+@r05/1
+A
++
+H
diff --git a/biopet-framework/src/test/resources/paired01b.fq b/biopet-framework/src/test/resources/paired01b.fq
new file mode 100644
index 000000000..72cf9246d
--- /dev/null
+++ b/biopet-framework/src/test/resources/paired01b.fq
@@ -0,0 +1,20 @@
+@r01/2
+T
++
+I
+@r02/2
+A
++
+H
+@r03/2
+C
++
+I
+@r04/2
+G
++
+H
+@r05/2
+T
++
+I
diff --git a/biopet-framework/src/test/resources/single01.fq b/biopet-framework/src/test/resources/single01.fq
new file mode 100644
index 000000000..acf48ca7e
--- /dev/null
+++ b/biopet-framework/src/test/resources/single01.fq
@@ -0,0 +1,20 @@
+@r01
+A
++
+H
+@r02
+T
++
+I
+@r03
+G
++
+H
+@r04
+C
++
+I
+@r05
+A
++
+H
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 411acb6df..d166ad4f7 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
@@ -6,14 +6,18 @@ package nl.lumc.sasc.biopet.tools
 
 import java.io.File
 import java.nio.file.Paths
+
+import org.mockito.Matchers._
+import org.mockito.Mockito._
 import org.scalatest.Matchers
+import org.scalatest.mock.MockitoSugar
 import org.scalatest.testng.TestNGSuite
 import org.testng.annotations.{ DataProvider, Test }
 
-import htsjdk.samtools.fastq.FastqRecord
+import htsjdk.samtools.fastq.{ BasicFastqWriter, FastqReader, FastqRecord }
 import htsjdk.tribble._
 
-class ExtractAlignedFastqUnitTest extends TestNGSuite with Matchers {
+class ExtractAlignedFastqUnitTest extends TestNGSuite with MockitoSugar with Matchers {
 
   import ExtractAlignedFastq._
 
@@ -169,4 +173,54 @@ class ExtractAlignedFastqUnitTest extends TestNGSuite with Matchers {
       }
     }
   }
+
+  @Test def testWriteSingleBamDefault() = {
+      val memFunc = (recs: FastqPair) => Set("r01", "r03").contains(recs._1.getReadHeader)
+      val in1 = new FastqReader(resourceFile("/single01.fq"))
+      val mo1 = mock[BasicFastqWriter]
+      selectFastqReads(memFunc, in1, mo1)
+      verify(mo1, times(2)).write(anyObject.asInstanceOf[FastqRecord])
+      verify(mo1).write(new FastqRecord("r01", "A", "", "H"))
+      verify(mo1).write(new FastqRecord("r03", "G", "", "H"))
+  }
+
+  @Test def testWritePairBamDefault() = {
+    val memFunc = (recs: FastqPair) => Set("r01/1", "r01/2", "r03/1", "r03/2").contains(recs._1.getReadHeader)
+    val in1 = new FastqReader(resourceFile("/paired01a.fq"))
+    val in2 = new FastqReader(resourceFile("/paired01b.fq"))
+    val mo1 = mock[BasicFastqWriter]
+    val mo2 = mock[BasicFastqWriter]
+    selectFastqReads(memFunc, in1, mo1, in2, mo2)
+    verify(mo1, times(2)).write(anyObject.asInstanceOf[FastqRecord])
+    verify(mo1).write(new FastqRecord("r01/1", "A", "", "H"))
+    verify(mo1).write(new FastqRecord("r03/1", "G", "", "H"))
+    verify(mo2, times(2)).write(anyObject.asInstanceOf[FastqRecord])
+    verify(mo2).write(new FastqRecord("r01/2", "T", "", "I"))
+    verify(mo2).write(new FastqRecord("r03/2", "C", "", "I"))
+  }
+
+  @Test def testWriteNoOutputFastq2() = {
+    val memFunc: (FastqPair => Boolean) = (recs) => true
+    val in1 = mock[FastqReader]
+    val in2 = mock[FastqReader]
+    val out1 = mock[BasicFastqWriter]
+    val thrown = intercept[IllegalArgumentException] {
+      selectFastqReads(memFunc, in1, out1, in2)
+    }
+    thrown.getMessage should === ("Missing output FASTQ 2")
+    verify(out1, never).write(anyObject.asInstanceOf[FastqRecord])
+  }
+
+  @Test def testWriteNoInputFastq2() = {
+    val memFunc: (FastqPair => Boolean) = (recs) => true
+    val in1 = mock[FastqReader]
+    val out1 = mock[BasicFastqWriter]
+    val out2 = mock[BasicFastqWriter]
+    val thrown = intercept[IllegalArgumentException] {
+      selectFastqReads(memFunc, in1, out1, outputFastq2 = out2)
+    }
+    thrown.getMessage should === ("Output FASTQ 2 supplied but there is no input FASTQ 2")
+    verify(out1, never).write(anyObject.asInstanceOf[FastqRecord])
+    verify(out2, never).write(anyObject.asInstanceOf[FastqRecord])
+  }
 }
-- 
GitLab