The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use Gtk2::TestHelper
  tests => 23,
  at_least_version => [2, 10, 0, 'GtkPrintSettings: it is new in 2.10'];

# $Id$

use File::Temp qw(tempdir);
my $dir = tempdir(CLEANUP => 1);

my $settings = Gtk2::PrintSettings -> new();
isa_ok($settings, 'Gtk2::PrintSettings');

my $key = 'printer';
my $value = 'Bla DeskJet';

$settings -> set($key, $value);
is($settings -> get($key), $value);

ok($settings -> has_key($key));

$settings -> set($key, undef);
is($settings -> get($key), undef);

$settings -> unset($key);
is($settings -> get($key), undef);

my $i_know_you = 0;
my $callback = sub {
  my ($c_key, $c_value, $data) = @_;
  return if $i_know_you++;
  is($c_key, $key);
  is($c_value, $value);
  is($data, 'blub');
};

$settings -> set($key, $value);
$settings -> foreach($callback, 'blub');

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

  $settings -> set($key, $value);

  my $new_settings;
  my $file = "$dir/tmp.settings";

  eval {
    $settings -> to_file($file);
  };
  is($@, '');

  eval {
    $new_settings = Gtk2::PrintSettings -> new_from_file($file);
  };
  is($@, '');
  isa_ok($new_settings, 'Gtk2::PrintSettings');
  is($new_settings -> get($key), $value);

  my $key_file = Glib::KeyFile -> new();
  my $group = undef;
  $settings -> to_key_file($key_file, $group);
  open my $fh, '>', $file or skip 'key file tests', 3;
  print $fh $key_file -> to_data();
  close $fh;

  $key_file = Glib::KeyFile -> new();
  eval {
    $key_file -> load_from_file($file, 'none');
    $new_settings = Gtk2::PrintSettings -> new_from_key_file($key_file, $group);
  };
  is($@, '');
  isa_ok($new_settings, 'Gtk2::PrintSettings');
  is($new_settings -> get($key), $value);
}

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

  my $file = "$dir/tmp.settings2";

  my $settings = Gtk2::PrintSettings -> new();
  $settings -> set($key, $value);

  $settings -> to_file($file);

  my $key_file = Glib::KeyFile -> new();
  my $group = undef;
  $settings -> to_key_file($key_file, $group);

  my $copy = Gtk2::PrintSettings -> new();
  eval {
    $copy -> load_file($file);
  };
  is($@, '');
  is($copy -> get($key), $value);

  eval {
    $copy -> load_file('asdf');
  };
  ok(defined $@);

  $copy = Gtk2::PrintSettings -> new();
  eval {
    $copy -> load_key_file($key_file, $group);
  };
  is($@, '');
  is($copy -> get($key), $value);
}

SKIP: {
  skip 'new 2.16 stuff', 3
    unless Gtk2->CHECK_VERSION(2, 16, 0);

  my $settings = Gtk2::PrintSettings -> new();

  $settings -> set_printer_lpi(3.1416);
  delta_ok($settings -> get_printer_lpi(), 3.1416);

  $settings -> set_resolution_xy(10, 20);
  is($settings -> get_resolution_x(), 10);
  is($settings -> get_resolution_y(), 20);
}

__END__

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