#!/usr/bin/python from PIPRes.nexus.taxa_block import * from PIPRes.testing import silentAssertRaises import unittest import cStringIO class TaxaBlockTest(unittest.TestCase): def testEmpty(self): tbString = '''BEGIN TAXA; end;''' self.assertEqual(getTaxaFromNexusString(tbString), []) tbString = ''' [test] ''' self.assertEqual(getTaxaFromNexusString(tbString), []) def testIllegalDimensions(self): tbString = '''BEGIN TAXA; dimensions ntax = -1; end;''' silentAssertRaises(self, NexusUnexpectedTokenError, getTaxaFromNexusString, tbString) tbString = '''BEGIN TAXA; dimensions ntax = 0; end;''' silentAssertRaises(self, NexusUnexpectedTokenError, getTaxaFromNexusString, tbString) tbString = '''BEGIN TAXA; dimensions ntax = fifty; end;''' silentAssertRaises(self, NexusUnexpectedTokenError, getTaxaFromNexusString, tbString) def deprecatedtestUnnamed(self): tbString = '''BEGIN TAXA; dimensions ntax = 4; end;''' self.assertEqual(getTaxaFromNexusString(tbString), ['1', '2', '3', '4']) def testTypical(self): tbString = '''BEGIN TAXA; dimensions ntax = 4; TaxLabels a b d c; end;''' self.assertEqual(getTaxaFromNexusString(tbString), ['a', 'b', 'd', 'c']) def testIllegalTaxlabels(self): tbString = '''BEGIN TAXA; dimensions ntax = 4; TaxLabels a b %s c; end;''' illegalNames = ["''", "' '", '_', ','] for illName in illegalNames: silentAssertRaises(self, NexusIllegalName, getTaxaFromNexusString, tbString % illName) def testWrongNumberOfLabels(self): tbString = '''BEGIN TAXA; dimensions ntax = 4; TaxLabels a b c; end;''' silentAssertRaises(self, NexusAfterTokenError, getTaxaFromNexusString, tbString) tbString = '''BEGIN TAXA; dimensions ntax = 2; TaxLabels a b c; end;''' silentAssertRaises(self, NexusAfterTokenError, getTaxaFromNexusString, tbString) def testFromOtherPublicBlock(self): tbString = '''BEGIN CHARACTERS; dimensions ntax = 2 nchar = 1; TaxLabels a b; format datatype = dna; matrix a A b C; end;''' self.assertEqual(getTaxaFromNexusString(tbString), ['a', 'b']) tbString = '''BEGIN TREES; tree test = (a, b, (c, d)); end;''' self.assertEqual(getTaxaFromNexusString(tbString), ['a', 'b', 'c', 'd']) tbString = '''BEGIN TREES; translate 1 a, 2 c, 3 b, 4 d; tree test = (1,2,3,4); end;''' self.assertEqual(getTaxaFromNexusString(tbString), ['a', 'c', 'b','d']) if __name__ == '__main__': unittest.main()