File: builtin.t

package info (click to toggle)
libdevel-confess-perl 0.009003-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 212 kB
  • ctags: 57
  • sloc: perl: 985; makefile: 2
file content (51 lines) | stat: -rw-r--r-- 1,229 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
44
45
46
47
48
49
50
51
use strict;
use warnings;
use Test::More;
use lib 't/lib';
use Capture
  'capture',
  capture_builtin => ['-MDevel::Confess::Builtin'],
;
use Devel::Confess::Builtin ();

my @class = (
  'Exception::Class' => {
    declare => 'use Exception::Class qw(MyException);',
    throw   => 'MyException->throw("nope");',
  },
  'Ouch' => {
    throw   => 'Ouch::ouch(100, "nope");',
  },
  'Class::Throwable' => {
    throw   => 'Class::Throwable->throw("nope");',
  },
  'Exception::Base' => {
    declare => 'use Exception::Base qw(MyException);',
    throw   => 'MyException->throw("nope");',
  },
);

plan tests => scalar @class;

while (@class) {
  my ($class, $info) = splice @class, 0, 2;
  (my $module = "$class.pm") =~ s{::}{/}g;
  require $module;
  my $declare = $info->{declare} || "use $class;";
  my $code = <<END;
$declare

package PackageA;
sub f {
$info->{throw}
}
package PackageB;
sub g {
PackageA::f();
}
END
  my $before = capture_builtin $code.'PackageB::g();';
  my $after = capture $code.'require Devel::Confess::Builtin;Devel::Confess::Builtin->import(); PackageB::g();';
  like $before, qr/PackageB::g/, "verbose when loaded before $class";
  like $after, qr/PackageB::g/, "verbose when loaded after $class";
}