Gtk2-Ex-Xor
view release on metacpan or search on metacpan
}
};
$lasso->start;
}
#------------------------------------------------------------------------------
# VERSION
my $want_version = 23;
is ($Gtk2::Ex::Lasso::VERSION, $want_version, 'VERSION variable');
is (Gtk2::Ex::Lasso->VERSION, $want_version, 'VERSION class method');
{ ok (eval { Gtk2::Ex::Lasso->VERSION($want_version); 1 },
"VERSION class check $want_version");
my $check_version = $want_version + 1000;
ok (! eval { Gtk2::Ex::Lasso->VERSION($check_version); 1 },
"VERSION class check $check_version");
}
{
my $lasso = Gtk2::Ex::Lasso->new;
is ($lasso->VERSION, $want_version, 'VERSION object method');
ok (eval { $lasso->VERSION($want_version); 1 },
"VERSION object check $want_version");
my $check_version = $want_version + 1000;
ok (! eval { $lasso->VERSION($check_version); 1 },
"VERSION object check $check_version");
}
#-----------------------------------------------------------------------------
sub show_wait {
my ($widget) = @_;
my $t_id = Glib::Timeout->add (10_000, sub {
diag "Timeout waiting for map event";
exit 1;
});
my $s_id = $widget->signal_connect (map_event => sub {
Gtk2->main_quit;
return 0; # propagate event
});
$widget->show;
Gtk2->main;
$widget->signal_handler_disconnect ($s_id);
Glib::Source->remove ($t_id);
}
# return an arrayref
sub leftover_fields {
my ($widget) = @_;
return [ grep /Gtk2::Ex::Lasso/, keys %$widget ];
}
# destroyed when weakened inactive
{
my $widget = Gtk2::Window->new ('toplevel');
my $lasso = Gtk2::Ex::Lasso->new (widget => $widget);
my $weak_lasso = $lasso;
require Scalar::Util;
Scalar::Util::weaken ($weak_lasso);
$lasso = undef;
MyTestHelpers::main_iterations();
is ($weak_lasso, undef, 'inactive Lasso weakened');
is_deeply (leftover_fields($widget), [],
'no Lasso data left behind from inactive');
$widget->destroy;
}
# destroyed when weakened active
{
my $widget = Gtk2::Window->new ('toplevel');
my $lasso = Gtk2::Ex::Lasso->new (widget => $widget);
show_wait ($widget);
my_lasso_start($lasso);
my $weak_lasso = $lasso;
Scalar::Util::weaken ($weak_lasso);
$lasso = undef;
is ($weak_lasso, undef, 'active Lasso weakened');
is_deeply (leftover_fields($widget), [],
'no Lasso data left behind from active');
$widget->destroy;
}
# start() emits "notify::active"
{
my $widget = Gtk2::Window->new ('toplevel');
show_wait ($widget);
my $lasso = Gtk2::Ex::Lasso->new (widget => $widget);
my $seen_notify = 0;
$lasso->signal_connect ('notify::active' => sub { $seen_notify = 1; });
my_lasso_start($lasso);
is ($seen_notify, 1, 'start() emits notify::active');
$widget->destroy;
}
# end() emits "notify::active"
{
my $widget = Gtk2::Window->new ('toplevel');
show_wait ($widget);
my $lasso = Gtk2::Ex::Lasso->new (widget => $widget);
my_lasso_start($lasso);
my $seen_notify = 0;
$lasso->signal_connect ('notify::active' => sub { $seen_notify = 1; });
$lasso->end;
is ($seen_notify, 1, 'end() emits notify::active');
$widget->destroy;
}
#------------------------------------------------------------------------------
# cursor properties
# return true if two Glib::Boxed objects $b1 and $b2 point to the same
# underlying C object
sub glib_boxed_equal {
my ($b1, $b2) = @_;
if (! defined $b1 || ! defined $b2) {
return 0;
}
diag "b1 type:";
diag $b1->type;
my $pspec = Glib::ParamSpec->boxed ('equal', 'equal', 'blurb', ref($b1),
Glib::G_PARAM_READWRITE());
( run in 1.260 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )