def test_bats_format_nexus(): taxons = dendropy.TaxonSet(["test_check%i" % i for i in range(10)]) trop_dict = dict([("test_check%i" % i, (i % 2) == 0) for i in range(10)]) tlist = [dendropy.treesim.uniform_pure_birth(taxons) for _ in range(20)] treelist = dendropy.TreeList(tlist) outhandle = StringIO() TreeingTools.bats_format_nexus(treelist, outhandle, trop_dict) outhandle.seek(0) good_lines = ifilter(lambda x: len(x.strip()) > 0, outhandle) eq_(good_lines.next().strip(), "#NEXUS", 'First line must be "#NEXUS"') eq_(good_lines.next().strip(), "begin states;", 'Second line line must be "begin states;"') num = 0 for num, line in enumerate(good_lines, 1): if line.strip() == "End;": break tnum, state = line.strip().split() eq_(num, int(tnum)) if ((num - 1) % 2) == 0: eq_(state, "True") else: eq_(state, "False") eq_(num, len(trop_dict) + 1, "Some leafs were missing!") num = 0 eq_(good_lines.next().strip(), "begin trees;") for num, line in enumerate(good_lines, 1): if line.strip() == "end;": break ok_(line.startswith("tree tree_%i" % num)) ok_("test_check" not in line, "Taxon names are in the tree!") eq_(num, len(tlist) + 1, "Some trees were missing!")