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

# These modules are now deprecated, don't bother testing them. --sendubala

## I am pretty sure this module is going the way of the dodo bird so 
## I am not sure how much work to put into fixing the tests/module
## --jasonstajich

use strict;

BEGIN { 
    use lib '.';
    use Bio::Root::Test;
    
    test_begin(-tests => 0);
}

if (0) {
	use Bio::Taxonomy::Taxon;
	ok(1);
	
	
	ok my $taxonL = Bio::Taxonomy::Taxon->new;
	ok $taxonL->description('this could be anything');
	ok $taxonL->taxon('could this be called name?');
	ok $taxonL->id('could this be called taxid?');
	skip 1, $taxonL->branch_length('should accept only numerical values?');
	ok  $taxonL->branch_length(5);
	
	ok $taxonL->id('could this be called taxid?');
	ok $taxonL->rank('species');
	ok $taxonL->rank, 'species';
	# ok $taxonL->has_rank, 'species'; #why two methods that do mostly the same thing, but work differently?
	
	skip 1, $taxonL->rank('foo is not a rank, class variable @RANK not initialised'); 
	ok $taxonL->to_string, '"could this be called taxid?":5';
	
	my $taxonR = Bio::Taxonomy::Taxon->new();
	
	my $taxon = Bio::Taxonomy::Taxon->new(-id =>'ancient', -taxon => 'genus');
	ok $taxon->id(), 'ancient'; 
	ok $taxon->taxon(), 'genus'; 
	ok $taxon->internal_id, 2;
	ok $taxonL->internal_id, 0; # would not it be better to start numebering from 1?
	ok $taxon->add_Descendent($taxonL);
	$taxon->add_Descendent($taxonR);
	
	ok  scalar $taxon->each_Descendent, 2;  # dies
	ok $taxon->remove_Descendent($taxonR); # better to return number of Descendants removed
	
	ok $taxon->remove_all_Descendents();
	
	
	$taxon->add_Descendent($taxonL);
	ok $taxonL->ancestor->id, 'ancient';
	ok $taxonL->branch_length(5);
	
	
	ok $taxonL->is_Leaf, 1;
	ok $taxon->is_Leaf, 0;
	ok $taxon->height, 6;
	ok $taxonL->height, 5;
	ok $taxon->invalidate_height, undef;
	ok $taxonL->classify(1), 2;
	skip(1,"skip classify weirdness");
	# ok $taxonL->classify(0), 2, 'ancestor has rank, but implementation prevents showing anything more than one value';
	skip(1,"skip classify weirdness");
	#ok $taxonL->has_rank, 1, 'documentation claims this returns a boolean; and that it queries ancestors rank?, needs an agrument but does not test it';
	skip(1,"skip classify weirdness");
	#ok $taxonL->has_rank('species'), 1;
	
	#ok $taxon->has_taxon(); # why docs and code talk about ancestor?
	#ok $taxonL->has_taxon('genus');  returns undef or oan object, not boolean
	
	ok $taxon->distance_to_root, 0;
	ok $taxonL->distance_to_root, 1;
	#ok $taxonL->recent_common_ancestor($taxon)->id, 'ancient';
	
	
	
	#use Data::Dumper;
	#print Dumper  $taxonL->classify();
	skip(1, 'Skip this weird function');
	# ok $taxonL->has_rank('species'), 1;
	#ok my $species = $taxonL->species;
	
	
	
	
	
	##################################################################################################
	
	# tests for Bio::Taxonomy::Tree;
	# code from synopsis
	
	use Bio::Species;
	use Bio::Taxonomy::Tree;
	use Bio::Taxonomy;
	
	my $human=Bio::Species->new();
	my $chimp=Bio::Species->new();
	my $bonobo=Bio::Species->new();
	
	$human->classification(qw( sapiens Homo Hominidae
							   Catarrhini Primates Eutheria
							   Mammalia Euteleostomi Vertebrata 
							   Craniata Chordata
							   Metazoa Eukaryota ));
	$chimp->classification(qw( troglodytes Pan Hominidae
							   Catarrhini Primates Eutheria
							   Mammalia Euteleostomi Vertebrata 
							   Craniata Chordata
							   Metazoa Eukaryota ));
	$bonobo->classification(qw( paniscus Pan Hominidae
								Catarrhini Primates Eutheria
								Mammalia Euteleostomi Vertebrata 
								Craniata Chordata
								Metazoa Eukaryota ));
	
	# ranks passed to $taxonomy match ranks of species
	my @ranks = ('superkingdom','kingdom','phylum','subphylum',
				 'no rank 1','no rank 2','class','no rank 3','order',
				 'suborder','family','genus','species');
	
	my $taxonomy=Bio::Taxonomy->new(-ranks => \@ranks,
								   -method => 'trust',
								   -order => -1);
	
	
	ok my $tree1=Bio::Taxonomy::Tree->new();
	my $tree2=Bio::Taxonomy::Tree->new();
	
	$tree1->make_species_branch($human,$taxonomy);
	$tree2->make_species_branch($chimp,$taxonomy);
	
	my ($homo_sapiens) = $tree1->get_leaves;
	ok ref $homo_sapiens, 'Bio::Taxonomy::Taxon';
	
	ok $tree1->splice($tree2);
	
	ok $tree1->add_species($bonobo,$taxonomy);
	
	
	ok join (", ", map {$_->taxon} $tree1->get_leaves), 'Homo sapiens, Pan troglodytes, Pan paniscus';
	ok $tree1->remove_branch($homo_sapiens);
	ok join (", ", map {$_->taxon} $tree1->get_leaves), 'Pan troglodytes, Pan paniscus';
}
