Gtk2-Ex-MenuView
view release on metacpan or search on metacpan
t/MenuView-display.t view on Meta::CPAN
#------------------------------------------------------------------------------
# recursive item-create-or-update
{
my $model = Gtk2::ListStore->new ('Glib::String');
$model->append;
$model->append;
my $menuview = Gtk2::Ex::MenuView->new (model => $model);
my $item0;
$menuview->signal_connect
(item_create_or_update => sub {
my ($menuview, $item, $model, $path, $iter) = @_;
diag "item create ",$path->to_string;
if (($path->get_indices)[0] == 1) {
diag "recurse for item0";
$item0 = $menuview->item_at_indices (0);
}
return ($item || Gtk2::MenuItem->new_with_label ($path->to_string));
});
isa_ok ($menuview->item_at_indices(1), 'Gtk2::MenuItem',
'recurse - item_at_indices(1)');
ok ($item0, 'recurse - item0 set');
isa_ok ($item0, 'Gtk2::MenuItem', 'recurse - item0 type');
is ($item0, $menuview->item_at_indices(0),
'recurse - item0 same as item_at_indices(0)');
}
#------------------------------------------------------------------------------
# bad recursive item-create-or-update
{
my $model = Gtk2::ListStore->new ('Glib::String');
$model->append;
my $menuview = Gtk2::Ex::MenuView->new (model => $model);
my $recursing;
my $err;
$menuview->signal_connect
(item_create_or_update => sub {
my ($menuview, $item, $model, $path, $iter) = @_;
diag "item_create_or_update of ",$path->to_string;
if ($recursing++ > 5) {
return undef;
}
if (! eval { $menuview->item_at_indices(0); 1 }) {
$err = "$@";
}
return ($item || Gtk2::MenuItem->new_with_label ($path->to_string));
});
my $item = $menuview->item_at_indices(0);
isa_ok ($item, 'Gtk2::MenuItem');
isnt ($err, undef, 'bad recurse - expect error');
like ($err, qr/Recursive item create or update/,
'bad recurse - error message');
}
#------------------------------------------------------------------------------
# destroyed when weakened on unrealized
{
my $menuview = Gtk2::Ex::MenuView->new;
my $weak_menuview = $menuview;
require Scalar::Util;
Scalar::Util::weaken ($weak_menuview);
$menuview = undef;
MyTestHelpers::main_iterations();
ok (! defined $weak_menuview);
}
# destroyed when weakened with model
{
my $liststore = Gtk2::ListStore->new ('Glib::String');
$liststore->insert_with_values (0, 0=>'foo');
my $menuview = Gtk2::Ex::MenuView->new (model => $liststore);
ok (MyTestHelpers::any_signal_connections($liststore));
my $weak_menuview = $menuview;
require Scalar::Util;
Scalar::Util::weaken ($weak_menuview);
$menuview = undef;
MyTestHelpers::main_iterations();
ok (! defined $weak_menuview);
ok (! MyTestHelpers::any_signal_connections($liststore),
'no leftover model signal connections');
}
exit 0;
( run in 1.627 second using v1.01-cache-2.11-cpan-39bf76dae61 )