#-*-Perl-*-
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.t'
use strict;
use warnings;
use Module::Build;
use Bio::Root::IO;
use File::Path 'rmtree';
use IO::String;
use CGI;
use FindBin '$Bin';
use constant TEST_COUNT => 26;
use constant CONF_FILE => "$Bin/testdata/conf/GBrowse.conf";
my $PID;
BEGIN {
# to handle systems with no installed Test module
# we include the t dir (where a copy of Test.pm is located)
# as a fallback
eval { require Test; };
if( $@ ) {
use lib 't';
}
use Test;
plan test => TEST_COUNT;
$PID = $$;
rmtree '/tmp/gbrowse_testing';
}
END {
rmtree '/tmp/gbrowse_testing' if $$ == $PID;
}
chdir $Bin;
use lib "$Bin/../lib";
use Bio::Graphics::Browser2;
use Bio::Graphics::Browser2::Render::Slave;
use Bio::Graphics::Browser2::Region;
use Bio::Graphics::Browser2::RegionSearch;
use lib "$Bin/testdata";
use TemplateCopy; # for the template_copy() function
# Test remote rendering
my @servers = (Bio::Graphics::Browser2::Render::Slave->new(LocalPort=>'dynamic'), # main
Bio::Graphics::Browser2::Render::Slave->new(LocalPort=>'dynamic'), # volvox4 "heterodox sites"
Bio::Graphics::Browser2::Render::Slave->new(LocalPort=>'dynamic'), # volvox3 "cleavage sites"
);
for ('volvox_final.conf','yeast_chr1.conf') {
template_copy("testdata/conf/templates/$_",
"testdata/conf/$_",
{ '$MAIN' =>"http://localhost:".$servers[0]->listen_port,
'$REMOTE1'=>"http://localhost:".$servers[1]->listen_port,
'$REMOTE2'=>"http://localhost:".$servers[2]->listen_port});
}
for my $s (@servers) {
$s->debug(1);
ok($s->run);
}
%ENV = ();
$ENV{GBROWSE_DOCS} = $Bin;
# create objects we need to test region fetching
my $globals = Bio::Graphics::Browser2->new(CONF_FILE);
my $session = $globals->session;
my $source = $globals->create_data_source('volvox');
my $state = $session->page_settings;
# first test that the region search is working
my $region = Bio::Graphics::Browser2::Region->new(
{ source => $source,
state => $state,
db => $source->open_database(), # this will open the default database
}
);
my $features = $region->search_features({-search_term => 'Contig:ctgA'});
ok($features);
ok(ref $features,'ARRAY');
ok(scalar @$features,1);
ok($features->[0]->method,'chromosome');
ok($features->[0]->start,1);
ok($features->[0]->end,50000);
$features = $region->search_features({-search_term => 'Contig:ctgA:10001..20000'});
ok($features->[0]->length,10000);
$features = $region->search_features({-search_term => 'HOX'});
ok(scalar @$features,4);
$features = $region->search_features({-search_term => 'Match:seg*'});
ok(scalar @$features,2);
$features = $region->search_features({-search_term => 'My_feature:f12'});
ok(scalar @$features,1);
$region = Bio::Graphics::Browser2::Region->new(
{ source => $source,
state => $state,
db => $source->open_database('CleavageSites'),
}
);
$features = $region->search_features({-search_term => 'Cleavage*'});
ok(scalar @$features,15);
$features = $region->search_features({-search_term => 'Cleavage11'});
ok(scalar @$features,1);
$region = Bio::Graphics::Browser2::Region->new(
{ source => $source,
state => $state,
db => $source->open_database('Alignments'),
}
);
$features = $region->search_features({-search_term => 'Cleavage11'});
ok(scalar @$features,0);
$features = $region->search_features({-search_term => 'Heterodox14'});
ok(scalar @$features,1);
# now try the local multidatabase functionality
my $search = Bio::Graphics::Browser2::RegionSearch->new(
{ source => $source,
state => $state,
}
);
$search->init_databases();
$features = $search->search_features_locally({-search_term => 'HOX'});
ok(scalar @$features,4);
$features = $search->search_features_locally({-search_term => 'Binding_site:B07'}); # test removal of duplicate features
ok(scalar @$features,1);
$features = $search->search_features_locally({-search_term => 'My_feature:f12'});
ok(scalar @$features,1);
$features = $search->search_features_locally({-search_term => 'My_feature:f12',-shortcircuit=>0});
ok(scalar @$features,2);
my @dbids = sort map {$_->gbrowse_dbid} @$features;
ok("@dbids","general volvox2:database");
my @seqid = sort map {$_->seq_id} @$features;
ok("@seqid","ctgA ctgB");
$features = $search->search_features_remotely({-search_term => 'Heterodox14'}); # this will appear in volvox4
ok(scalar @$features,1);
$features = $search->search_features_remotely({-search_term => 'Cleavage11'}); # this will appear in volvox3
ok(scalar @$features,1);
$features = $search->search_features_remotely({-search_term => 'Cleavage*'}); # this will appear in volvox3
ok(scalar @$features,15);
exit 0;
sub usleep {
my $fractional_seconds = shift;
select(undef,undef,undef,$fractional_seconds);
}
END {
if ($PID == $$) {
foreach (@servers) { $_->kill }
unlink 'testdata/conf/volvox_final.conf',
'testdata/conf/yeast_chr1.conf';
rmtree('/tmp/gbrowse_testing',0,0);
}
}