package tests::UIDirectoryWidgetTest;

use strict;

use base qw/ Lire::Test::TestCase /;

use Lire::Config::TypeSpec;
use Lire::Test::CursesUIDriver;
use Curses::UI;

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

    $self->{'driver'} = new Lire::Test::CursesUIDriver();
    $self->{'driver'}->setup_curses_ui();

    $self->{'ui'} = new Curses::UI();
    $self->{'driver'}->set_curses_ui( $self->{'ui'} );
    $self->{'window'} = $self->{'ui'}->add( 'window', 'Window' );

    my $spec = new Lire::Config::ConfigSpec();
    $spec->add( new Lire::Config::DirectorySpec( 'name' => 'dir_param' ) );
    $self->{'dir_param'} = $spec->get( 'dir_param' )->instance( 'value' => '/etc');
    $self->{'spec'} = $spec;

    return;
}

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

    $self->{'driver'}->teardown_curses_ui();

    return;
}

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

    my $widget = $self->{'window'}->add( 'dir_widget', 'Lire::UI::DirectoryWidget',
                                         'value' => $self->{'dir_param'} );
    $self->assert_isa( 'Lire::UI::FileWidget',  $widget );
    $self->assert_isa( 'Lire::UI::DirectoryWidget', $widget );
}

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

    my $dlg = '< undef >';
    my $directory = $self->{'dir_param'}->get();

    $self->{'driver'}->add_event_loop_handler(
       sub {
           $dlg = $_[1];
           $self->assert_str_equals( $directory, $dlg->{'-path'} );
           $dlg->getobj('pathvalue')->text( '/dev' );
           $dlg->getobj('buttons')->{'-selected'} = 0;
       } );

    my $widget = $self->{'window'}->add( 'test_widget','Lire::UI::DirectoryWidget',
                                         'value' => $self->{'dir_param'} );
    my $dir = $widget->browse_dialog();
    $self->assert_isa('Curses::UI::Dialog::Dirbrowser',  $dlg );
    $self->assert_str_equals( '/dev', $dir );

    $self->{'driver'}->add_event_loop_handler(
       sub {
           $dlg = $_[1];
           $dlg->getobj('pathvalue')->text( '/sbin' );
           $dlg->getobj('buttons')->{'-selected'} = 1;
       } );
    $self->assert_null( $widget->browse_dialog(),
                        'expected undef from browse_dialog()' );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1