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'} = "<para>This is an experimental option</para>";
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'}, <<SPEC );
<lrcsml:config-spec
xmlns:lrcsml="http://www.logreport.org/LRCSML/"
xmlns:lrcml="http://www.logreport.org/LRCML/">
<lrcsml:boolean name="bool_param">
<lrcsml:summary>This is a boolean parameter</lrcsml:summary>
<lrcsml:description>$self->{'bool_desc'}</lrcsml:description>
<lrcml:param name="bool_param" value="1"/>
</lrcsml:boolean>
<lrcsml:integer name="int_param"/>
<lrcsml:dlf-converter name="dlfconverter_param"/>
<lrcsml:command name="command_param"/>
<lrcsml:directory name="dir_param"/>
<lrcsml:file name="file_param"/>
<lrcsml:executable name="executable_param"/>
<lrcsml:select name="select_param">
<lrcsml:option name="option_1"/>
<lrcsml:option name="option_2"/>
</lrcsml:select>
<lrcsml:list name="list_param">
<lrcsml:string name="string_param"/>
</lrcsml:list>
<lrcsml:record name="myrec">
<lrcsml:string name="first"/>
<lrcsml:string name="second"/>
<lrcml:param name="myrec">
<lrcml:param name="first" value="1"/>
<lrcml:param name="second" value="2"/>
</lrcml:param>
</lrcsml:record>
<lrcsml:report-config name="my_report"/>
</lrcsml:config-spec>
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;
syntax highlighted by Code2HTML, v. 0.9.1