1use strict; use warnings; 2 3use Test::More tests => 6; 4 5{ 6 package Something; 7 use Class::Observable; 8 our @ISA = 'Class::Observable'; 9 sub new { bless {}, $_[0] } 10} 11 12my $test = Something->new; 13 14my %counter; 15 16sub obs_inst_1 { ++$counter{'inst'} } 17sub obs_inst_2 { ++$counter{'inst'} } 18sub obs_class_1 { ++$counter{'class'} } 19sub obs_class_2 { ++$counter{'class'} } 20 21$test->add_observer(\&obs_inst_1); 22$test->add_observer(\&obs_inst_2); 23 24Something->add_observer(\&obs_class_1); 25Something->add_observer(\&obs_class_2); 26 27$test->notify_observers; 28is $counter{'inst'}, 2, 'Both instance observers called'; 29is $counter{'class'}, 2, '... as well as both class observers'; 30%counter = (); 31 32$test->delete_observer(\&obs_inst_1); 33 34$test->notify_observers; 35is $counter{'inst'}, 1, 'After instance observer deletion only one is called'; 36is $counter{'class'}, 2, '... as well as both class observers'; 37%counter = (); 38 39Something->delete_observer(\&obs_class_1); 40 41$test->notify_observers; 42is $counter{'class'}, 1, 'After class observer deletion only one is called'; 43is $counter{'inst'}, 1, '... as well as one instance observers'; 44%counter = (); 45