The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
# vim: set ft=perl :

use Gtk2::TestHelper tests => 9;
use strict;

my $thing = ICanScroll->new;
isa_ok ($thing, 'ICanScroll');

my $scroller = Gtk2::ScrolledWindow->new;
# this will call gtk_widget_set_scroll_adjustments() and attempt to emit
# the set_scroll_adjustments signal.
# this isn't a signal you're supposed to connect to, but we're cheating
# so we can test it.
my $id = $thing->signal_connect (set_scroll_adjustments => sub {
	my ($self, $hadj, $vadj) = @_;
	isa_ok ($thing, 'ICanScroll');
	is ($hadj, $scroller->get_hadjustment, 'got scroller\'s hadj');
	is ($vadj, $scroller->get_vadjustment, 'got scroller\'s vadj');
});
$scroller->add ($thing);

$thing->signal_handler_disconnect ($id);

# this will call gtk_widget_set_scroll_adjustments() again, this time
# with undef for both adjustments.
$thing->signal_connect (set_scroll_adjustments => sub {
	my ($self, $hadj, $vadj) = @_;
	isa_ok ($thing, 'ICanScroll');
	is ($hadj, undef, 'got undef for hadj');
	is ($vadj, undef, 'got undef for vadj');
});
$scroller->destroy;
$scroller = undef;

package ICanScroll;

use strict;
use Test::More;
use Gtk2;
use Glib::Object::Subclass
    Gtk2::HBox::,
    signals => {
	set_scroll_adjustments => {
		param_types => [qw(Gtk2::Adjustment Gtk2::Adjustment)],
		class_closure => sub { ok(1) },
	},
    },
    ;