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