package tests::ConfigSpecParserTest;
use strict;
use base qw/ Lire::Test::TestCase /;
use Lire::Config::SpecParser;
use Lire::Config::TypeSpec;
use Lire::Utils qw/ tempdir create_file/;
sub new {
my $self = shift()->SUPER::new( @_ );
$self->{'specdir'} = tempdir( "config-spec_XXXXXX", 'CLEANUP' => 1 );
$self->{'expected_spec'} = $self->build_expected_spec();
$self->_make_config_spec();
return $self;
}
sub set_up {
my $self = $_[0];
$self->SUPER::set_up();
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
return;
}
sub build_expected_spec {
my $self = $_[0];
$self->{'bool_desc'} = "This is an experimental option";
my $cfg = new Lire::Config::ConfigSpec();
my $bool = new Lire::Config::BooleanSpec( 'name' => "bool_param" );
$bool->summary( "This is a boolean parameter" );
$bool->description( $self->{'bool_desc'} );
$bool->default( $bool->instance( 'value' => 1 ) );
$cfg->add( $bool );
$cfg->add( new Lire::Config::IntegerSpec( 'name' => "int_param" ) );
$cfg->add( new Lire::Config::DlfConverterSpec( 'name' => "dlfconverter_param" ) );
$cfg->add( new Lire::Config::CommandSpec( 'name' => "command_param" ) );
$cfg->add( new Lire::Config::DirectorySpec( 'name' => "dir_param" ) );
$cfg->add( new Lire::Config::FileSpec( 'name' => "file_param" ) );
$cfg->add( new Lire::Config::ExecutableSpec( 'name' => "executable_param" ) );
my $select = new Lire::Config::SelectSpec( 'name' => "select_param" );
$cfg->add( $select );
$select->add( new Lire::Config::OptionSpec( 'name' => "option_1" ) );
$select->add( new Lire::Config::OptionSpec( 'name' => "option_2" ) );
my $list = new Lire::Config::ListSpec( 'name' => "list_param" );
$cfg->add( $list );
$list->add( new Lire::Config::StringSpec( 'name' => "string_param" ));
my $rec = new Lire::Config::RecordSpec( 'name' => 'myrec' );
$rec->add( new Lire::Config::StringSpec( 'name' => 'first' ) );
$rec->add( new Lire::Config::StringSpec( 'name' => 'second' ) );
my $rec_dflt = $rec->instance();
$rec_dflt->get( 'first' )->set( 1 );
$rec_dflt->get( 'second' )->set( 2 );
$rec->default( $rec_dflt );
$cfg->add( $rec );
$cfg->add( new Lire::Config::ReportSpec( 'name' => 'my_report' ) );
return $cfg;
}
sub _make_config_spec {
my $self = $_[0];
$self->{'spec_file'} = "$self->{'specdir'}/spec.xml";
create_file( $self->{'spec_file'}, <
This is a boolean parameter
$self->{'bool_desc'}
SPEC
return;
}
sub test_new {
my $self = $_[0];
my $parser = new Lire::Config::SpecParser();
$self->assert_isa( 'Lire::Config::SpecParser', $parser );
}
sub test_merge_specifications_dir {
my $self = $_[0];
my $parser = new Lire::Config::SpecParser();
$parser->merge_specifications_dir( $self->{'specdir'} );
$self->assert_isa( 'Lire::Config::ConfigSpec', $parser->configspec() );
$self->assert_deep_equals( $self->{'expected_spec'},
$parser->configspec() );
}
sub test_merge_specification {
my $self = $_[0];
my $parser = new Lire::Config::SpecParser();
$parser->merge_specification( "$self->{'spec_file'}" );
$self->assert_isa( 'Lire::Config::ConfigSpec', $parser->configspec() );
$self->assert_deep_equals( $self->{'expected_spec'},
$parser->configspec() );
}
1;