#!/usr/bin/perl # # Test Email::Fingerprint's "smart" read method. use strict; use warnings; use Email::Fingerprint; use Test::More; use Test::Exception; my $fp; my $file = "t/data/1.txt"; my $checksum = 35445; my $options = { checksum => 'unpack', strict_checking => 1, }; # # Now read the same message every way imaginable. # open FILE, "<", $file; my @array = ; my $string = join "", @array; close FILE; # As a string $fp = new Email::Fingerprint($options); $fp->read($string); ok $fp->checksum eq $checksum, "Scalar input"; # As an array $fp = new Email::Fingerprint($options); $fp->read(\@array); ok $fp->checksum eq $checksum, "Arrayref input"; # As a glob open FILE, "<", $file; $fp = new Email::Fingerprint($options); $fp->read(\*FILE); ok $fp->checksum eq $checksum, "Glob input"; close FILE; # Any other reference, except an object, is forbidden. $fp = new Email::Fingerprint($options); dies_ok { $fp->read( {} ) } "Can't read a hashref"; dies_ok { $fp->read( sub {} ) } "Can't read a CODE ref"; # An object is ALSO useless, if it doesn't offer any suitable methods. my $object; $object = bless \$object, "Impotent::Class"; dies_ok { $fp->read( $object ) } "Can't read impotent objects"; # A simple object with stringification { package MyString; use overload qw{""} => sub { my $self = shift; return $self->{string}; }; package main; my $string = bless { string => $string }, "MyString"; $fp = new Email::Fingerprint($options); $fp->read($string); ok $fp->checksum eq $checksum, "Stringifiable object input"; } # A simple object with iteration SKIP: { eval "use FileHandle"; skip "Skipping: FileHandle module not installed", 1 if $@; my $fh = new FileHandle; $fh->open($file, "<"); $fp = new Email::Fingerprint($options); $fp->read($fh); ok $fp->checksum eq $checksum, "Iteratable object input"; } # That's all, folks! done_testing();