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;