The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
BEGIN
  {
    $| = 1;
    $^W = 1;

    eval { require Test; };
    if ($@)
      {
        $^W=0;
	print "1..0 # skip no Test module\n";
	CORE::exit(0);
      }
    Test->import;
  }

use strict;
use Tk;
##
## Test all widget classes:  load module, create, pack, and
## destory an instance. Check in configure does not return
## an error so (some) ConfigSpecs errors are uncovered
##

use vars '@class';
use vars '@tk_pod_modules';

my $tests;
BEGIN 
  {
    @class =
      qw(
	More
	PodText
	PodSearch
	PodTree
	Pod
      );
    @tk_pod_modules = qw(Cache FindPods Search_db Search SimpleBridge Styles
			 Util WWWBrowser);

    $tests = 10*@class+@tk_pod_modules;
    plan test => $tests;

  };

$ENV{TKPODDEBUG} = 0;

if (!defined $ENV{BATCH}) {
    $ENV{BATCH} = 1;
}

my $mw;
eval {$mw = Tk::MainWindow->new();};
if (!Tk::Exists($mw))
  {
    for (1..$tests) 
      {
	skip("Cannot create MainWindow", 1, 1);
      }
    CORE::exit(0);
  }
$mw->geometry("+1+1"); # for twm

my $w;
foreach my $class (@class)
  {
    print "# Testing $class\n";
    undef($w);

    if ($class =~ m{^Pod(Text|Search|Tree)$})
      {
	my $module = "Tk::Pod::$1";
	# Tks autoload does not find it.
	eval qq{ require $module; };
	ok($@, "", "loading $module module");
      }
    else
      {
	eval "require Tk::$class;";
	ok($@, "", "Error loading Tk::$class");
      }

    eval { $w = $mw->$class(); };
    ok($@, "", "can't create $class widget");
    skip($@, Tk::Exists($w), 1, "$class instance does not exist");

    if (Tk::Exists($w))
      {
        if ($w->isa('Tk::Wm'))
          {
	    # KDE-beta4 wm with policies:
	    #     'interactive placement'
	    #		 okay with geometry and positionfrom
	    #     'manual placement'
	    #		geometry and positionfrom do not help
	    eval { $w->positionfrom('user'); };
            #eval { $w->geometry('+10+10'); };
	    ok ($@, "", 'Problem set postitionform to user');

            eval { $w->Popup; };
	    ok ($@, "", "Can't Popup a $class widget")
          }
        else
          {
	    ok(1); # dummy for above positionfrom test
            eval { $w->pack; };
	    ok ($@, "", "Can't pack a $class widget")
          }
        eval { $mw->update; };
        ok ($@, "", "Error during 'update' for $class widget");

	if (!$ENV{BATCH}) {
	    $mw->messageBox(-icon => "info", -message => "Showing '$class'", -type => "Continue");
	}
 
        eval { my @dummy = $w->configure; };
        ok ($@, "", "Error: configure list for $class");
        eval { $mw->update; };
        ok ($@, "", "Error: 'update' after configure for $class widget");
        eval { $w->destroy; };
        ok($@, "", "can't destroy $class widget");
        ok(!Tk::Exists($w), 1, "$class: widget not really destroyed");
      }
    else
      { 
        # Widget $class couldn't be created:
	#	Popup/pack, update, destroy skipped
	for (1..5) { skip (1,1,1, "skipped because widget could not be created"); }
      }
  }

print "# Require all modules\n";
for my $base (@tk_pod_modules) {
    eval "require Tk::Pod::$base";
    if ($@ && $base eq 'Search_db') {
	ok($@ =~ m{locate Text.*English}, 1, "Could not require Tk::Pod::$base: $@");
    } else {
	ok($@, "", "Could not require Tk::Pod::$base: $@");
    }
}

1;
__END__