# -*-Perl-*- Test Harness script for Bioperl
# $Id: tigrxml.t 15112 2008-12-08 18:12:38Z sendu $

use strict;

BEGIN {
    use lib '.';
    use Bio::Root::Test;
    
    test_begin(-tests => 49,
			   -requires_modules => [qw(XML::SAX XML::SAX::Writer)]);
	
	use_ok('Bio::SeqIO::tigrxml');
}

my $verbose = test_debug();

my $ast = Bio::SeqIO->new(-format => 'tigrxml' ,
			  -verbose => $verbose,
			  -file => test_input_file('test.tigrxml'));
isa_ok($ast, 'Bio::SeqIO');
$ast->verbose($verbose);
ok my $as = $ast->next_seq();
is($as->display_id, 'chr9');

my $first = 1;
for my $f ( sort { $a->start * $a->strand <=> $b->start * $b->strand } $as->get_SeqFeatures ) {
    ok($f);

    my ($name);
    for my $tag ( qw(Parent ID) ) {
	if( $f->has_tag($tag) ) {
	    ($name) = $f->get_tag_values($tag);
	    last;
	}
    }
    if( $name eq '162.t00500' || $name eq '162.m02638' ) {
	if( $f->primary_tag eq 'gene' ) {
	    is($f->start, 185408);
	    is($f->end, 187155);
	    # warn($f->gff_string, "\n");
	} elsif( $f->primary_tag eq 'mRNA' ) { 
	    is($f->start, 185408); # the values list for COORD are start/end of CDS not whole transcript
	    is($f->end, 187155);    
	    is($f->strand, 1);
	} elsif( $f->primary_tag eq "five_prime_UTR" ) {
	    my ($id) = $f->get_tag_values('ID');
	    if( $id =~ /UTR1$/ ) {
		is($f->start, 185408);
		is($f->end,   185433);
	    } elsif( $id =~ /UTR2$/ ) {
		is($f->start, 185487);
		is($f->end,   185793);
	    } else {
		ok(0, 'expected only two UTRS');
	    }	    
	} elsif( $f->primary_tag eq "three_prime_UTR" ) {
	    is($f->start, 187042);
	    is($f->end, 187155);
	} elsif( $f->primary_tag eq 'CDS' ) {
	    is($f->start, 185794);
	    is($f->end, 187041);
	}
    } elsif ( $name eq '162.t00448' || $name eq '162.m02967' ) {
	if( $f->primary_tag eq 'gene' ) {
	    is($f->start, 59343);
	    is($f->end, 61061);
	} elsif( $f->primary_tag eq 'mRNA' ) { 
	    is($f->start, 59343); # the values list for COORD are start/end of CDS not whole transcript
	    is($f->end, 61061);    
	    is($f->strand, -1);
	} elsif( $f->primary_tag eq "five_prime_UTR" ) {
	    my ($id) = $f->get_tag_values('ID');
	    is($f->start, 60834);
	    is($f->end, 61061);
	    is($f->strand, -1);
	} elsif( $f->primary_tag eq "three_prime_UTR" ) {
	    is($f->start, 59343);
	    is($f->end,   59632);
	    is($f->strand, -1);
	} elsif( $f->primary_tag eq 'CDS' ) {
	    if( $first ) { 
		is($f->start, 60801);
		is($f->end,   60833);
		is($f->strand, -1);
		$first = 0;
	    }
	}
    } else { 
	ok(0, "unexpected name '$name'\n");
    }
}
