The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
#
# $Id$
#

use Gtk2::TestHelper
	at_least_version => [2, 4, 0, 'GtkIconTheme is new in 2.4'],
	tests => 17;

my $icon_theme = Gtk2::IconTheme->new;
isa_ok ($icon_theme, 'Gtk2::IconTheme');

$icon_theme = Gtk2::IconTheme->get_default;
isa_ok ($icon_theme, 'Gtk2::IconTheme');

$icon_theme = Gtk2::IconTheme->get_for_screen (Gtk2::Gdk::Screen->get_default);
isa_ok ($icon_theme, 'Gtk2::IconTheme');

$icon_theme->set_screen (Gtk2::Gdk::Screen->get_default);

my @icons = $icon_theme->list_icons (undef);
# @icons can be anything, even empty

ok (!$icon_theme->has_icon ('something crazy'));

my $icon_info = $icon_theme->lookup_icon ('stock_edit', 24, 'use-builtin');

SKIP: {
	skip 'lookup_icon returned undef, skipping the rest', 5
		unless defined $icon_info;

	isa_ok ($icon_info, 'Gtk2::IconInfo');

	my $pixbuf = $icon_theme->load_icon ('stock_edit', 24, 'use-builtin');
	isa_ok ($pixbuf, 'Gtk2::Gdk::Pixbuf');

	isa_ok ($icon_info->load_icon, 'Gtk2::Gdk::Pixbuf');

	ok (defined $icon_info->get_base_size);
	like ($icon_info->get_filename, qr/stock_edit/);

	# FIXME:
	# isa_ok ($icon_info->get_builtin_pixbuf, 'Gtk2::Gdk::Pixbuf');
	# isa_ok($icon_info->get_embedded_rect, 'Gtk2::Gdk::Rectangle');
	# warn $icon_info->get_attach_points;
	# warn $icon_info->get_display_name;

	$icon_info->set_raw_coordinates (1);

	$icon_theme->add_builtin_icon ('stock_edit', 24, $pixbuf);
}

SKIP: {
	skip 'new 2.6 stuff', 1
		unless Gtk2->CHECK_VERSION (2, 6, 0);

	my @sizes = $icon_theme->get_icon_sizes ('stock_edit');

	skip 'get_icon_sizes returned empty, can not test them', 1
		unless (@sizes);

	# -1 means scalable
	like ($sizes[0], qr/^(?:-1|\d+)$/);
}

SKIP: {
	skip 'new 2.12 stuff', 1
		unless Gtk2->CHECK_VERSION (2, 12, 0);

	my @contexts = $icon_theme->list_contexts;
	# @contexts might be undef and can contain anything

	my $info = $icon_theme->choose_icon (['gtk-bla', 'gtk-cancel'], 24, 'use-builtin');
	isa_ok ($info, 'Gtk2::IconInfo');
}

my @paths = qw(/tmp /etc /home);
$icon_theme->set_search_path (@paths);

is_deeply ([$icon_theme->get_search_path], \@paths);

$icon_theme->append_search_path ('/usr/local/tmp');
push @paths, '/usr/local/tmp';
is_deeply ([$icon_theme->get_search_path], \@paths);

$icon_theme->prepend_search_path ('/usr/tmp');
unshift @paths, '/usr/tmp';
is_deeply ([$icon_theme->get_search_path], \@paths);

# cannot call set_custom_theme on a default theme
$icon_theme = Gtk2::IconTheme->new;
$icon_theme->set_custom_theme ('crazy custom theme');
$icon_theme->set_custom_theme (undef);

# Ignore result.  Might be anything, including undef.
$icon_theme->get_example_icon_name;

ok (!$icon_theme->rescan_if_needed);

SKIP: {
  skip 'new 2.14 stuff', 2
    unless Gtk2->CHECK_VERSION(2, 14, 0);

  skip 'unable to find the stock_edit icon', 2
    unless defined $icon_theme->lookup_icon ('stock_edit', 24, 'use-builtin');

  my $pixbuf = $icon_theme->load_icon ('stock_edit', 24, 'use-builtin');
  isa_ok (Gtk2::IconInfo->new_for_pixbuf ($icon_theme, $pixbuf),
          'Gtk2::IconInfo');
  like ($icon_info->get_filename (), qr/stock_edit/);;
}

__END__

Copyright (C) 2003-2005 by the gtk2-perl team (see the file AUTHORS for the
full list).  See LICENSE for more information.