1#!./perl 2use Test::More; 3 4plan( tests => 12 ); 5 6use strict; 7use warnings; 8use Hash::Util::FieldHash qw( :all); 9 10use vars qw{ @warnings }; 11 12BEGIN { 13 $SIG{'__WARN__'} = sub { push @warnings, @_ }; 14 $| = 1; 15} 16 17my $fail_odd = 'Odd number of elements in hash assignment at '; 18my $fail_odd_anon = 'Odd number of elements in anonymous hash at '; 19my $fail_ref = 'Reference found where even-sized list expected at '; 20my $fail_not_hr = 'Not a HASH reference at '; 21 22{ 23 @warnings = (); 24 fieldhash my %hash; 25 %hash = (1..3); 26 cmp_ok(scalar(@warnings),'==',1,'odd count'); 27 cmp_ok(substr($warnings[0],0,length($fail_odd)),'eq',$fail_odd,'odd msg'); 28 29 @warnings = (); 30 %hash = 1; 31 cmp_ok(scalar(@warnings),'==',1,'scalar count'); 32 cmp_ok(substr($warnings[0],0,length($fail_odd)),'eq',$fail_odd,'scalar msg'); 33 34 @warnings = (); 35 %hash = { 1..3 }; 36 cmp_ok(scalar(@warnings),'==',2,'odd hashref count'); 37 cmp_ok(substr($warnings[0],0,length($fail_odd_anon)),'eq',$fail_odd_anon,'odd hashref msg 1'); 38 cmp_ok(substr($warnings[1],0,length($fail_ref)),'eq',$fail_ref,'odd hashref msg 2'); 39 40 @warnings = (); 41 %hash = [ 1..3 ]; 42 cmp_ok(scalar(@warnings),'==',1,'arrayref count'); 43 cmp_ok(substr($warnings[0],0,length($fail_ref)),'eq',$fail_ref,'arrayref msg'); 44 45 @warnings = (); 46 %hash = sub { print "fenice" }; 47 cmp_ok(scalar(@warnings),'==',1,'coderef count'); 48 cmp_ok(substr($warnings[0],0,length($fail_odd)),'eq',$fail_odd,'coderef msg'); 49 50 @warnings = (); 51 $_ = { 1..10 }; 52 cmp_ok(scalar(@warnings),'==',0,'hashref assign'); 53 54} 55