1# This script should be runnable with 'make test'. 2 3######################### We start with some black magic to print on failure. 4 5BEGIN { $| = 1 } 6END { print "not ok 1\n" unless $loaded } 7 8use lib qw( ./t ); 9use Magic; 10 11use Class::Contract; 12$loaded = 1; 13print "ok 1\n"; 14 15######################### End of black magic. 16 17::ok('desc' => "attr accessors are private to class' package namespace", 18 'expect' => qr/^attribute Attribute::foo inaccessible from package main/s, 19 'code' => <<'CODE'); 20#=> Attributes accessors are private to the class in which they're declared 21# Calling an attribute accessor outside the namespace of the class' 22# package will raise an exception 23package Attribute; 24use Class::Contract; 25contract { class attr 'foo' => 'SCALAR' }; 26${Attribute->foo} = 1; 27 28package main; 29${Attribute->foo}; 30CODE 31 32::ok('desc' => 'attr preconditions are inherited', 33 'expect' => 3, 34# 'need' => 'Extended Contracts', 35 'code' => <<'CODE'); 36#package main; 37#my $o = Baz->new(); 38#$o->get_name; 39#delete $::pre{'attr'}; 403 41CODE 42 43::ok('desc' => 'attr cannot have implementation', 44 'expect' => qr/^Attribute cannot have implementation/, 45 'code' => <<'CODE'); 46package Attribute::Impl; 47use Class::Contract; 48contract { attr 'baz'; impl {1} }; 49CODE 50 51::ok('desc' => 'exception if attempt to access obj attr with class ref', 52 'expect' => qr/^Can\'t access object attr w\/ class reference/, 53 'code' => <<'CODE'); 54package Attribute::Obj; 55use Class::Contract; 56contract { 57 attr 'baz'; 58 class method 'get_baz'; 59 impl { ${self->baz} }; 60}; 61 62package main; 63Attribute::Obj->get_baz; 64CODE 65 66 671; 68__END__ 69 70 71 72