package tests::ConfigXMLSpecListSpecTest;
use strict;
use tests::ConfigSpecTest;
use base qw/ tests::ConfigTypeSpecBase tests::TestStoreFixture
tests::ChartTypesFixture /;
use Lire::ReportSpec;
use Lire::Config::XMLSpecListSpec;
use Lire::Utils qw/ create_file tempdir /;
use Lire::DlfSchema;
sub new {
my $self = shift->SUPER::new( @_ );
$self->{'tmpdir'} = tempdir( __PACKAGE__ . '_XXXXXX',
'CLEANUP' => 1 );
$self->init();
return $self;
}
sub set_up {
my $self = $_[0];
$self->SUPER::set_up();
$self->{'_old_schemas'} = \%Lire::DlfSchema::SCHEMA_CACHE;
%Lire::DlfSchema::SCHEMA_CACHE = ();
$self->{'cfg'}{'lr_reports_path'} = [ $self->{'tmpdir'} ];
$self->{'cfg'}{'lr_schemas_path'} = [];
$self->set_up_test1();
$self->set_up_test2();
return;
}
sub set_up_test1 {
my $self = $_[0];
$Lire::DlfSchema::SCHEMA_CACHE{'test1'} = 1;
mkdir "$self->{'tmpdir'}/test1", 0755
or $self->error( "mkdir failed: $!" );
create_file( "$self->{'tmpdir'}/test1/report1.xml", '' );
create_file( "$self->{'tmpdir'}/test1/report2.xml", '' );
}
sub set_up_test2 {
my $self = $_[0];
$Lire::DlfSchema::SCHEMA_CACHE{'test2'} = 1;
mkdir "$self->{'tmpdir'}/test2", 0755
or $self->error( "mkdir failed: $!" );
create_file( "$self->{'tmpdir'}/test2/report2.xml", '' );
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
*Lire::DlfSchema::SCHEMA_CACHE = $self->{'_old_schemas'};
return;
}
sub additional_new_params {
return ( 'type' => 'reports' );
}
sub type {
return 'Lire::Config::XMLSpecListSpec';
}
sub test_new {
my $self = $_[0];
$self->SUPER::test_new();
$self->assert_str_equals( 'Lire::ReportSpec', $self->{'spec'}{'_module'} );
$self->assert_str_equals( 'reports', $self->{'spec'}{'_type'} );
$self->assert_str_equals( 'reports', $self->{'spec'}->type() );
}
sub test_has_component {
my $self = $_[0];
my $spec = $self->{'spec'};
$self->assert( $spec->has_component( 'test1:report1' ) ? 1 : 0,
'has_component( "test1:report1" )' );
$self->assert( $spec->has_component( 'test1:report2' ) ? 1 : 0,
'has_component( "test1:report2" )' );
$self->assert( $spec->has_component( 'test2:report2' ) ? 1 : 0,
'has_component( "test2:report2" )' );
$self->assert( !$spec->has_component( 'test2:report1' ) ? 1 : 0,
'! has_component( "test2:report1" )' );
$self->assert( !$spec->has_component( 'test:another_report' ) ? 1 : 0,
'! has_component( "test:report1" )' );
$self->assert( !$spec->has_component( 'missing' ) ? 1 : 0,
'! has_component( "missing" )' );
}
sub test_component_names {
my $self = $_[0];
$self->assert_deep_equals( [ sort qw/ test1:report1 test1:report2
test2:report2 / ],
[ sort $self->{'spec'}->component_names() ] );
}
sub test_get {
my $self = $_[0];
$self->set_up_chart_types();
$self->set_up_test_schema();
$self->{'cfg'}{'lr_reports_path'} = [ "$self->{'testdir'}/reports" ];
$self->assert_dies( qr/no component named \'param\'/,
sub { $self->{'spec'}->get( 'param' ) } );
my $spec = $self->{'spec'}->get( 'test:top-dirs2' );
$self->assert_str_equals( $spec, $self->{'spec'}->get( 'test:top-dirs2' ) );
$self->assert_isa( 'Lire::Config::ObjectSpec', $spec );
$self->assert_str_equals( 'Lire::ReportSpec', $spec->class() );
$self->assert_str_equals( 'test:top-dirs2', $spec->name() );
$self->assert_str_equals( 'Top Directories Report Specification',
$spec->summary() );
$self->assert_str_equals( ' <para>Test report specification using an extended schema.</para> ',
$spec->description() );
$self->assert_str_equals( 'lire-test', $spec->{'i18n_domain'} );
$self->assert_num_equals( 4, scalar $spec->components() );
$self->assert_str_equals( 'id', $spec->label_component() );
my $id = $spec->get( 'id' );
$self->assert_isa( 'Lire::Config::StringSpec', $id );
$self->assert_str_equals( '^[\w.:-]+$', $id->valid_re() );
$self->assert_not_null( $id->text_description() );
my $title = $spec->get( 'title' );
$self->assert_isa( 'Lire::Config::StringSpec', $title );
$self->assert_num_equals( 0, $title->required() );
$self->assert_not_null( $title->text_description() );
$self->assert_not_null( $title->default() );
$self->assert_str_equals( 'Downloads by Directory, Top $dirs_to_show',
$title->default()->get() );
$self->assert_isa( 'Lire::Config::IntegerSpec',
$spec->get( 'dirs_to_show' ) );
my $charts = $spec->get( 'charts' );
$self->assert_isa( 'Lire::Config::ListSpec', $charts );
$self->assert_not_null( $title->text_description() );
$self->assert_not_null( $charts->default() );
$self->assert_num_equals( 1, scalar $charts->component_names() );
$self->assert_isa( 'Lire::Config::ChartSpec', $charts->get( 'chart' ) );
my $chart_configs = $charts->default()->as_value();
$chart_configs->[0]->spec()->summary( undef ); # For the comparison
$chart_configs->[0]->spec()->description( undef );
$self->assert_deep_equals( Lire::ReportSpec->load( 'test', 'top-dirs2' )->chart_configs(), $chart_configs );
}
sub test_components {
my $self = $_[0];
$self->set_up_chart_types();
$self->set_up_test_schema();
$self->{'cfg'}{'lr_reports_path'} = [ "$self->{'testdir'}/reports" ];
my @names = $self->{'spec'}->component_names();
my @comps = $self->{'spec'}->components();
$self->assert( scalar @names > 1 );
$self->assert_num_equals( scalar @names, scalar @comps );
}
1;
syntax highlighted by Code2HTML, v. 0.9.1