1use strict; 2use Test::More 'no_plan'; 3use Bio::Phylo::IO 'parse'; 4use Bio::Phylo::Util::CONSTANT ':objecttypes'; 5 6{ 7 8 my $testnexus = <<'TESTNEXUS'; 9#NEXUS 10 11BEGIN TAXA; 12 TITLE Taxa; 13 DIMENSIONS NTAX=3; 14 TAXLABELS 15 Polar_bear Grizzly_bear Black_bear 16 ; 17END; 18 19 20BEGIN CHARACTERS; 21 TITLE 'Matrix in file "test3.nex"'; 22 DIMENSIONS NCHAR=2; 23 FORMAT DATATYPE = STANDARD GAP = - MISSING = ? SYMBOLS = " 0 1"; 24 CHARSTATELABELS 25 1 hello / hi bye, 2 goodbye / bye hi ; 26 MATRIX 27 Polar_bear 10 28 Grizzly_bear 01 29 Black_bear 10 30; 31END; 32TESTNEXUS 33 34 my ($matrix) = @{ parse( 35 '-format' => 'nexus', 36 '-string' => $testnexus, 37 '-as_project' => 1, 38 )->get_items(_MATRIX_) }; 39 40 my @expected = ( 41 { 42 'charlabel' => 'hello', 43 'statelabels' => [ 'hi', 'bye' ], 44 }, 45 { 46 'charlabel' => 'goodbye', 47 'statelabels' => [ 'bye', 'hi' ] 48 }, 49 ); 50 51 my @charlabels = @{ $matrix->get_charlabels }; 52 my @statelabels = @{ $matrix->get_statelabels }; 53 54 for my $i ( 0 .. $#charlabels ) { 55 ok( $charlabels[$i] eq $expected[$i]->{'charlabel'} ); 56 for my $j ( 0 .. $#{ $statelabels[$i] } ) { 57 ok($statelabels[$i]->[$j] eq $expected[$i]->{'statelabels'}->[$j] ); 58 } 59 } 60 61} 62 63{ 64 my $testnexus = <<'TESTNEXUS'; 65#NEXUS 66 67BEGIN TAXA; 68 TITLE Taxa; 69 DIMENSIONS NTAX=3; 70 TAXLABELS 71 Polar_Bear Grizzly_Bear Black_Bear 72 ; 73END; 74 75BEGIN CHARACTERS; 76 TITLE Character_Matrix; 77 DIMENSIONS NCHAR=2; 78 FORMAT DATATYPE = CONTINUOUS GAP = - MISSING = ?; 79CHARSTATELABELS 80 1 Body_Mass, 81 2 Home_Range ; 82 MATRIX 83 Polar_Bear 265.0 116.0 84 Grizzly_Bear 251.0 83.0 85 Black_Bear 93.0 57.0 86; 87END; 88TESTNEXUS 89 90 my ($matrix) = @{ parse( 91 '-format' => 'nexus', 92 '-string' => $testnexus, 93 '-as_project' => 1, 94 )->get_items(_MATRIX_) }; 95 96 my @expected = qw(Body_Mass Home_Range); 97 my @charlabels = @{ $matrix->get_charlabels }; 98 99 for my $i ( 0 .. $#charlabels ) { 100 ok( $charlabels[$i] eq $expected[$i] ); 101 } 102} 103