diff --git a/biopet-framework/src/test/resources/paired01a.fq b/biopet-framework/src/test/resources/paired01a.fq new file mode 100644 index 0000000000000000000000000000000000000000..530a1bb9bada4865a047a8c8fe73dd5700d0b84d --- /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 0000000000000000000000000000000000000000..72cf9246dcce5c29a2500ced269dc3c17fd18847 --- /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 0000000000000000000000000000000000000000..acf48ca7e1a85ccaee4566da3c1c9094cce84c91 --- /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 411acb6df6768e43075f7b956380d9c06960fa5a..d166ad4f716139fa4e1c29cc004f6f2938611b72 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]) + } }