import unittest

import alignementseq_multiple

from Bio.SeqRecord import SeqRecord
from Bio.Seq import Seq

class MultipleAlignTestCase(unittest.TestCase):
    """
    Unit test for multiple alignments.

    Since alignment algorithm is allowed to reorder sequences at will, aligned
    sequences are sorted before comparison.
    """
    def test_align_from_tree(self):
        aseqs = [ s.seq for s in
                alignementseq_multiple.multiple_align_from_tree(
                    (("CHAT", "CAT"), "HER")
                    )]
        aseqs.sort()

        self.assertEqual(
            aseqs,
            [Seq(s) for s in ('C-AT', 'CHAT', 'H-ER')]
            )

    def test_align_from_linkage_matrix(self):
        import tree_generator
        import alignementseq

        seqs = [ SeqRecord(s) for s in ("CHAT", "CAT", "HER") ]
        tree = tree_generator.tree_build(seqs, alignementseq.vec_align)
        aseqs = alignementseq_multiple.multiple_align_from_linkage_matrix(
                seqs,
                tree
            )
        aseqs_ref = [ Seq(s) for s in ("CHAT", "C-AT", "H-ER") ]
        aseqs_ref.sort()
        aseqs = [ s.seq for s in aseqs ]
        aseqs.sort()
        
        self.assertEqual(aseqs_ref, aseqs)