From: Tony Cook <tony@develop-help.com>
Date: Mon, 10 Jan 2011 10:31:37 +0000 (+1100)
Subject: improve test coverage of Imager::Fountain
X-Git-Tag: Imager-0.80~5
X-Git-Url: http://git.imager.perl.org/imager.git/commitdiff_plain/0ae3d9537aadd8fa95bf76a1bf71ad1bb3b87b76

improve test coverage of Imager::Fountain
---

diff --git a/MANIFEST b/MANIFEST
index 1471e16a..b8cf2d8e 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -364,6 +364,8 @@ testimg/comp4.bmp		Compressed 4-bit/pixel BMP
 testimg/comp8.bmp		Compressed 8-bit/pixel BMP
 testimg/filltest.ppm		Test for flood fills
 testimg/gimpgrad		A GIMP gradient file
+testimg/gradbad.ggr		A bad GIMP gradient file (bad seg count)
+testimg/gradbad2.ggr		A bad GIMP gradient file (bad segment)
 testimg/imager.pbm		Test bi-level
 testimg/junk.ppm
 testimg/longid.tga		Test TGA with a long id string
diff --git a/lib/Imager/Fountain.pm b/lib/Imager/Fountain.pm
index 10fd0d84..dec912fc 100644
--- a/lib/Imager/Fountain.pm
+++ b/lib/Imager/Fountain.pm
@@ -62,7 +62,7 @@ sub read {
     return $class->_load_gimp_gradient($fh, $opts{gimp}, $name_ref);
   }
   else {
-    warn "$class::read: Nothing to do!";
+    warn "${class}::read: Nothing to do!";
     return;
   }
 }
diff --git a/t/t61filters.t b/t/t61filters.t
index d3e53df6..2c1f16af 100644
--- a/t/t61filters.t
+++ b/t/t61filters.t
@@ -1,7 +1,7 @@
 #!perl -w
 use strict;
 use Imager qw(:handy);
-use Test::More tests => 91;
+use Test::More tests => 113;
 Imager::init_log("testout/t61filters.log", 1);
 use Imager::Test qw(is_image_similar test_image is_image is_color4 is_fcolor4);
 # meant for testing the filters themselves
@@ -139,6 +139,48 @@ test($imbase, { type=>'fountain', xa=>75, ya=>75, xb=>90, yb=>15,
                     segments=>$f3, super_sample=>'grid',
                     ftype=>'radial_square', combine=>'color' },
      'testout/t61_fount_gimp.ppm');
+{ # test new fountain with no parameters
+  my $warn = '';
+  local $SIG{__WARN__} = sub { $warn .= "@_" };
+  my $f4 = Imager::Fountain->read();
+  ok(!$f4, "read with no parameters does nothing");
+  like($warn, qr/Nothing to do!/, "check the warning");
+}
+{ # test with missing file
+  my $warn = '';
+  local $SIG{__WARN__} = sub { $warn .= "@_" };
+  my $f = Imager::Fountain->read(gimp => "no-such-file");
+  ok(!$f, "try to read a fountain defintion that doesn't exist");
+  is($warn, "", "should be no warning");
+  like(Imager->errstr, qr/^Cannot open no-such-file: /, "check message");
+}
+SKIP:
+{
+  my $fh = IO::File->new("testimg/gimpgrad", "r");
+  ok($fh, "opened gradient")
+    or skip "Couldn't open gradient: $!", 1;
+  my $f = Imager::Fountain->read(gimp => $fh);
+  ok($f, "read gradient from file handle");
+}
+{
+  # not a gradient
+  my $f = Imager::Fountain->read(gimp => "t/t61filters.t");
+  ok(!$f, "fail to read non-gradient");
+  is(Imager->errstr, "t/t61filters.t is not a GIMP gradient file",
+     "check error message");
+}
+{ # an invalid gradient file
+  my $f = Imager::Fountain->read(gimp => "testimg/gradbad.ggr");
+  ok(!$f, "fail to read bad gradient (bad seg count)");
+  is(Imager->errstr, "testimg/gradbad.ggr is missing the segment count",
+     "check error message");
+}
+{ # an invalid gradient file
+  my $f = Imager::Fountain->read(gimp => "testimg/gradbad2.ggr");
+  ok(!$f, "fail to read bad gradient (bad segment)");
+  is(Imager->errstr, "Bad segment definition",
+     "check error message");
+}
 test($imbase, { type=>'unsharpmask', stddev=>2.0 },
      'testout/t61_unsharp.ppm');
 test($imbase, {type=>'conv', coef=>[ -1, 3, -1, ], },
@@ -231,6 +273,40 @@ is($name, "test gradient", "check the name matches");
   cmp_ok($im->errstr, '=~', 'No color named', "check error message");
 }
 
+{
+  # test simple gradient creation
+  my @colors = map Imager::Color->new($_), qw/white blue red/;
+  my $s = Imager::Fountain->simple(positions => [ 0, 0.3, 1.0 ],
+				   colors => \@colors);
+  ok($s, "made simple gradient");
+  my $start = $s->[0];
+  is($start->[0], 0, "check start of first correct");
+  is_color4($start->[3], 255, 255, 255, 255, "check color at start");
+}
+{
+  # simple gradient error modes
+  {
+    my $warn = '';
+    local $SIG{__WARN__} = sub { $warn .= "@_" };
+    my $s = Imager::Fountain->simple();
+    ok(!$s, "no parameters to simple()");
+    like($warn, qr/Nothing to do/);
+  }
+  {
+    my $s = Imager::Fountain->simple(positions => [ 0, 1 ],
+				     colors => [ NC(0, 0, 0) ]);
+    ok(!$s, "mismatch of positions and colors fails");
+    is(Imager->errstr, "positions and colors must be the same size",
+       "check message");
+  }
+  {
+    my $s = Imager::Fountain->simple(positions => [ 0 ],
+				     colors => [ NC(0, 0, 0) ]);
+    ok(!$s, "not enough positions");
+    is(Imager->errstr, "not enough segments");
+  }
+}
+
 {
   my $im = Imager->new(xsize=>100, ysize=>100);
   # build the gradient the hard way - linear from black to white,
diff --git a/testimg/gradbad.ggr b/testimg/gradbad.ggr
new file mode 100644
index 00000000..876d6085
--- /dev/null
+++ b/testimg/gradbad.ggr
@@ -0,0 +1,3 @@
+GIMP Gradient
+xxx
+We fail to load this as a gradient
diff --git a/testimg/gradbad2.ggr b/testimg/gradbad2.ggr
new file mode 100644
index 00000000..d3339e80
--- /dev/null
+++ b/testimg/gradbad2.ggr
@@ -0,0 +1,4 @@
+GIMP Gradient
+1
+1 2 3 4 5 6 7 8 9 10
+Another invalid file