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