compute using the MOP
[gitmo/Moose.git] / t / 700_xs / 001_basic.t
CommitLineData
1ea12c91 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
7use Test::Exception;
8
9BEGIN {
10 plan skip_all => "no XSLoader" unless eval { require XSLoader };
11
12 plan skip_all => $@ unless eval {
13 require Moose;
14 Moose->XSLoader::load($Moose::VERSION);
15 1;
16 };
17
18 plan 'no_plan';
19}
20
f253044f 21{
22 package Moose::XS;
23
24 sub attr_to_meta_instance {
25 my $attr = shift;
26 return $attr->associated_class->get_meta_instance;
27 }
28
29 sub meta_instance_to_attr_descs {
30 my $mi = shift;
31
32 return (
33 $mi->associated_metaclass->name,
34 [ map { {
35 meta => $_,
36 key => ($_->slots)[0],
37 } } $mi->get_all_attributes ]
38 );
39 }
40}
41
de2f2e97 42ok( defined &Moose::XS::new_getter );
43ok( defined &Moose::XS::new_setter );
44ok( defined &Moose::XS::new_accessor );
45ok( defined &Moose::XS::new_predicate );
1ea12c91 46
47{
48 package Foo;
49 use Moose;
50
51 has x => ( is => "rw", predicate => "has_x" );
52 has y => ( is => "ro" );
53 has z => ( reader => "z", setter => "set_z" );
de2f2e97 54 has ref => ( is => "rw", weak_ref => 1 );
55}
56
57{
58 my ( $x, $y, $z, $ref ) = map { Foo->meta->get_attribute($_) } qw(x y z ref);
59 $x->Moose::XS::new_accessor("Foo::x");
60 $x->Moose::XS::new_predicate("Foo::has_x");
61 $y->Moose::XS::new_getter("Foo::y");
62 $z->Moose::XS::new_getter("Foo::z");
63 $z->Moose::XS::new_setter("Foo::set_z");
64 $ref->Moose::XS::new_accessor("Foo::ref");
1ea12c91 65}
66
1ea12c91 67
de2f2e97 68my $ref = [ ];
69
70my $foo = Foo->new( x => "ICKS", y => "WHY", z => "ZEE", ref => $ref );
1ea12c91 71
72is( $foo->x, "ICKS" );
73is( $foo->y, "WHY" );
74is( $foo->z, "ZEE" );
de2f2e97 75is( $foo->ref, $ref, );
1ea12c91 76
77lives_ok { $foo->x("YASE") };
78
79is( $foo->x, "YASE" );
80
81dies_ok { $foo->y("blah") };
82
83is( $foo->y, "WHY" );
84
85dies_ok { $foo->z("blah") };
86
87is( $foo->z, "ZEE" );
88
89lives_ok { $foo->set_z("new") };
90
91is( $foo->z, "new" );
92
93ok( $foo->has_x );
94
95ok( !Foo->new->has_x );
96
de2f2e97 97undef $ref;
98
99is( $foo->ref(), undef );
100
101$ref = { };
102
103$foo->ref($ref);
104
105is( $foo->ref, $ref, );
106
107undef $ref;
108
109is( $foo->ref(), undef );
110
111use Data::Dumper;
112warn Dumper($foo);