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