The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 01.t'

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More tests => 29;

BEGIN {
 use Glib qw/TRUE FALSE/;
 use Gtk2 -init;
 use_ok('Gtk2::ImageView');
};

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

my $version = Gtk2::ImageView->library_version;
ok(defined $version, "library version $version");

$version = $Gtk2::ImageView::VERSION;
ok(defined $version, "bindings version $version");

my $view = Gtk2::ImageView->new;
ok(defined $view, 'new() works');
isa_ok($view, 'Gtk2::ImageView');

ok(defined $view->get_tool, 'get_tool() works');

# The default tool is Gtk2::ImageView::Tool::Dragger.
isa_ok($view->get_tool, 'Gtk2::ImageView::Tool::Dragger');

$view->set_pixbuf(Gtk2::Gdk::Pixbuf->new_from_file ('t/gnome_logo.jpg'), TRUE);

isa_ok($view->get_viewport, 'Gtk2::Gdk::Rectangle');

isa_ok($view->get_draw_rect, 'Gtk2::Gdk::Rectangle');

ok($view->get_check_colors, 'get_check_colors() works');

ok(defined $view->get_fitting, 'get_fitting() works');

ok(defined $view->get_pixbuf, 'get_pixbuf() works');

ok(defined $view->get_zoom, 'get_zoom() works');

ok(Gtk2::ImageView::Zoom->get_min_zoom < Gtk2::ImageView::Zoom->get_max_zoom, 'Ensure that the gtkimageview.zooms_* functions are present and work as expected.');

ok(defined $view->get_black_bg, 'get_black_bg() works');

ok(defined $view->get_show_frame, 'get_show_frame() works');

ok(defined $view->get_interpolation, 'get_interpolation() works');

ok(defined $view->get_show_cursor, 'get_show_cursor() works');

eval{$view->set_pixbuf('Hi mom!', TRUE)};
like($@, qr/type/, 'A TypeError is raised when set_pixbuf() is called with something that is not a pixbuf.');

$view->set_pixbuf(undef, TRUE);
ok(! $view->get_pixbuf, 'correctly cleared pixbuf');

ok(! $view->get_viewport, 'correctly cleared viewport');

ok(! $view->get_draw_rect, 'correctly cleared draw rectangle');

$view->size_allocate(Gtk2::Gdk::Rectangle->new(0, 0, 100, 100));
$view->set_pixbuf(Gtk2::Gdk::Pixbuf->new(GDK_COLORSPACE_RGB, FALSE, 8, 50, 50));
my $rect = $view->get_viewport;
ok(($rect->x == 0 and $rect->y == 0
    and $rect->width == 50 and $rect->height == 50),
    'Ensure that getting the viewport of the view works as expected.');

can_ok($view, qw(get_check_colors));

$rect = $view->get_draw_rect;
ok(($rect->x == 25 and $rect->y == 25
   and $rect->width == 50 and $rect->height == 50),
   'Ensure that getting the draw rectangle works as expected.');

$view->set_pixbuf(Gtk2::Gdk::Pixbuf->new(GDK_COLORSPACE_RGB, FALSE, 8, 200, 200));
$view->set_zoom(1);
$view->set_offset(0, 0);
$rect = $view->get_viewport;
ok(($rect->x == 0 and $rect->y == 0), 'Ensure that setting the offset works as expected.');

$view->set_offset(100, 100, TRUE);
$rect = $view->get_viewport;
ok(($rect->x == 100 and $rect->y == 100), 'Ensure that setting the offset works as expected.');

$view->set_transp('color', 0xff0000);
my ($col1, $col2) = $view->get_check_colors;
ok(($col1 == 0xff0000 and $col2 == 0xff0000), 'Ensure that setting the views transparency settings works as expected.');
$view->set_transp('grid');

ok(defined Glib::Type->list_values ('Gtk2::ImageView::Transp'), 'Check GtkImageTransp enum.');