-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject.t
executable file
·111 lines (86 loc) · 2.23 KB
/
object.t
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env perl
# -*- mode: perl; coding: utf-8 -*-
#----------------------------------------
use strict;
use warnings qw(FATAL all NONFATAL misc);
use FindBin; BEGIN { do "$FindBin::Bin/t_lib.pl" }
#----------------------------------------
use Test::More;
use YATT::Lite::Breakpoint;
use YATT::Lite::Object;
use YATT::Lite::Util::FindMethods;
{
package T1; sub MY () {__PACKAGE__}
use base qw(YATT::Lite::Object);
use fields qw(ITEMS cf_name cf_OTHER);
sub cmd_mark {
(my MY $self, my ($i)) = @_;
push @{$self->{ITEMS}}, [caller($i)]->[3];
}
sub _before_after_new {
(my MY $self) = @_;
$self->cmd_mark(1);
$self->SUPER::_before_after_new();
}
sub after_new {
(my MY $self) = @_;
$self->cmd_mark(1);
$self->SUPER::after_new;
}
sub _after_after_new {
(my MY $self) = @_;
$self->cmd_mark(1);
$self->SUPER::_after_after_new;
}
sub cmd_items {
(my MY $self) = @_;
wantarray ? @{$self->{ITEMS}} : $self->{ITEMS};
}
#----------------------------------------
my MY $obj1 = T1->new(name => 'FOO');
::is_deeply [$obj1->cmd_items]
, [qw/T1::_before_after_new
T1::after_new
T1::_after_after_new/]
, "initialization hook";
::is $obj1->{cf_name}, 'FOO', "cf_name";
::is $obj1->cget('name'), 'FOO', "cget(name)";
::is_deeply [sort $obj1->cf_list]
, [qw/OTHER name/]
, "cf_list";
::is_deeply [sort $obj1->cf_list(qr/^cf_([a-z]\w*)/)]
, [qw/name/]
, "cf_list(regexp)";
}
{
package T2; sub MY () {__PACKAGE__}
use base qw(T1);
sub _before_after_new {
(my MY $self) = @_;
$self->cmd_mark(1);
$self->SUPER::_before_after_new();
}
sub after_new {
(my MY $self) = @_;
$self->cmd_mark(1);
$self->SUPER::after_new;
}
sub _after_after_new {
(my MY $self) = @_;
$self->cmd_mark(1);
$self->SUPER::_after_after_new;
}
my MY $obj1 = T2->new(name => 'BAR');
::is_deeply [$obj1->cmd_items]
, [qw/T2::_before_after_new
T1::_before_after_new
T2::after_new
T1::after_new
T2::_after_after_new
T1::_after_after_new/]
, "initialization hook, inheritance";
::is_deeply [::FindMethods($obj1, sub {/^cmd_/})]
, [qw/cmd_items cmd_mark/]
, "FindMethods(\$obj1)";
}
done_testing();