/usr/local/CPAN/XAO-Base/testcases/Projects.pm
package testcases::Projects;
use strict;
use XAO::SimpleHash;
use XAO::Utils;
use Error qw(:try);
use XAO::Errors qw(XAO::Projects);
use base qw(testcases::base);
sub test_everything {
my $self=shift;
use XAO::Projects qw(:all);
my $project=new XAO::SimpleHash foo => 'bar';
$self->assert(ref($project),
"Can't create project");
create_project(name => 'test',
object => $project);
my $rc="Second call to create_project was successfull and should not be";
try {
create_project(name => 'test',
object => $project);
} catch XAO::E::Projects with {
$rc='';
} otherwise {
my $e=shift;
$rc="Wrong exception ($e)";
};
$self->assert($rc eq '',$rc);
my $got=get_project('test');
$self->assert(ref($got) && ref($got) eq ref($project),
"Got something bad from get_project ($got)");
$self->assert($got->get('foo') eq 'bar',
"Project data corrupted");
$rc="There should be no current project at that point";
try {
get_current_project();
} catch XAO::E::Projects with {
$rc='';
} otherwise {
my $e=shift;
$rc="Wrong exception ($e)";
};
$self->assert($rc eq '', $rc);
$self->assert(! get_current_project_name(),
"There should be no current project name at that point");
set_current_project('test');
$self->assert(ref(get_current_project()),
"No current project after set_current_project()");
$self->assert(get_current_project_name() eq 'test',
"No current project name after set_current_project()");
##
# Multiple projects at the same time
#
get_current_project()->{newvalue}=123;
my $bar=new XAO::SimpleHash bar => 'foo', test => 234;
$self->assert(ref($bar),
"Can't create project (bar)");
create_project(name => 'bar',
object => $bar,
set_current => 1);
$self->assert(get_current_project()->get('bar') eq 'foo',
"Wrong current project (bar)");
$self->assert(get_current_project_name() eq 'bar',
"Wrong current project name (bar)");
$self->assert(get_project('bar')->get('test') == 234,
"Wrong current project value for 'test' (bar)");
$self->assert(get_project('test')->get('newvalue') == 123,
"Wrong current project value for 'newvalue' (test)");
##
# Switching back
#
$self->assert(set_current_project('test') eq 'bar',
"set_current_project() did not return old name");
$self->assert(get_current_project()->get('foo') eq 'bar',
"Wrong current project (test)");
##
# Checking that get_project does not throw an error on non-existing
# project
#
$self->assert(!defined(get_project('abrakadabra')),
"get_project on unknown project should return undef");
}
1;