File: 06rolebasic.t

package info (click to toggle)
librole-hooks-perl 0.008-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 244 kB
  • sloc: perl: 696; makefile: 2
file content (83 lines) | stat: -rw-r--r-- 1,348 bytes parent folder | download
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use strict;
use warnings;
use Test::More;

{ package Local::Dummy1; use Test::Requires 'Role::Basic';  };
{ package Local::Dummy2; use Test::Requires 'Class::Tiny'; };

use Role::Hooks;

my %xxx;

{
	package Local::Role1;
	use Role::Basic;
	
	Role::Hooks->before_apply(__PACKAGE__, sub {
		push @{ $xxx{+__PACKAGE__}||=[] }, [before_apply => @_];
	});
	
	Role::Hooks->after_apply(__PACKAGE__, sub {
		push @{ $xxx{+__PACKAGE__}||=[] }, [after_apply => @_];
	});
}

{
	package Local::Role2;
	use Role::Basic;
	with 'Local::Role1';
	
	Role::Hooks->before_apply(__PACKAGE__, sub {
		push @{ $xxx{+__PACKAGE__}||=[] }, [before_apply => @_];
	});
	
	Role::Hooks->after_apply(__PACKAGE__, sub {
		push @{ $xxx{+__PACKAGE__}||=[] }, [after_apply => @_];
	});
}

{
	package Local::Class1;
	use Class::Tiny;
	use Role::Basic 'with';
	with 'Local::Role2';
}

is_deeply(\%xxx, {
	'Local::Role1' => [
		[
			'before_apply',
			'Local::Role1',
			'Local::Role2'
		],
		[
			'after_apply',
			'Local::Role1',
			'Local::Role2'
		],
		[
			'before_apply',
			'Local::Role2',
			'Local::Class1'
		],
		[
			'after_apply',
			'Local::Role2',
			'Local::Class1'
		]
	],
	'Local::Role2' => [
		[
			'before_apply',
			'Local::Role2',
			'Local::Class1'
		],
		[
			'after_apply',
			'Local::Role2',
			'Local::Class1'
		]
	]
}) or diag explain(\%xxx);

done_testing;