82dee7de92a0bd35 failed to add ext/lib/Makefile.PL. Oops.
[p5sagit/p5-mst-13.2.git] / ext / Object-Accessor / t / 05_Object-Accessor-callback.t
CommitLineData
0bbb0bd4 1BEGIN { chdir 't' if -d 't' };
2
3use strict;
4use lib '../lib';
5use Test::More 'no_plan';
6use Data::Dumper;
7
8my $Class = 'Object::Accessor';
9my $LClass = $Class . '::Lvalue';
10
11use_ok($Class);
12
13### stupid warnings
14### XXX this will break warning tests though if enabled
15$Object::Accessor::DEBUG = $Object::Accessor::DEBUG = 1 if @ARGV;
16
17my $Object = $Class->new;
18my $Acc = 'foo';
19my $Func = 'register_callback';
20my $Called = 0;
21my $RetVal = $$;
22my $SetVal = 1;
23
24### 6 tests
25my $Sub = sub {
26 my $obj = shift;
27 my $meth = shift;
28 my $val = shift;
29
30 $Called++;
31
32 ok( 1, " In callback now" );
33 ok( $obj, " Object received" );
34 isa_ok( $obj, $Class, " Object");
35 is( $meth, $Acc, " Method is '$Acc'" );
36 isa_ok( $val, "ARRAY", " Value" );
37 scalar @$val
38 ? is( $val->[0], $SetVal,
39 " Attempted to set $SetVal" )
40 : ok( ! exists $val->[0],
41 " This was a GET request" );
42
43 return $RetVal;
44};
45
46### set up the object
47{ ok( $Object, "Object created" );
48 isa_ok( $Object, $Class );
49 ok( $Object->mk_accessors( $Acc ),
50 " Accessor '$Acc' created" );
51 can_ok( $Object, $Func );
52 ok( $Object->$Func( $Sub ), " Callback registered" );
53}
54
55### test ___get and ___set
56{ $Called = 0;
57
58 my $clone = $Object->mk_clone;
59 ok( $clone, "Object cloned" );
60
61 my $val = $clone->___get($Acc);
62 is( $val, undef, " Direct get returns <undef>" );
63 ok( $clone->___set( $Acc => $SetVal ),
64 " Direct set is able to set the value" );
65 is( $clone->___get( $Acc ), $SetVal,
66 " Direct get returns $SetVal" );
67 ok( !$Called, " Callbacks didn't get called" );
68}
69
70### test callbacks on regular objects
71### XXX callbacks DO NOT work on lvalue objects. This is verified
72### in the lvalue test file, so we dont test here
73{ #diag("Running GET tests on regular objects");
74
75 my $clone = $Object->mk_clone;
76
77 $Called = 0;
78 is( $clone->$Acc, $RetVal, " Method '$Acc' returns '$RetVal' " );
79 is( $clone->___get($Acc), undef,
80 " Direct get returns <undef>" );
81 ok( $Called, " Callback called" );
82
83
84 #diag("Running SET tests on regular objects");
85 $Called = 0;
86 ok( $clone->$Acc($SetVal), " Setting $Acc" );
87 ok( $Called, " Callback called" );
88
89 $Called = 0;
90 is( $clone->$Acc, $RetVal, " Returns $RetVal" );
91 ok( $Called, " Callback called" );
92
93 $Called = 0;
94 is( $clone->___get( $Acc ), $RetVal,
95 " Direct get returns $RetVal" );
96 ok( !$Called, " Callback not called" );
97}