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 )