The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
BEGIN {				# Magic Perl CORE pragma
    if ($ENV{PERL_CORE}) {
        chdir 't' if -d 't';
        @INC = '../lib';
    }
}

use strict;
use warnings;
use Test::More tests => 8;

BEGIN { use_ok('threads') }
BEGIN { use_ok('Thread::Queue::Monitored') }

my $times = 1000;
my $file = 'outmonitored';
my $handle;
my $object : shared;

my ($q,$t) = Thread::Queue::Monitored->new(
 {
  pre => sub {
              open( $handle,">$_[0]" ) or die "Cannot create file $_[0]: $!";
	      $object = ref(Thread::Queue::Monitored->self);
	     },
  monitor => sub { print $handle $_[0] },
  post => sub { close( $handle ); return 'done' },
 },
 $file
);

isa_ok( $q, 'Thread::Queue::Monitored', 'check queue object type' );
isa_ok( $t, 'threads',		'check thread object type' );

$q->enqueue( $_ ) foreach 1..$times;
my $pending = $q->pending;
ok( ($pending >= 0 and $pending <= $times), 'check number of values on queue' );

$q->enqueue( undef ); # stop monitoring
is( $t->join,'done',			'check result of join()' );

is( $object,'Thread::Queue::Monitored',	'check result of ->self' );

my $check = '';
$check .= $_ foreach 1..$times;
open( my $in,"<$file" ) or die "Could not open file $!";
is( join('',<$in>), $check,		'check whether monitoring ok' );
close( $in );

1 while unlink $file; # multiversioned filesystems