1use Test::More tests => 30; 2 3use strict; 4use warnings; 5 6use FindBin; 7use lib "$FindBin::RealBin/fakelib"; 8use Curses::UI; 9 10$ENV{LINES} = 25; 11$ENV{COLUMNS} = 80; 12 13# Tests 1: module load. 14BEGIN { 15 $| = 1; 16 # Ensure Term::ReadKey doesn't fail to get the screen size. 17 $ENV{LINES} = 25; 18 $ENV{COLUMNS} = 80; 19 20 use_ok('Curses::UI::Notebook'); 21} 22 23my $debug = 0; 24 25my $cui = new Curses::UI ( -clear_on_exit => 0, 26 -debug => $debug, ); 27$cui->leave_curses(); 28 29my $win = $cui->add(undef, 'Window'); 30exit unless $win; 31 32# Tests 2-4: notebook object creation. 33my $nb1 = $win->add(undef, 'Notebook'); 34isa_ok( $nb1, 'Curses::UI::Notebook'); 35 36ok( 37 $nb1->{-border} == 1 && $nb1->{-sbborder} == 0 && 38 $nb1->{-padleft} == 0 && $nb1->{-ipadleft} == 1, 39 'Initialization w/ defaults' 40); 41 42ok(!$nb1->active_page, 'active_page(), w/o pages'); 43 44my $nb2 = $win->add( 45 undef, 'Notebook', 46 -border => 0, 47 -sbborder => 1, 48 -wraparound => 0, 49); 50ok( 51 $nb2->isa('Curses::UI::Notebook') && 52 $nb2->{-border} == 0 && $nb2->{-sbborder} == 1 && 53 $nb2->{-wraparound} == 0, 54 'Initialization w/ specific values' 55); 56 57 58# Tests 5-11: page addition. 59for (my $i = 1; $i <= 3; $i++) { 60 my $page = $nb1->add_page("Page $i"); 61 ok( 62 defined $page && 63 $page->isa('Curses::UI::Window') && 64 scalar(@{$nb1->{-pages}}) == $i, 65 "add_page(), page $i, nb1" 66 ); 67} 68 69# nb: with three pages, tab window uses 28 spaces (6/tab for labels, 2/tab 70# for padding, 1/tab for start border, and 1 for final border) before 71# adding this page. 72my $page = $nb1->add_page('=' x ($nb1->{-w} - 28 - 3 + 1)); 73ok(!$page, 'add_page(), overflow'); 74 75for (my $i = 1; $i <= 3; $i++) { 76 my $page = $nb2->add_page("Page $i"); 77 ok( 78 defined $page && 79 $page->isa('Curses::UI::Window') && 80 scalar(@{$nb2->{-pages}}) == $i, 81 "add_page(), page $i, nb2" 82 ); 83} 84 85 86# Tests 12-17: page ordering and wraparound. 87ok($nb1->active_page eq 'Page 1', 'active_page()'); 88 89ok($nb1->first_page eq 'Page 1', 'first_page()'); 90 91ok($nb1->last_page eq 'Page 3', 'last_page()'); 92 93ok($nb1->prev_page eq 'Page 3', 'prev_page(), w/ wraparound'); 94 95ok($nb2->prev_page eq 'Page 1', 'prev_page(), w/o wraparound'); 96 97ok($nb1->next_page eq 'Page 2', 'next_page()'); 98 99 100# Tests 18-19: page movement. 101ok( 102 $nb1->activate_page('Page 3') && $nb1->active_page eq 'Page 3', 103 'active_page(), nb1' 104); 105 106ok( 107 $nb2->activate_page('Page 3') && $nb2->active_page eq 'Page 3', 108 'active_page(), nb2' 109); 110 111 112# Tests 20-21: wraparound (at end). 113ok($nb1->next_page eq 'Page 1', 'next_page(), w/ wraparound'); 114 115ok($nb2->next_page eq 'Page 3', 'next_page() w/o wraparound'); 116 117 118# Tests 22-24: page deletion. 119$nb1->delete_page('Page 1'); 120ok( 121 $nb1->first_page eq 'Page 2' && 122 scalar(@{$nb1->{-pages}}) == 2, 123 'delete_page()' 124); 125 126# - deleting active page should make Page 3 active. 127$nb1->activate_page('Page 2'); 128$nb1->delete_page('Page 2'); 129ok( 130 $nb1->active_page eq 'Page 3' && 131 $nb1->next_page eq 'Page 3' && 132 scalar(@{$nb1->{-pages}}) == 1, 133 'delete_page(), active page' 134); 135 136$nb1->delete_page('Page 3'); 137ok( 138 !$nb1->active_page && 139 scalar(@{$nb1->{-pages}}) == 0, 140 'delete_page(), final page' 141); 142 143my ($activated_widget,$activated_name) ; 144my ($deleted_widget,$deleted_name) ; 145 146my $ac_sub = sub { ($activated_widget,$activated_name) = @_ ;} ; 147my $del_sub = sub { ($deleted_widget,$deleted_name) = @_ ;} ; 148 149# create page with activation and deletion call-back 150my $cbpage = $nb1->add_page("CB Page", -on_activate => $ac_sub, 151 -on_delete => $del_sub ); 152 153ok($cbpage, "Created page with callback") ; 154 155$nb1->activate_page('CB Page'); 156is($activated_widget, $nb1, "activate callback called (widget ok)" ); 157is($activated_name, 'CB Page', "activate callback called (name ok)"); 158 159$nb1->delete_page('CB Page') ; 160is($deleted_widget, $nb1, "delete callback called (widget ok)" ); 161is($deleted_name, 'CB Page', "delete callback called (name ok)"); 162