123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- # Before "make install", this script should be runnable with "make test".
- # After "make install" it should work as "perl t/ExifTool.t".
- BEGIN { $| = 1; print "1..30\n"; $Image::ExifTool::noConfig = 1; }
- END {print "not ok 1\n" unless $loaded;}
- # test 1: Load the module(s)
- use Image::ExifTool 'ImageInfo';
- $loaded = 1;
- print "ok 1\n";
- use t::TestLib;
- my $testname = 'ExifTool';
- my $testnum = 1;
- # test 2: extract information from JPG file using name
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 3: TIFF file using file reference and ExifTool object with options
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Duplicates => 1, Unknown => 1);
- open(TESTFILE, 't/images/ExifTool.tif');
- my $info = $exifTool->ImageInfo(\*TESTFILE);
- close(TESTFILE);
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 4: test the Group option to extract EXIF info only
- {
- ++$testnum;
- my $info = ImageInfo('t/images/Canon.jpg', {Group0 => 'EXIF'});
- print 'not ' unless check($info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 5: extract specified tags only
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- # don't test DateFormat because strftime output varies with locale
- # $exifTool->Options(DateFormat => '%H:%M:%S %a. %b. %e, %Y');
- my @tags = ('CreateDate', 'DateTimeOriginal', 'ModifyDate', 'Orientation#', '?Resolution');
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg', \@tags);
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 6: test the 5 different ways to exclude tags...
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Exclude => 'ImageWidth');
- my @tagList = ( '-ImageHeight', '-Make' );
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg', '-FileSize', '-*resolution',
- \@tagList, {Group0 => '-MakerNotes'});
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # tests 7/8: test ExtractInfo(), GetInfo(), CombineInfo()
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Duplicates => 0); # don't allow duplicates
- $exifTool->ExtractInfo('t/images/Canon.jpg');
- my $info1 = $exifTool->GetInfo({Group0 => 'MakerNotes'});
- my $info2 = $exifTool->GetInfo({Group0 => 'EXIF'});
- my $info = $exifTool->CombineInfo($info1, $info2);
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- # combine information in different order
- ++$testnum;
- $info = $exifTool->CombineInfo($info2, $info1);
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 9: test group options across different families
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg',
- { Group1 => 'Canon', Group2 => '-Camera' });
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # tests 10/11: test ExtractInfo() and GetInfo()
- # (uses output from test 5 for comparison)
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- # don't test DateFormat because strftime output is system dependent
- # $exifTool->Options(DateFormat => '%H:%M:%S %a. %b. %e, %Y');
- $exifTool->ExtractInfo('t/images/Canon.jpg');
- my @tags = ('createdate', 'datetimeoriginal', 'modifydate', 'orientation#', '?resolution');
- my $info = $exifTool->GetInfo(\@tags);
- my $good = 1;
- my @expectedTags = ('CreateDate', 'DateTimeOriginal', 'ModifyDate', 'Orientation',
- 'XResolution', 'YResolution');
- for (my $i=0; $i<scalar(@tags); ++$i) {
- $tags[$i] = $expectedTags[$i] or $good = 0;
- }
- print 'not ' unless $good;
- print "ok $testnum\n";
- ++$testnum;
- print 'not ' unless check($exifTool, $info, $testname, $testnum, 5);
- print "ok $testnum\n";
- }
- # tests 12/13: check precidence of tags extracted from groups
- # (Note: these tests should produce the same output as 7/8,
- # so the .out files from tests 7/8 are used)
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Duplicates => 0); # don't allow duplicates
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg',{Group0=>['MakerNotes','EXIF']});
- print 'not ' unless check($exifTool, $info, $testname, $testnum, 7);
- print "ok $testnum\n";
- # combine information in different order
- ++$testnum;
- $info = $exifTool->ImageInfo('t/images/Canon.jpg',{Group0=>['EXIF','MakerNotes']});
- print 'not ' unless check($exifTool, $info, $testname, $testnum, 8);
- print "ok $testnum\n";
- }
- # tests 14/15/16: test GetGroups()
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->ExtractInfo('t/images/Canon.jpg');
- my @groups = $exifTool->GetGroups(2);
- my $not;
- foreach ('Camera','ExifTool','Image','Time') {
- $_ eq shift @groups or $not = 1;
- }
- @groups and $not = 1;
- print 'not ' if $not;
- print "ok $testnum\n";
-
- ++$testnum;
- my $info = $exifTool->GetInfo({Group0 => 'EXIF'});
- @groups = $exifTool->GetGroups($info,0);
- print 'not ' unless @groups==1 and $groups[0] eq 'EXIF';
- print "ok $testnum\n";
- ++$testnum;
- my $testfile = "t/ExifTool_$testnum";
- open(TESTFILE,">$testfile.failed");
- my $oldSep = $/;
- $/ = "\x0a"; # set input line separator
- $exifTool->ExtractInfo('t/images/Canon.jpg');
- my $family = '1:2';
- @groups = $exifTool->GetGroups($family);
- my $group;
- foreach $group (@groups) {
- next if $group eq 'ExifTool';
- print TESTFILE "---- $group ----\n";
- my $info = $exifTool->GetInfo({"Group$family" => $group});
- foreach (sort $exifTool->GetTagList($info)) {
- print TESTFILE "$_ : $$info{$_}\n";
- }
- }
- $/ = $oldSep; # restore input line separator
- close(TESTFILE);
- print 'not ' unless testCompare("$testfile.out","$testfile.failed",$testnum);
- print "ok $testnum\n";
- }
- # test 17: Test verbose output
- {
- ++$testnum;
- print 'not ' unless testVerbose($testname, $testnum, 't/images/Canon.jpg', 3);
- print "ok $testnum\n";
- }
- # tests 18/19: Test Group# option with multiple groups and no duplicates
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Duplicates => 0); # don't allow duplicates
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg',
- { Group0 => ['MakerNotes','EXIF'] });
- print 'not ' unless check($exifTool, $info, $testname, $testnum, 7);
- print "ok $testnum\n";
- ++$testnum;
- $info = $exifTool->ImageInfo('t/images/Canon.jpg',
- { Group0 => ['EXIF','MakerNotes'] });
- print 'not ' unless check($exifTool, $info, $testname, $testnum, 8);
- print "ok $testnum\n";
- }
- # test 20: Test extracting a single, non-priority tag with duplicates set to 0
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Duplicates => 0);
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg', 'EXIF:WhiteBalance');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 21: Test extracting ICC_Profile as a block
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/ExifTool.tif', 'ICC_Profile');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 22: Test InsertTagValues
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my @foundTags;
- $exifTool->ImageInfo('t/images/ExifTool.jpg', \@foundTags);
- my $str = $exifTool->InsertTagValues(\@foundTags, '$ifd0:model - $1ciff:3main:model');
- my $testfile = "t/ExifTool_$testnum";
- open(TESTFILE,">$testfile.failed");
- my $oldSep = $/;
- $/ = "\x0a"; # set input line separator
- print TESTFILE $str, "\n";
- $/ = $oldSep; # restore input line separator
- close(TESTFILE);
- print 'not ' unless testCompare("$testfile.out","$testfile.failed",$testnum);
- print "ok $testnum\n";
- }
- # test 23: Test the multi-group feature in a tag name
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'main:Author:IPTC3:all');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 24: Test a shortcut with multiple group names and a ValueConv suffix
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg', 'exififd:camera:common#');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 25: Test GlobalTimeShift option
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(GlobalTimeShift => '-0:1:0 0:0:0');
- # Note: can't extract system times because this could result in a different
- # calculated global time offset (since I am shifting by 1 month)
- my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'time:all', '-system:all');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 26: Test reading with wildcards
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/Canon.jpg', 'E*');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 27: Test ListItem option
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(ListItem => -3);
- my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', 'Subject', 'SupplementalCategories');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 28: Test FastScan = 3
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(FastScan => 3);
- my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 29: Test Filter
- {
- ++$testnum;
- my $exifTool = new Image::ExifTool;
- $exifTool->Options(Filter => 'tr/ /_/;tr/0-9/#/');
- my $info = $exifTool->ImageInfo('t/images/ExifTool.jpg', '-ExifToolVersion');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- print "ok $testnum\n";
- }
- # test 30: Calculate JPEGDigest and JPEGQualityEstimate
- {
- ++$testnum;
- my $skip = '';
- if (eval 'require Digest::MD5') {
- my $exifTool = new Image::ExifTool;
- my $info = $exifTool->ImageInfo('t/images/Writer.jpg', 'JPEGDigest', 'JPEGQualityEstimate');
- print 'not ' unless check($exifTool, $info, $testname, $testnum);
- } else {
- $skip = ' # skip Requires Digest::MD5';
- }
- print "ok $testnum$skip\n";
- }
- # end
|