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!")