package tests::ConfigPluginSpecTest;

use strict;

use tests::ConfigSpecTest;
use base qw/tests::ConfigSelectSpecTest/;

use Lire::Config::TypeSpec;
use Lire::Config::PluginSpec;
use Lire::Config::RecordSpec;

sub set_up {
    my $self = $_[0];
    $self->SUPER::set_up();

    my $spec = new Lire::Config::ConfigSpec();
    $self->{'o1_props'} = new Lire::Config::RecordSpec( 'name' => 'option_1_properties' );
    $self->{'o1_props'}->add( new Lire::Config::StringSpec( 'name' => 'string1' ) );
    $spec->add( $self->{'o1_props'} );
    $self->{'o2_props'} = new Lire::Config::RecordSpec( 'name' => 'option_2_properties' );
    $self->{'o2_props'}->add( new Lire::Config::StringSpec( 'name' => 'string2' ) );
    $spec->add( $self->{'o2_props'} );

    $self->{'cfg'}{'_lr_config_spec'} = $spec;

    return;
}


sub type {
    return 'Lire::Config::PluginSpec';
}

sub test_new {
    my $self = $_[0];

    $self->SUPER::test_new();

    my $no_props_spec =
      new Lire::Config::RecordSpec( 'name' => $self->{'spec'}->name() . "_no_properties" );
    $self->assert_isa( 'Lire::Config::RecordSpec',
                       $self->{'spec'}{'_no_properties_spec'} );
    $self->assert_deep_equals( $no_props_spec,
                               $self->{'spec'}->{'_no_properties_spec'} );
}

sub test_get_properties_spec {
    my $self = $_[0];

    $self->assert_str_equals( $self->{'spec'}{'_no_properties_spec'},
                              $self->{'spec'}->get_properties_spec( undef ));

    $self->assert_str_equals( $self->{'o1_props'},
                              $self->{'spec'}->get_properties_spec( 'option_1' ) );

    $self->assert_str_equals( $self->{'o2_props'},
                              $self->{'spec'}->get_properties_spec( 'OPTION_2') );

    $self->assert_deep_equals( $self->{'spec'}{'_no_properties_spec'},
                               $self->{'spec'}->get_properties_spec( 'option_3' ) );
    $self->assert_dies( qr/no option 'option_4' in this specification/,
                        sub { $self->{'spec'}->get_properties_spec( 'option_4' ) } );
}

1;



syntax highlighted by Code2HTML, v. 0.9.1