def test_add_tag_values_raisesNotImplementedError(self): class FakeTag(common_tags.AbstractJacquardTag): def __init__(self): pass tag = FakeTag() self.assertRaises(NotImplementedError, tag.add_tag_values, VcfRecord("1", "42", "A", "C"))
def test_empty_record(self): sample_names = ["SampleA"] base = VcfRecord.parse_record( self.entab("chr2|1|ID|A|C|QUAL|FILTER|INFO|F|S\n"), sample_names) empty_record = base.get_empty_record() expected_record = VcfRecord(chrom="chr2", pos="1", ref="A", alt="C") self.assertEquals(expected_record.text(), empty_record.text())
def test_asTextExpandsEmptyTrailingFormatField(self): sampleA = OrderedDict([('a', '1'), ('b', '2')]) sampleB = OrderedDict([('a', '10')]) sample_tag_values = OrderedDict([("SampleA", sampleA), ("SampleB", sampleB)]) record = VcfRecord("CHROM", "POS", "REF", "ALT", "ID", "QUAL", "FILTER", "INFO", sample_tag_values) expected = self.entab( "CHROM|POS|ID|REF|ALT|QUAL|FILTER|INFO|a:b|1:2|10:.\n") self.assertEquals(expected, record.text())
def test_asTextWhenEmptyFormatField(self): sampleA = OrderedDict({}) sampleB = OrderedDict({}) sample_tag_values = OrderedDict({ "SampleA": sampleA, "SampleB": sampleB }) record = VcfRecord("CHROM", "POS", "REF", "ALT", "ID", "QUAL", "FILTER", "INFO", sample_tag_values) expected = self.entab("CHROM|POS|ID|REF|ALT|QUAL|FILTER|INFO|.|.|.\n") self.assertEquals(expected, record.text())
def test_sample_field_whenInconsistentTags(self): # FYI this should never happen in the wild, but I wanted to test the exception formatting. sampleA = OrderedDict([('a', '1'), ('b', '2')]) sampleB = OrderedDict([('a', '10')]) sample_tag_values = OrderedDict([("SampleA", sampleA), ("SampleB", sampleB)]) record = VcfRecord("CHROM", "POS", "REF", "ALT", "ID", "QUAL", "FILTER", "INFO", sample_tag_values) self.assertRaisesRegexp( ValueError, r'CHROM:POS:REF:ALT|sample format tags are not consistent: requested tags \[a\] but sample has has tags \[a=1, b=2\] leaving behind \[b\]', record._sample_field, ['a'], 'SampleA')
def test_text(self): sampleA = OrderedDict( sorted({ "F1": "SA.1", "F2": "SA.2", "F3": "SA.3" }.items())) sampleB = OrderedDict( sorted({ "F1": "SB.1", "F2": "SB.2", "F3": "SB.3" }.items())) sample_tag_values = OrderedDict( sorted({ "SampleA": sampleA, "SampleB": sampleB }.items())) record = VcfRecord("CHROM", "POS", "REF", "ALT", "ID", "QUAL", "FILTER", "INFO", sample_tag_values) expected = self.entab( "CHROM|POS|ID|REF|ALT|QUAL|FILTER|INFO|F1:F2:F3|SA.1:SA.2:SA.3|SB.1:SB.2:SB.3\n" ) self.assertEquals(expected, record.text())
def test_add_or_replace_filter_filtersOnlyAppendsUnique(self): record = VcfRecord("chr1", "42", "XYZ", "C", vcf_filter="indelError") record.add_or_replace_filter("JQ_EXCLUDE") record.add_or_replace_filter("JQ_EXCLUDE") self.assertEquals("indelError;JQ_EXCLUDE", record.filter)
def test_add_or_replace_filter_duplicateFilterNotAdded(self): record = VcfRecord("chr1", "42", "XYZ", "C", vcf_filter="JQ_EXCLUDE") record.add_or_replace_filter("JQ_EXCLUDE") self.assertEquals("JQ_EXCLUDE", record.filter)
def test_add_or_replace_filter_filterReplacesEmptyFilter(self): record = VcfRecord("chr1", "42", "X", "C", vcf_filter="") record.add_or_replace_filter("JQ_EXCLUDE") self.assertEquals("JQ_EXCLUDE", record.filter)
def test_join_info_fields_orderedCorrectly(self): vcf_record = VcfRecord("chr1", "2", "A", "G", info="FOO;BAR;BAZ") vcf_record._join_info_fields() self.assertEquals("FOO;BAR;BAZ", vcf_record.info)
def test_get_info_dict_null(self): vcf_record = VcfRecord("chr1", "42", "A", "C", info=".") self.assertEquals({}, vcf_record.info_dict)