This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
(perl #129125) copy form data if it might be freed
[perl5.git] / t / op / defins.t
old mode 100755 (executable)
new mode 100644 (file)
index 06d48b6..fb746d5
 
 BEGIN {
     chdir 't' if -d 't';
-    @INC = '../lib';
+    require './test.pl';
+    set_up_inc( qw(. ../lib) );
     $SIG{__WARN__} = sub { $warns++; warn $_[0] };
-    print "1..14\n";
 }
 
-$wanted_filename = $^O eq 'VMS' ? '0.' : '0';
-$saved_filename = $^O eq 'MacOS' ? ':0' : './0';
-    
-print "not " if $warns;
-print "ok 1\n";
+plan( tests => 27 );
+
+my $unix_mode = 1;
+
+if ($^O eq 'VMS') {
+    # We have to know if VMS is in UNIX mode.  In UNIX mode, trailing dots
+    # should not be present.  There are actually two settings that control this.
+
+    $unix_mode = 0;
+    my $unix_rpt = 0;
+    my $drop_dot = 0;
+    if (eval 'require VMS::Feature') {
+        $unix_rpt = VMS::Feature::current('filename_unix_report');
+        $drop_dot = VMS::Feature::current('readdir_dropdotnotype');
+    } else {
+        my $unix_report = $ENV{'DECC$FILENAME_UNIX_REPORT'} || '';
+        $unix_rpt = $unix_report =~ /^[ET1]/i; 
+        my $drop_dot_notype = $ENV{'DECC$READDIR_DROPDOTNOTYPE'} || '';
+        $drop_dot = $drop_dot_notype =~ /^[ET1]/i;
+    }
+    $unix_mode = 1 if $drop_dot && unix_rpt;
+}
+
+# $wanted_filename should be 0 for readdir() and glob() tests.
+# This is because it is the only valid filename that is false in a boolean test.
+
+# $filename = '0';
+# print "hi\n" if $filename; # doesn't print
+
+# In the case of VMS, '0' isn't always the filename that you get.
+# Which makes those particular tests pointless.
+
+$wanted_filename = $unix_mode ? '0' : '0.';
+$saved_filename = './0';
+
+cmp_ok($warns,'==',0,'no warns at start');
 
-open(FILE,">$saved_filename");
+ok(open(FILE,">$saved_filename"),'created work file');
+print FILE "0\n";
 print FILE "1\n";
-print FILE "0";
 close(FILE);
 
 open(FILE,"<$saved_filename");
+ok(defined(FILE),'opened work file');
 my $seen = 0;
 my $dummy;
 while (my $name = <FILE>)
  {
+  chomp($name);
   $seen++ if $name eq '0';
- }            
-print "not " unless $seen;
-print "ok 2\n";
+ }
+cmp_ok($seen,'==',1,'seen in while()');
 
 seek(FILE,0,0);
 $seen = 0;
 my $line = '';
-do 
+do
  {
+  chomp($line);
   $seen++ if $line eq '0';
  } while ($line = <FILE>);
-
-print "not " unless $seen;
-print "ok 3\n";
-
+cmp_ok($seen,'==',1,'seen in do/while');
 
 seek(FILE,0,0);
-$seen = 0;    
-while (($seen ? $dummy : $name) = <FILE>)
+$seen = 0;
+while (($seen ? $dummy : $name) = <FILE> )
  {
+  chomp($name);
   $seen++ if $name eq '0';
  }
-print "not " unless $seen;
-print "ok 4\n";
+cmp_ok($seen,'==',2,'seen in while() ternary');
 
 seek(FILE,0,0);
-$seen = 0;    
-my %where;    
+$seen = 0;
+my %where;
 while ($where{$seen} = <FILE>)
  {
+  chomp($where{$seen});
   $seen++ if $where{$seen} eq '0';
  }
-print "not " unless $seen;
-print "ok 5\n";
+cmp_ok($seen,'==',1,'seen in hash while()');
 close FILE;
 
-opendir(DIR,($^O eq 'MacOS' ? ':' : '.'));
+opendir(DIR,'.');
+ok(defined(DIR),'opened current directory');
 $seen = 0;
 while (my $name = readdir(DIR))
  {
   $seen++ if $name eq $wanted_filename;
- }            
-print "not " unless $seen;
-print "ok 6\n";
+ }
+cmp_ok($seen,'==',1,'saw work file once');
 
 rewinddir(DIR);
-$seen = 0;    
+$seen = 0;
 $dummy = '';
 while (($seen ? $dummy : $name) = readdir(DIR))
  {
   $seen++ if $name eq $wanted_filename;
  }
-print "not " unless $seen;
-print "ok 7\n";
+cmp_ok($seen,'>',0,'saw file in while() ternary');
 
 rewinddir(DIR);
-$seen = 0;    
+$seen = 0;
 while ($where{$seen} = readdir(DIR))
  {
   $seen++ if $where{$seen} eq $wanted_filename;
  }
-print "not " unless $seen;
-print "ok 8\n";
+cmp_ok($seen,'==',1,'saw file in hash while()');
+
+rewinddir(DIR);
+$seen = 0;
+$_ = 'not 0';
+while (readdir(DIR))
+ {
+  $seen++ if $_ eq $wanted_filename;
+ }
+cmp_ok($seen,'==',1,'saw file in bare while(readdir){...}');
+
+rewinddir(DIR);
+$seen = 0;
+$_ = 'not 0';
+
+$_ eq $wanted_filename && $seen++ while readdir(DIR);
+cmp_ok($seen,'==',1,'saw file in bare "... while readdir"');
+
+rewinddir(DIR);
+$seen = 0;
+$_ = "";  # suppress uninit warning
+do
+ {
+  $seen++ if $_ eq $wanted_filename;
+ } while (readdir(DIR));
+cmp_ok($seen,'==',1,'saw file in bare do{...}while(readdir)');
 
 $seen = 0;
 while (my $name = glob('*'))
  {
   $seen++ if $name eq $wanted_filename;
- }            
-print "not " unless $seen;
-print "ok 9\n";
+ }
+cmp_ok($seen,'==',1,'saw file in glob while()');
 
-$seen = 0;    
+$seen = 0;
 $dummy = '';
 while (($seen ? $dummy : $name) = glob('*'))
  {
   $seen++ if $name eq $wanted_filename;
  }
-print "not " unless $seen;
-print "ok 10\n";
+cmp_ok($seen,'>',0,'saw file in glob hash while() ternary');
 
-$seen = 0;    
+$seen = 0;
 while ($where{$seen} = glob('*'))
  {
   $seen++ if $where{$seen} eq $wanted_filename;
  }
-print "not " unless $seen;
-print "ok 11\n";
+cmp_ok($seen,'==',1,'seen in glob hash while()');
 
 unlink($saved_filename);
+ok(!(-f $saved_filename),'work file unlinked');
 
 my %hash = (0 => 1, 1 => 2);
+my @array = 1;
+my $neg_sum= 0;
 
 $seen = 0;
+
 while (my $name = each %hash)
  {
+  $neg_sum = $name - $neg_sum;
   $seen++ if $name eq '0';
- }            
-print "not " unless $seen;
-print "ok 12\n";
+ }
+cmp_ok(abs($neg_sum),'==',1,'abs(neg_sum) should equal 1');
+cmp_ok($seen,'==',1,'seen in each');
 
-$seen = 0;    
+$seen = 0;
 $dummy = '';
 while (($seen ? $dummy : $name) = each %hash)
  {
   $seen++ if $name eq '0';
  }
-print "not " unless $seen;
-print "ok 13\n";
+cmp_ok($seen,'==',$neg_sum < 0 ? 1 : 2,'seen in each ternary');
 
-$seen = 0;    
+$seen = 0;
 while ($where{$seen} = each %hash)
  {
   $seen++ if $where{$seen} eq '0';
  }
-print "not " unless $seen;
-print "ok 14\n";
+cmp_ok($seen,'==',1,'seen in each hash');
+
+$seen = 0;
+undef $_;
+while (each %hash)
+ {
+  $seen++ if $_ eq '0';
+ }
+cmp_ok($seen,'==',1,'0 seen in $_ in while(each %hash)');
+
+$seen = 0;
+undef $_;
+while (each @array)
+ {
+  $seen++ if $_ eq '0';
+ }
+cmp_ok($seen,'==',1,'0 seen in $_ in while(each @array)');
+
+$seen = 0;
+undef $_;
+$_ eq '0' and $seen++ while each %hash;
+cmp_ok($seen,'==',1,'0 seen in $_ in while(each %hash) as stm mod');
+
+$seen = 0;
+undef $_;
+$_ eq '0' and $seen++ while each @array;
+cmp_ok($seen,'==',1,'0 seen in $_ in while(each @array) as stm mod');
 
+cmp_ok($warns,'==',0,'no warns at finish');