def test_build_family_handlers(self): args = Namespace(umt_distance_threshold=1, min_family_size_threshold=3) handlers = build_family_handlers(args, samtools_test.MockAlignWriter(), samtools_test.MockAlignWriter(), self.mock_logger) actual_handler_names = [x.__class__.__name__ for x in handlers] expected_handler_names = [ '_FamilySizeStatHandler', '_MatchStatHandler', '_WriteAnnotatedAlignsHandler', '_WriteConsensusHandler' ] self.assertEqual(expected_handler_names, actual_handler_names)
def test_handle_excludeFilteredFamilies(self): family_1 = _mock_tag_family(consensus=_mock_align_pair("readA"), filter_value=None) family_2 = _mock_tag_family(consensus=_mock_align_pair("readB"), filter_value='foo') families = [family_1, family_2] writer = samtools_test.MockAlignWriter() handler = _WriteConsensusHandler(writer) for family in families: handler.handle(family) name_pairs = [(fam, align.query_name) for fam, align in writer._write_calls] self.assertEqual([(family_1, 'readA'), (family_1, 'readA')], name_pairs)
def test_handle_ordersAlignmentsByReadname(self): pairA1 = _mock_align_pair("readA1") pairA2 = _mock_align_pair("readA2") pairA3 = _mock_align_pair("readA3") pairA4 = _mock_align_pair("readA4") family_A = _mock_tag_family( align_pairs=set([pairA2, pairA1, pairA4, pairA3])) families = [family_A] writer = samtools_test.MockAlignWriter() handler = _WriteAnnotatedAlignsHandler(writer) for family in families: handler.handle(family) names = [align.query_name for _, align in writer._write_calls] self.assertEqual([ 'readA1', 'readA1', 'readA2', 'readA2', 'readA3', 'readA3', 'readA4', 'readA4' ], names)
def test_handle_writesAllAlignments(self): pairA1 = _mock_align_pair("readA1") pairA2 = _mock_align_pair("readA2", filter_value="foo") pairB1 = _mock_align_pair("readB1") pairB2 = _mock_align_pair("readB2", filter_value="bar") family_A = _mock_tag_family(align_pairs=set([pairA1, pairA2])) family_B = _mock_tag_family(align_pairs=set([pairB1, pairB2])) families = [family_A, family_B] writer = samtools_test.MockAlignWriter() handler = _WriteAnnotatedAlignsHandler(writer) for family in families: handler.handle(family) name_pairs = [(fam, align.query_name) for fam, align in writer._write_calls] self.assertEqual([(family_A, 'readA1'), (family_A, 'readA1'), (family_A, 'readA2'), (family_A, 'readA2'), (family_B, 'readB1'), (family_B, 'readB1'), (family_B, 'readB2'), (family_B, 'readB2')], name_pairs)