17_misc_meth.t revision 1.1.1.2
1#!/usr/bin/perl 2# 3# Check miscellaneous tied-array interface methods 4# EXTEND, CLEAR, DELETE, EXISTS 5# 6 7use strict; 8use warnings; 9 10 11my $file = "tf17-$$.txt"; 12$: = Tie::File::_default_recsep(); 131 while unlink $file; 14 15print "1..35\n"; 16 17my $N = 1; 18use Tie::File; 19print "ok $N\n"; $N++; 20 21my @a; 22my $o = tie @a, 'Tie::File', $file, autodefer => 0; 23print $o ? "ok $N\n" : "not ok $N\n"; 24$N++; 25 26# (3-8) EXTEND 27$o->EXTEND(3); 28check_contents("$:$:$:"); 29$o->EXTEND(4); 30check_contents("$:$:$:$:"); 31$o->EXTEND(3); 32check_contents("$:$:$:$:"); 33 34# (9-10) CLEAR 35@a = (); 36check_contents(""); 37 38# (11-20) EXISTS 39if ($] >= 5.006) { 40 eval << 'TESTS'; 41print !exists $a[0] ? "ok $N\n" : "not ok $N\n"; 42$N++; 43$a[0] = "I like pie."; 44print exists $a[0] ? "ok $N\n" : "not ok $N\n"; 45$N++; 46print !exists $a[1] ? "ok $N\n" : "not ok $N\n"; 47$N++; 48$a[2] = "GIVE ME PIE"; 49print exists $a[0] ? "ok $N\n" : "not ok $N\n"; 50$N++; 51# exists $a[1] is not defined by this module under these circumstances 52print exists $a[1] ? "ok $N\n" : "ok $N\n"; 53$N++; 54print exists $a[2] ? "ok $N\n" : "not ok $N\n"; 55$N++; 56print exists $a[-1] ? "ok $N\n" : "not ok $N\n"; 57$N++; 58print exists $a[-2] ? "ok $N\n" : "not ok $N\n"; 59$N++; 60print exists $a[-3] ? "ok $N\n" : "not ok $N\n"; 61$N++; 62print !exists $a[-4] ? "ok $N\n" : "not ok $N\n"; 63$N++; 64TESTS 65 } else { # perl 5.005 doesn't have exists $array[1] 66 for (11..20) { 67 print "ok $_ \# skipped (no exists for arrays)\n"; 68 $N++; 69 } 70 } 71 72my $del; 73 74# (21-35) DELETE 75if ($] >= 5.006) { 76 eval << 'TESTS'; 77$del = delete $a[0]; 78check_contents("$:$:GIVE ME PIE$:"); 79# 20020317 Through 0.20, the 'delete' function returned the wrong values. 80expect($del, "I like pie."); 81$del = delete $a[2]; 82check_contents("$:$:"); 83expect($del, "GIVE ME PIE"); 84$del = delete $a[0]; 85check_contents("$:$:"); 86expect($del, ""); 87$del = delete $a[1]; 88check_contents("$:"); 89expect($del, ""); 90 91# 20020317 Through 0.20, we had a bug where deleting an element past the 92# end of the array would actually extend the array to that length. 93$del = delete $a[4]; 94check_contents("$:"); 95expect($del, undef); 96 97 98 99TESTS 100 } else { # perl 5.005 doesn't have delete $array[1] 101 for (21..35) { 102 print "ok $_ \# skipped (no delete for arrays)\n"; 103 $N++; 104 } 105 } 106 107use POSIX 'SEEK_SET'; 108sub check_contents { 109 my $x = shift; 110 local *FH = $o->{fh}; 111 seek FH, 0, SEEK_SET; 112 my $a; 113 { local $/; $a = <FH> } 114 $a = "" unless defined $a; 115 if ($a eq $x) { 116 print "ok $N\n"; 117 } else { 118 ctrlfix(my $msg = "# expected <$x>, got <$a>"); 119 print "not ok $N # $msg\n"; 120 } 121 $N++; 122 print $o->_check_integrity($file, $ENV{INTEGRITY}) ? "ok $N\n" : "not ok $N\n"; 123 $N++; 124} 125 126sub expect { 127 if (@_ == 1) { 128 print $_[0] ? "ok $N\n" : "not ok $N\n"; 129 } elsif (@_ == 2) { 130 my ($a, $x) = @_; 131 if (! defined($a) && ! defined($x)) { print "ok $N\n" } 132 elsif ( defined($a) && ! defined($x)) { 133 ctrlfix(my $msg = "expected UNDEF, got <$a>"); 134 print "not ok $N \# $msg\n"; 135 } 136 elsif (! defined($a) && defined($x)) { 137 ctrlfix(my $msg = "expected <$x>, got UNDEF"); 138 print "not ok $N \# $msg\n"; 139 } elsif ($a eq $x) { print "ok $N\n" } 140 else { 141 ctrlfix(my $msg = "expected <$x>, got <$a>"); 142 print "not ok $N \# $msg\n"; 143 } 144 } else { 145 die "expect() got ", scalar(@_), " args, should have been 1 or 2"; 146 } 147 $N++; 148} 149 150sub ctrlfix { 151 for (@_) { 152 s/\n/\\n/g; 153 s/\r/\\r/g; 154 } 155} 156 157END { 158 undef $o; 159 untie @a; 160 1 while unlink $file; 161} 162 163 164