package tests::ConfigObjectTest;

use strict;

use tests::ConfigValuesTest;
use Lire::Config::TypeSpec;
use Lire::Config::Object;

use base qw/tests::ConfigValueTest/;

sub new {
    my $self = shift->SUPER::new( @_ );

    $self->{'object_spec'} =
      new Lire::Config::ObjectSpec( 'name' =>'object',
                                    'class'=>'tests::ConfigObjectTest::Mock',
                                  );
    $self->{'object_spec'}->add( new Lire::Config::StringSpec('name'=>'s1'));
    $self->{'object_spec'}->add( new Lire::Config::StringSpec('name'=>'s2'));
    $self->{'config_spec'}->add( $self->{'object_spec'} );

    return $self;
}

sub type {
    return "Lire::Config::Object";
}

sub spec {
    return $_[0]{'object_spec'};
}

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

    my $e_object = bless( { 's1' => '', 's2' => '' },
                        'tests::ConfigObjectTest::Mock' );

    local $SIG{'__WARN__'} = sub { $self->annotate( @_ ) };
    my $object = $self->{'object_spec'}->instance()->as_value() || '<undef>';
    $self->assert_isa( 'tests::ConfigObjectTest::Mock', $object );
    $self->assert_deep_equals( $e_object, $object );
}

package tests::ConfigObjectTest::Mock;

sub new_from_config {
    return bless ( $_[1]->Lire::Config::Dictionary::as_value(), $_[0] );
}

$INC{'tests/ConfigObjectTest/Mock.pm'} = __FILE__;

1;


syntax highlighted by Code2HTML, v. 0.9.1