#!/usr/bin/python from PIPRes.nexus.trees_block import * from PIPRes.testing import silentAssertRaises import unittest import cStringIO class TreesBlockTest(unittest.TestCase): def testImplicitNumericNaming(self): tbString = '''BEGIN TREES; tree mine = [&U] (1, 3, 2); end;''' tbDupString = '''BEGIN TREES; tree mine = [&U] (1, 3, 1); end;''' silentAssertRaises(self, NexusIllegalName, getTreesFromNexusString, tbString, taxaNamingStyle = TaxaNamingEnum.validLabels) trees = getTreesFromNexusString(tbString, taxaNamingStyle = TaxaNamingEnum.acceptNumbers) self.assertEqual(str(trees[0].root), '(1,2,3)') self.assertEqual(str(trees[0]), '(1,3,2)') silentAssertRaises(self, BadTreeDefError, getTreesFromNexusString, tbDupString, taxaNamingStyle = TaxaNamingEnum.acceptNumbers) trees = getTreesFromNexusString(tbString, taxaNamingStyle = TaxaNamingEnum.numbersOnly) self.assertEqual(str(trees[0].root), '(1,3,2)') self.assertEqual(str(trees[0]), '(1,3,2)') silentAssertRaises(self, BadTreeDefError, getTreesFromNexusString, tbDupString) def stestIntroducingNewNames(self): tbString = '''BEGIN TREES; tree mine = [&U] (a, b, c); end;''' trees = getTreesFromNexusString(tbString) self.assertEqual(str(trees[0]), '(a,b,c)') self.assertEqual(str(trees[0].root), '(1,2,3)') tbString = '''BEGIN TREES; tree mine = [&U] (a, a, c); end;''' silentAssertRaises(self, BadTreeDefError, getTreesFromNexusString, tbString) def stestIntroducingNewNamesWithTranslate(self): tbString = '''BEGIN TREES; translate a First, b Second, c Third; tree mine = [&U] (a, b, c); end;''' trees = getTreesFromNexusString(tbString) self.assertEqual(str(trees[0]), '(First,Second,Third)') self.assertEqual(str(trees[0].root), '(1,2,3)') tbString = '''BEGIN TREES; tree mine = [&U] (a, a, c); end;''' silentAssertRaises(self, BadTreeDefError, getTreesFromNexusString, tbString) diffOrderString = '''BEGIN TREES; translate b Second, a First, c Third; tree mine = [&U] (a, b, c); end;''' trees = getTreesFromNexusString(diffOrderString) self.assertEqual(str(trees[0]), '(First,Second,Third)') self.assertEqual(str(trees[0].root), '(2,1,3)') def stestNamesFromOtherPublicBlock(self): tbString = '''BEGIN TAXA; Dimensions ntax = 4; Taxlabels a b c d; END; BEGIN TREES; tree mine = [&U] (b, a, c); end;''' trees = getTreesFromNexusString(tbString) self.assertEqual(str(trees[0]), '(b,a,c)') self.assertEqual(str(trees[0].root), '(2,1,3)') if __name__ == '__main__': unittest.main()