File: 42-threads-global.t

package info (click to toggle)
libindirect-perl 0.39-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 440 kB
  • sloc: perl: 3,166; ansic: 1,359; makefile: 8
file content (43 lines) | stat: -rw-r--r-- 892 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!perl

use strict;
use warnings;

use lib 't/lib';
use VPIT::TestHelpers threads => [ 'indirect' => 'indirect::I_THREADSAFE()' ];

use Test::Leaner;

sub expect {
 my ($pkg) = @_;
 qr/^Indirect call of method "new" on object "$pkg" at \(eval \d+\) line \d+/;
}

my $error;

no indirect 'global', 'hook' => sub { $error = indirect::msg(@_) };

sub try {
 my $tid = threads->tid();

 for my $run (1 .. 2) {
  my $desc  = "global indirect hook (thread $tid, run $run)";
  my $class = "Mango$tid";
  my @warns;
  {
   local $SIG{__WARN__} = sub { push @warns, @_ };
   eval "return; my \$x = new $class 1, 2;"
  }
  is        $@,      '',             "$desc: did not croak";
  is_deeply \@warns, [ ],            "$desc: no warnings";
  like      $error,  expect($class), "$desc: correct error";
 }
}

my @threads = map spawn(\&try), 1 .. 10;

$_->join for @threads;

pass 'done';

done_testing;