Blame t/00_about_verbose.t

Packit 4513e9
Packit 4513e9
require 5;
Packit 4513e9
# Time-stamp: "2004-12-29 20:55:15 AST"
Packit 4513e9
# Summary of, well, things.
Packit 4513e9
Packit 4513e9
use Test;
Packit 4513e9
BEGIN {plan tests => 2};
Packit 4513e9
ok 1;
Packit 4513e9
Packit 4513e9
use HTML::Tagset ();
Packit 4513e9
Packit 4513e9
#chdir "t" if -e "t";
Packit 4513e9
Packit 4513e9
{
Packit 4513e9
  my @out;
Packit 4513e9
  push @out,
Packit 4513e9
    "\n\nPerl v",
Packit 4513e9
    defined($^V) ? sprintf('%vd', $^V) : $],
Packit 4513e9
    " under $^O ",
Packit 4513e9
    (defined(&Win32::BuildNumber) and defined &Win32::BuildNumber())
Packit 4513e9
      ? ("(Win32::BuildNumber ", &Win32::BuildNumber(), ")") : (),
Packit 4513e9
    (defined $MacPerl::Version)
Packit 4513e9
      ? ("(MacPerl version $MacPerl::Version)") : (),
Packit 4513e9
    "\n"
Packit 4513e9
  ;
Packit 4513e9
Packit 4513e9
  # Ugly code to walk the symbol tables:
Packit 4513e9
  my %v;
Packit 4513e9
  my @stack = ('');  # start out in %::
Packit 4513e9
  my $this;
Packit 4513e9
  my $count = 0;
Packit 4513e9
  my $pref;
Packit 4513e9
  while(@stack) {
Packit 4513e9
    $this = shift @stack;
Packit 4513e9
    die "Too many packages?" if ++$count > 1000;
Packit 4513e9
    next if exists $v{$this};
Packit 4513e9
    next if $this eq 'main'; # %main:: is %::
Packit 4513e9
Packit 4513e9
    #print "Peeking at $this => ${$this . '::VERSION'}\n";
Packit 4513e9
    
Packit 4513e9
    if(defined ${$this . '::VERSION'} ) {
Packit 4513e9
      $v{$this} = ${$this . '::VERSION'}
Packit 4513e9
    } elsif(
Packit 4513e9
       defined *{$this . '::ISA'} or defined &{$this . '::import'}
Packit 4513e9
       or ($this ne '' and grep defined *{$_}{'CODE'}, values %{$this . "::"})
Packit 4513e9
       # If it has an ISA, an import, or any subs...
Packit 4513e9
    ) {
Packit 4513e9
      # It's a class/module with no version.
Packit 4513e9
      $v{$this} = undef;
Packit 4513e9
    } else {
Packit 4513e9
      # It's probably an unpopulated package.
Packit 4513e9
      ## $v{$this} = '...';
Packit 4513e9
    }
Packit 4513e9
    
Packit 4513e9
    $pref = length($this) ? "$this\::" : '';
Packit 4513e9
    push @stack, map m/^(.+)::$/ ? "$pref$1" : (), keys %{$this . '::'};
Packit 4513e9
    #print "Stack: @stack\n";
Packit 4513e9
  }
Packit 4513e9
  push @out, " Modules in memory:\n";
Packit 4513e9
  delete @v{'', '[none]'};
Packit 4513e9
  foreach my $p (sort {lc($a) cmp lc($b)} keys %v) {
Packit 4513e9
    $indent = ' ' x (2 + ($p =~ tr/:/:/));
Packit 4513e9
    push @out,  '  ', $indent, $p, defined($v{$p}) ? " v$v{$p};\n" : ";\n";
Packit 4513e9
  }
Packit 4513e9
  push @out, sprintf "[at %s (local) / %s (GMT)]\n",
Packit 4513e9
    scalar(gmtime), scalar(localtime);
Packit 4513e9
  my $x = join '', @out;
Packit 4513e9
  $x =~ s/^/#/mg;
Packit 4513e9
  print $x;
Packit 4513e9
}
Packit 4513e9
Packit 4513e9
print "# Running",
Packit 4513e9
  (chr(65) eq 'A') ? " in an ASCII world.\n" : " in a non-ASCII world.\n",
Packit 4513e9
  "#\n",
Packit 4513e9
;
Packit 4513e9
Packit 4513e9
print "# \@INC:\n", map("#   [$_]\n", @INC), "#\n#\n";
Packit 4513e9
Packit 4513e9
print "# \%INC:\n";
Packit 4513e9
foreach my $x (sort {lc($a) cmp lc($b)} keys %INC) {
Packit 4513e9
  print "#   [$x] = [", $INC{$x} || '', "]\n";
Packit 4513e9
}
Packit 4513e9
Packit 4513e9
ok 1;
Packit 4513e9