The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More;

use Tickit::Test;

use Tickit::Widget::Static;
use Tickit::Widget::Tabbed;

my $win = mk_window;

my @statics = map { Tickit::Widget::Static->new( text => "Widget $_" ) } 0 .. 2;

my $widget = Tickit::Widget::Tabbed->new( tab_position => "bottom" );

ok( defined $widget, 'defined $widget' );

$widget->add_tab( $statics[$_], label => "tab$_" ) for 0 .. $#statics;

$widget->set_window( $win );

ok( defined $statics[0]->window, '$static has window after ->set_window $win' );

flush_tickit;

is_termlog( {
        "0,0" => [ SETPEN,
                   PRINT("Widget 0"),
                   SETBG(undef),
                   ERASECH(72) ],
        ( map { +"$_,0" => [ SETBG(undef), ERASECH(80) ] } 1 .. 23 ),

        "24,0" => [ SETPEN(fg => 7,bg => 4),
                    PRINT("["),
                    SETPEN(fg => 14,bg => 4),
                    PRINT("tab0"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("]"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("tab1"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT(" "),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("tab2"),
                    SETBG(4),
                    ERASECH(65) ],
        }, 'Termlog initially' );

is_display( [ [TEXT("Widget 0")],
              BLANKLINES(23),
              [TEXT("[",fg=>7,bg=>4),
               TEXT("tab0",fg=>14,bg=>4),
               TEXT("]tab1 tab2 ",fg=>7,bg=>4),
               TEXT("",bg=>4)] ],
            'Display initially' );

$widget->next_tab;

flush_tickit;

is_termlog( {
        "0,0" => [ SETPEN,
                   PRINT("Widget 1"),
                   SETBG(undef),
                   ERASECH(72) ],
        ( map { +"$_,0" => [ SETBG(undef), ERASECH(80) ] } 1 .. 23 ),

        "24,0" => [ SETPEN(fg => 7,bg => 4),
                    PRINT(" "),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("tab0"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("["),
                    SETPEN(fg => 14,bg => 4),
                    PRINT("tab1"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("]"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("tab2"),
                    SETBG(4),
                    ERASECH(65) ],
        }, 'Termlog after ->next_tab' );

is_display( [ [TEXT("Widget 1")],
              BLANKLINES(23),
              [TEXT(" tab0[",fg=>7,bg=>4),
               TEXT("tab1",fg=>14,bg=>4),
               TEXT("]tab2 ",fg=>7,bg=>4),
               TEXT("",bg=>4)] ],
            'Display after ->next_tab' );

$widget->add_tab( Tickit::Widget::Static->new( text => "Another static" ), label => "newtab" );

flush_tickit;

is_termlog( {
        # Tickit::Window 0.45 optimised away ->expose on invisible windows
        ( $Tickit::Window::VERSION >= '0.45' ? () :
                ( "0,0" => [ SETPEN,
                           PRINT("Widget 1"),
                           SETBG(undef),
                           ERASECH(72) ],
                  ( map { +"$_,0" => [ SETBG(undef), ERASECH(80) ] } 1 .. 23 ) ) ),

        "24,0" => [ SETPEN(fg => 7,bg => 4),
                    PRINT(" "),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("tab0"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("["),
                    SETPEN(fg => 14,bg => 4),
                    PRINT("tab1"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("]"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("tab2"),
                    SETPEN(fg => 7,bg => 4),
                    PRINT(" "),
                    SETPEN(fg => 7,bg => 4),
                    PRINT("newtab"),
                    SETBG(4),
                    ERASECH(58) ],
        }, 'Termlog after ->add_tab' );

is_display( [ [TEXT("Widget 1")],
              BLANKLINES(23),
              [TEXT(" tab0[",fg=>7,bg=>4),
               TEXT("tab1",fg=>14,bg=>4),
               TEXT("]tab2 newtab ",fg=>7,bg=>4),
               TEXT("",bg=>4)] ],
            'Display after ->add_tab' );

done_testing;