package tests::UISelectWidgetTest;
use strict;
use base qw/ Lire::Test::TestCase /;
use Lire::Config::TypeSpec;
use Lire::UI::Widget;
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( 'name' => 'lire' );
my $select = new Lire::Config::SelectSpec( 'name' => 'test' );
$spec->add( $select );
foreach my $name ( qw/one two wawa/ ) {
$select->add( new Lire::Config::OptionSpec( 'name' => $name ) );
}
$self->{'select_value'} =
$spec->get( 'test' )->instance( 'value' => 'two' );
$self->{'select_undef'} = $spec->get( 'test' )->instance();
$self->{'spec'} = $spec;
$self->{'empty_select'} =
new Lire::Config::SelectSpec( 'name' => 'empty_select' );
$spec->add( $self->{'empty_select'} );
return;
}
sub tear_down {
my $self = $_[0];
$self->SUPER::tear_down();
$self->{'driver'}->teardown_curses_ui();
return;
}
sub test_new {
my $self = $_[0];
my $win = $self->{'window'};
$self->assert_dies( qr/missing \'value\' parameter/,
sub { my $widget = $win->add( 'test_widget',
'Lire::UI::SelectWidget' ) } );
$self->assert_dies( qr/\'value\' parameter should be a \'Lire::Config::Scalar\' instance, not \'HASH/,
sub { my $widget = $win->add( 'test_widget',
'Lire::UI::SelectWidget',
'Value' => {} ) } );
my $widget = $win->add( 'test_widget', 'Lire::UI::SelectWidget',
'value' => $self->{'select_value'} );
$self->assert_isa( 'Lire::UI::SelectWidget', $widget );
$self->assert_deep_equals( [ 'one', 'two', 'wawa' ],
$widget->{'-values'} );
$self->assert_num_equals( 1, $widget->{'-selected'} );
$self->assert_str_equals( \&Lire::UI::SelectWidget::_on_change_cb,
$widget->{'-onchange'} );
$self->assert_str_equals( 'two', $widget->get() );
$widget = $win->add( 'undef_widget', 'Lire::UI::SelectWidget',
'value' => $self->{'select_undef'} );
$self->assert_null( $widget->{'-selected'}, '-selected should be undef' );
$widget = $win->add( 'empty_widget', 'Lire::UI::SelectWidget',
'value' => $self->{'empty_select'}->instance() );
$self->assert_deep_equals( [ '-- empty list --' ], $widget->{'-values'} );
$self->assert_num_equals( 0, $widget->{'-selected'} );
$self->assert_num_equals( 0, $widget->{'-focusable'} );
return;
}
sub test_on_change_cb {
my $self = $_[0];
my $called = 'onvaluechanged not called';
my $win = $self->{'window'};
my $widget = $win->add( 'test_widget', 'Lire::UI::SelectWidget',
'value' => $self->{'select_value'},
'onvaluechanged' => sub { $called = 'called' } );
$self->assert_str_equals( 'two', $widget->get() );
$widget->{'-selected'} = 2;
Lire::UI::SelectWidget::_on_change_cb( $widget );
$self->assert_str_equals( 'wawa', $self->{'select_value'}->get() );
$self->assert_str_equals( 'called', $called );
return;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1