def test_claim_vcfAnd6InvalidFilterFiles(self): #pylint: disable=too-many-locals record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = [self.entab("chrom|pos|ref|alt"), record1] content2 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("patientA.snp.Somatic.hc.fpfilter.pass", content1) reader2 = MockFileReader("patientA.snp.vcf", content2) reader3 = MockFileReader("patientB.snp.Somatic.hc.fpfilter.pass", content1) reader4 = MockFileReader("patientB.snp.vcf", content2) reader5 = MockFileReader("patientC.snp.Somatic.hc.fpfilter.pass", content1) reader6 = MockFileReader("patientC.snp.vcf", content2) reader7 = MockFileReader("patientD.snp.Somatic.hc.fpfilter.pass", content1) reader8 = MockFileReader("patientD.snp.vcf", content2) reader9 = MockFileReader("patientE.snp.Somatic.hc.fpfilter.pass", content1) reader10 = MockFileReader("patientE.snp.vcf", content2) reader11 = MockFileReader("patientF.snp.Somatic.hc.fpfilter.pass", content1) reader12 = MockFileReader("patientF.snp.vcf", content2) file_readers = [ reader1, reader2, reader3, reader4, reader5, reader6, reader7, reader8, reader9, reader10, reader11, reader12 ] caller = varscan.Varscan() self.assertRaisesRegexp( utils.JQException, r"The \[6\] input files \[.*\(1 file\(s\) omitted\)\] match high-confidence file names, but the file header is invalid or missing. Review inputs and try again.", caller.claim, file_readers)
def test_claim_vcfAndFilterFileNameGiven(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = [self.entab("chrom|position|ref|var"), record1] content2 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("patientA.indel.Somatic.foo.bar", content1) reader2 = MockFileReader("patientA.indel.vcf", content2) reader3 = MockFileReader("patientA.snp.Somatic.foo.bar", content1) reader4 = MockFileReader("patientA.snp.vcf", content2) reader5 = MockFileReader("patientA.readme", ["foo"]) file_readers = [reader1, reader2, reader3, reader4, reader5] caller = varscan.Varscan() caller.hc_file_pattern = re.compile("foo.bar$") unrecognized_readers, vcf_readers = caller.claim(file_readers) self.assertEquals(1, len(unrecognized_readers)) self.assertEquals([reader5], unrecognized_readers) self.assertEquals(2, len(vcf_readers)) self.assertIsInstance(vcf_readers[0], varscan._VarscanVcfReader) self.assertEquals(reader2.file_name, vcf_readers[0]._vcf_reader.file_name) self.assertEquals(reader1.file_name, vcf_readers[0]._som_hc_file_reader.file_name) self.assertIsInstance(vcf_readers[1], varscan._VarscanVcfReader) self.assertEquals(reader4.file_name, vcf_readers[1]._vcf_reader.file_name) self.assertEquals(reader3.file_name, vcf_readers[1]._som_hc_file_reader.file_name)
def test_claim_allSnpOrIndelOkay(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("fileA.indel.vcf", content1) reader2 = MockFileReader("fileB.indel.vcf", content1) file_readers = [reader1, reader2] caller = varscan.Varscan() unrecognized_readers, vcf_readers = caller.claim(file_readers) self.assertEquals(0, len(unrecognized_readers)) self.assertEquals(2, len(vcf_readers))
def test_claim_ignoresUnpairedNonVcfFiles(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("fileA.txt", content1) file_readers = [reader1] caller = varscan.Varscan() unrecognized_readers, vcf_readers = caller.claim(file_readers) self.assertEquals(1, len(unrecognized_readers)) self.assertEquals([reader1], unrecognized_readers) self.assertEquals(0, len(vcf_readers))
def test_claim_filterRegexDoesNotMatch(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("patientA.vcf", content1) file_readers = [reader1] caller = varscan.Varscan() caller.hc_file_pattern = re.compile("foo.bar$") self.assertRaisesRegexp( utils.UsageError, r"The VarScan high-confidence filename regex \[foo\.bar\$\] didn't match any files in the input directory. The beginning of the high-confidence filename must exactly match a VCF filename up to the .vcf extension. Review inputs/command options and try again.", caller.claim, file_readers)
def test_claim_VCFHasNoMatchingHc(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = [self.entab("chrom|position"), record1] content2 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("patientA.vcf", content2) reader2 = MockFileReader("patientB.vcf", content2) reader3 = MockFileReader("patientB.snp.Somatic.hc.fpfilter.pass", content1) file_readers = [reader1, reader2, reader3] caller = varscan.Varscan() self.assertRaisesRegexp( utils.UsageError, r"The VarScan VCF file \[patientA.vcf\] has no matching high-confidence file.", caller.claim, file_readers)
def test_claim_mismatchingSnpIndelFiles(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("fileA.snp.vcf", content1) reader2 = MockFileReader("fileA.indel.vcf", content1) reader3 = MockFileReader("fileB.indel.vcf", content1) file_readers = [reader1, reader2, reader3] caller = varscan.Varscan() self.assertRaisesRegexp( utils.JQException, r"Some Varscan VCFs were missing either a snp or indel file. Review inputs/command options and try again.", caller.claim, file_readers) actual_log_errors = test.utils.mock_logger.messages["ERROR"] expected_log_errors = ["VarScan VCF [fileB.indel] has no snp file."] self.assertEquals(expected_log_errors, actual_log_errors)
def test_claim_varscanVcfOnly(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("fileA.snp.vcf", content1) reader2 = MockFileReader("fileB.snp.vcf", content1) file_readers = [reader1, reader2] caller = varscan.Varscan() unrecognized_readers, vcf_readers = caller.claim(file_readers) self.assertEquals(0, len(unrecognized_readers)) self.assertEquals([], unrecognized_readers) self.assertEquals(2, len(vcf_readers)) self.assertIsInstance(vcf_readers[0], varscan._VarscanVcfReader) self.assertEquals(reader1.file_name, vcf_readers[0]._vcf_reader.file_name)
def test_claim_vcfAndInvalidFilterFile(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = [self.entab("chrom|pos|ref|alt"), record1] content2 = ["##foo", "##source=VarScan2", "#chrom", record1] reader1 = MockFileReader("patientA.indel.Somatic.hc.fpfilter.pass", content1) reader2 = MockFileReader("patientA.indel.vcf", content2) reader3 = MockFileReader("patientA.snp.Somatic.hc.fpfilter.pass", content1) reader4 = MockFileReader("patientA.snp.vcf", content2) reader5 = MockFileReader("patientA.readme", ["foo"]) file_readers = [reader1, reader2, reader3, reader4, reader5] caller = varscan.Varscan() self.assertRaisesRegexp( utils.JQException, r"The \[2\] input files \[.*\] match high-confidence file names, but the file header is invalid or missing. Review inputs and try again.", caller.claim, file_readers)
def test_claim_multiplePatients(self): record1 = "chr1\t.\t.\t.\t.\t.\t.\t.\t." content1 = ["##foo", "##source=VarScan2", "#chrom", record1] content2 = ["chrom\tposition", "1\t23"] reader1 = MockFileReader("p2.fileA.vcf", content1) reader2 = MockFileReader("p2.fileA.Somatic.hc.fpfilter.pass", content2) reader3 = MockFileReader("p3.fileA.Somatic.hc.fpfilter.pass", content2) reader4 = MockFileReader("p3.fileA.vcf", content1) file_readers = [reader1, reader2, reader3, reader4] caller = varscan.Varscan() dummy, vcf_readers = caller.claim(file_readers) self.assertEquals(2, len(vcf_readers)) self.assertIsInstance(vcf_readers[0], varscan._VarscanVcfReader) self.assertEquals("p2.fileA.vcf", vcf_readers[0]._vcf_reader.file_name) self.assertIn("_HCTag", self._get_tag_class_names(vcf_readers[0])) self.assertIn("_HCTag", self._get_tag_class_names(vcf_readers[1])) self.assertEquals(reader1.file_name, vcf_readers[0]._vcf_reader.file_name)
def __init__(self, args=None): self._callers = [ varscan.Varscan(args), strelka.Strelka(), mutect.Mutect() ]
def test_validate_filter_file_invalidFile(self): file_reader = MockFileReader("p1.hc.fpfilter.pass", ["chrom\tpos\tref"]) caller = varscan.Varscan() valid_reader = caller._validate_filter_file(file_reader) self.assertEquals(None, valid_reader)
def test_validate_filter_file_validFile(self): file_reader = MockFileReader("p1.hc.fpfilter.pass", ["chrom\tposition"]) caller = varscan.Varscan() valid_reader = caller._validate_filter_file(file_reader) self.assertEquals("p1.hc.fpfilter.pass", valid_reader.file_name)
def setUp(self): super(VarscanTestCase, self).setUp() self.caller = varscan.Varscan() varscan.logger = test.utils.mock_logger