#!perl -w use Test::More tests => 7; use File::Basename; use Cwd 'abs_path'; BEGIN { use_ok( 'Tempest' ); } SKIP: { # skip entire test file if Graphics::Magick module is not available eval { require Graphics::Magick }; skip "Graphics::Magick module not installed", 6 if $@; diag("Testing Graphics::Magick $Graphics::Magick::VERSION"); # remove output file if it exists if(-f dirname(__FILE__) . '/data/output_graphicsmagick.png') { unlink(dirname(__FILE__) . '/data/output_graphicsmagick.png'); } $instance = new Tempest( 'input_file' => dirname(__FILE__) . '/data/screenshot.png', 'output_file' => dirname(__FILE__) . '/data/output_graphicsmagick.png', 'coordinates' => [ [205,196], [208,205], [211,198], [218,205], [208,205], [208,205], [208,205], [388,201], [298,226], [369,231], [343,225], [345,14], [345,14], ], 'image_lib' => Tempest::LIB_GMAGICK, 'overlay' => 1 ); $result = $instance->render(); ok($result, 'Render method should return true'); ok(-f dirname(__FILE__) . '/data/output_graphicsmagick.png', 'Output file should exist'); SKIP: { $result = _compare(5, dirname(__FILE__) . '/data/output_graphicsmagick.png'); skip 'Compare utility not available', 4 if ! defined $result; like($result, qr/^0\s+/, 'Output image should resemble the image we expect'); my $a_test = new Tempest( 'input_file' => dirname(__FILE__) . '/data/screenshot.png', 'output_file' => dirname(__FILE__) . '/data/opacity_graphicsmagick_a.png', 'image_lib' => Tempest::LIB_GMAGICK, 'coordinates' => [ [100,100], [200,200], [200,200], [300,300], [300,300], [300,300], ], ); $a_test->render(); ok(-f dirname(__FILE__) . '/data/opacity_graphicsmagick_a.png', 'Output file for "a" test should exist'); my $b_test = new Tempest( 'input_file' => dirname(__FILE__) . '/data/screenshot.png', 'output_file' => dirname(__FILE__) . '/data/opacity_graphicsmagick_b.png', 'image_lib' => Tempest::LIB_GMAGICK, 'coordinates' => [ [100,100], [100,100], [200,200], [200,200], [200,200], [300,300], [300,300], [300,300], [300,300], ], ); $b_test->render(); ok(-f dirname(__FILE__) . '/data/opacity_graphicsmagick_b.png', 'Output file for "b" test should exist'); $result = _compare( 20, dirname(__FILE__) . '/data/opacity_graphicsmagick_a.png', dirname(__FILE__) . '/data/opacity_graphicsmagick_b.png', ); skip 'Compare utility not available', 1 if ! defined $result; like($result, qr/^0\s+/, 'Output images should be mostly identical'); } } sub _compare { my $fuzz = shift; my $compare = shift; my $baseline = shift; if(!$baseline) { $baseline = dirname(__FILE__) . '/data/compare.png'; } my $output = `compare -version 2>&1`; if(!defined($output) || $output !~ m/Version\:\s*ImageMagick/) { return; } diag("Compare Utility " . (split("\n", $output))[0] ); # ensure diff file exists first my $diff_file = dirname(__FILE__) . '/data/diff.png'; if(!-f $diff_file) { open(my $TOUCH, '>', $diff_file); close($TOUCH); } $output = `compare -help 2>&1`; my $threshold = ''; if($output =~ m/-dissimilarity-threshold/) { $threshold = '-dissimilarity-threshold 16384'; } $output = 'compare ' . $threshold . ' -metric ae -fuzz ' . $fuzz . '% ' . abs_path($compare) . ' ' . abs_path($baseline) . ' ' . abs_path(dirname(__FILE__) . '/data/diff.png') . ' 2>&1'; return `$output`; }