1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
|
#!/usr/bin/perl
use v5.26;
use warnings;
use Test::More;
use Test::Identity;
use Test::Refcount;
use Tickit::Test;
use Tickit::Widget::Static;
use Tickit::Widget::Tabbed;
my $win = mk_window;
my $widget = Tickit::Widget::Tabbed->new( tab_position => "top" );
my @tabs = map {
$widget->add_tab( Tickit::Widget::Static->new( text => "Widget $_" ), label => "tab$_" )
} 0 .. 2;
is_oneref( $widget, '$widget still has refcount 1 after constructing tabs' );
is( $tabs[$_]->index, $_, "\$tabs[$_]->index" ) for 0 .. 2;
is( $widget->active_tab_index, 0, '$widget->active_tab_index initially' );
ok( $tabs[0]->is_active, '$tabs[0] is active initially' );
ok( !$tabs[1]->is_active, '$tabs[1] is not active initially' );
ok( !$tabs[2]->is_active, '$tabs[2] is not active initially' );
identical( $widget->active_tab, $tabs[0], '$widget->active_tab is $tabs[0] initially' );
$widget->set_window( $win );
flush_tickit;
is_display( [ [TEXT("[",fg=>7,bg=>4), TEXT("tab0",fg=>14,bg=>4), TEXT("]tab1 tab2 ",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 0")] ],
'Display initially' );
$widget->activate_tab( 1 );
is( $widget->active_tab_index, 1, '$widget->active_tab_index after ->activate_tab' );
ok( !$tabs[0]->is_active, '$tabs[0] is not active after ->activate_tab' );
ok( $tabs[1]->is_active, '$tabs[1] is active after ->activate_tab' );
ok( !$tabs[2]->is_active, '$tabs[2] is not active after ->activate_tab' );
identical( $widget->active_tab, $tabs[1], '$widget->active_tab is $tabs[1] after ->activate_tab' );
flush_tickit;
is_display( [ [TEXT(" tab0[",fg=>7,bg=>4), TEXT("tab1",fg=>14,bg=>4), TEXT("]tab2 ",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 1")] ],
'Display after ->activate_tab index' );
$widget->activate_tab( $tabs[2] );
flush_tickit;
is_display( [ [TEXT(" tab0 tab1[",fg=>7,bg=>4), TEXT("tab2",fg=>14,bg=>4), TEXT("]",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 2")] ],
'Display after ->activate_tab $tab' );
$widget->move_tab( 1, +1 );
is( $tabs[0]->index, 0, '$tabs[0]->index after ->move_tab +1' );
is( $tabs[1]->index, 2, '$tabs[1]->index after ->move_tab +1' );
is( $tabs[2]->index, 1, '$tabs[2]->index after ->move_tab +1' );
is( $widget->active_tab_index, 1, '$widget->active_tab_index after ->move_tab +1' );
ok( !$tabs[0]->is_active, '$tabs[0] is not active after ->move_tab +1' );
ok( !$tabs[1]->is_active, '$tabs[1] is not active after ->move_tab +1' );
ok( $tabs[2]->is_active, '$tabs[2] is active after ->move_tab +1' );
flush_tickit;
is_display( [ [TEXT(" tab0[",fg=>7,bg=>4), TEXT("tab2",fg=>14,bg=>4), TEXT("]tab1 ",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 2")] ],
'Display after ->move_tab +1' );
$widget->move_tab( 2, -1 );
is( $tabs[0]->index, 0, '$tabs[0]->index after ->move_tab -1' );
is( $tabs[1]->index, 1, '$tabs[1]->index after ->move_tab -1' );
is( $tabs[2]->index, 2, '$tabs[2]->index after ->move_tab -1' );
is( $widget->active_tab_index, 2, '$widget->active_tab_index after ->move_tab -1' );
ok( !$tabs[0]->is_active, '$tabs[0] is not active after ->move_tab -1' );
ok( !$tabs[1]->is_active, '$tabs[1] is not active after ->move_tab -1' );
ok( $tabs[2]->is_active, '$tabs[2] is active after ->move_tab -1' );
flush_tickit;
is_display( [ [TEXT(" tab0 tab1[",fg=>7,bg=>4), TEXT("tab2",fg=>14,bg=>4), TEXT("]",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 2")] ],
'Display after ->move_tab -1' );
$widget->remove_tab( 1 );
splice @tabs, 1, 1, ();
is( $widget->active_tab_index, 1, '$widget->active_tab_index after ->remove' );
ok( !$tabs[0]->is_active, '$tabs[0] is not active after ->remove_tab' );
ok( $tabs[1]->is_active, '$tabs[1] is active after ->remove_tab' );
identical( $widget->active_tab, $tabs[1], '$widget->active_tab is $tabs[1] after ->remove_tab' );
flush_tickit;
is_display( [ [TEXT(" tab0[",fg=>7,bg=>4), TEXT("tab2",fg=>14,bg=>4), TEXT("]",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 2")] ],
'Display after ->remove_tab index' );
# Removing active tab
{
push @tabs, $widget->add_tab(
Tickit::Widget::Static->new( text => "Widget 3" ),
label => "tab3",
);
flush_tickit;
$widget->remove_tab( 1 );
splice @tabs, 1, 1, ();
is( $widget->active_tab_index, 1, '$widget->active_tab_index after ->remove active' );
ok( !$tabs[0]->is_active, '$tabs[0] is not active after ->remove_tab active' );
ok( $tabs[1]->is_active, '$tabs[1] is active after ->remove_tab active' );
identical( $widget->active_tab, $tabs[1], '$widget->active_tab is $tabs[1] after ->remove_tab active' );
flush_tickit;
is_display( [ [TEXT(" tab0[",fg=>7,bg=>4), TEXT("tab3",fg=>14,bg=>4), TEXT("]",fg=>7,bg=>4), TEXT("",bg=>4)],
[TEXT("Widget 3")] ],
'Display after ->remove_tab active' );
}
$widget->set_window( undef );
is_oneref( $widget, '$widget still has refcount 1 before EOF' );
done_testing;
|