package tests::UIUtilsTest;

use strict;

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

use Lire::Utils qw/deep_copy/;
use Lire::UI::Utils qw/ button_box_width button_label layout_buttonbox /;
use Lire::Test::Mock;
use Curses::UI::Container;
use Curses::UI::Buttonbox;

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

    my $buttons = [ {'-label' => '< Cancel >',
                     '-onpress' => sub { } } ];
    $self->assert_num_equals( 10,
                              button_box_width( $buttons ) );
    $buttons = [ {'-label' => '< Cancel >',
                  '-onpress' => sub { } },
                 {'-label' => '< OK >',
                  '-onpress' => sub { } } ];
    $self->assert_num_equals( 17,
                              button_box_width( $buttons ) );
}

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

    $self->assert_str_equals( '[Delete]', button_label( 'Delete' ) );
    $self->assert_str_equals( '[Delete]', button_label( 'Delete', 0 ) );
    $self->assert_str_equals( '[D.]', button_label( 'Delete', 3 ) );
    $self->assert_str_equals( '[D.]', button_label( 'Delete', 4 ) );
    $self->assert_str_equals( '[De.]', button_label( 'Delete', 5 ) );
    $self->assert_str_equals( '[Del.]', button_label( 'Delete', 6 ) );
    $self->assert_str_equals( '[Dele.]', button_label( 'Delete', 7 ) );
    $self->assert_str_equals( '[Delete]', button_label( 'Delete', 10 ) );
}

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

    my $container = new Lire::Test::Mock( 'Curses::UI::Container',
                                          'canvaswidth' => 80 );

    my $box = new Lire::Test::Mock( 'Curses::UI::Buttonbox' );
    my $buttons = [ { '-label' => 'A_label' },         # 7
                    { '-label' => 'B_another_label' }, # 15
                    { '-label' => 'Btn' } ];           # 3
    $box->{'-buttons'} = deep_copy( $buttons );
    layout_buttonbox( $container, $box );
    $self->assert_num_equals( 33, $box->{'-width'} );
    $self->assert_num_equals( 0, $box->{'-x'} );
    $self->assert_deep_equals( [ { '-label' => '[A_label]' },
                                 { '-label' => '[B_another_label]' },
                                 { '-label' => '[Btn]' } ],
                               $box->{'-buttons'} );

    $container->set_result( 'canvaswidth' => 11 );
    $box->{'-buttons'} = deep_copy( $buttons );
    layout_buttonbox( $container, $box );
    $self->assert_num_equals( 11, $box->{'-width'} );
    $self->assert_deep_equals( [ { '-label' => '[A]' }, { '-label' => '[B]' },
                                 { '-label' => '[B]' } ],
                               $box->{'-buttons'} );

    $box->{'-buttons'} = deep_copy( $buttons );
    layout_buttonbox( $container, $box, 2, 2 );
    $self->assert_num_equals( 33, $box->{'-width'} );
    $self->assert_num_equals( 2, $box->{'-x'} );

    $container->set_result( 'canvaswidth' => 25 );
    $box->{'-buttons'} = deep_copy( $buttons );
    layout_buttonbox( $container, $box );
    $self->assert_num_equals( 25, $box->{'-width'} );
    $self->assert_deep_equals( [ { '-label' => '[A_label]' },
                                 { '-label' => '[B_anot.]' },
                                 { '-label' => '[Btn]' } ],
                               $box->{'-buttons'} );

    $container->set_result( 'canvaswidth' => 21 );
    $box->{'-buttons'} = deep_copy( $buttons );
    layout_buttonbox( $container, $box );
    $self->assert_num_equals( 21, $box->{'-width'} );
    $self->assert_deep_equals( [ { '-label' => '[A_la.]' },
                                 { '-label' => '[B_an.]' },
                                 { '-label' => '[Btn]' } ],
                               $box->{'-buttons'} );

    $container->set_result( 'canvaswidth' => 17 );
    $box->{'-buttons'} = deep_copy( $buttons );
    layout_buttonbox( $container, $box, 1, 1 );
    $self->assert_num_equals( 15, $box->{'-width'} );
    $self->assert_deep_equals( [ { '-label' => '[A.]' },
                                 { '-label' => '[B.]' },
                                 { '-label' => '[Btn]' } ],
                               $box->{'-buttons'} );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1