Initial version of Moose::XS
[gitmo/Moose.git] / t / 700_xs / 001_basic.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Exception;
8
9 BEGIN {
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
21 ok( defined &Moose::XS::install_simple_getter );
22 ok( defined &Moose::XS::install_simple_setter );
23 ok( defined &Moose::XS::install_simple_accessor );
24 ok( defined &Moose::XS::install_predicate );
25
26 {
27     package Foo;
28     use Moose;
29
30     has x => ( is => "rw", predicate => "has_x" );
31     has y => ( is => "ro" );
32     has z => ( reader => "z", setter => "set_z" );
33 }
34
35 Moose::XS::install_simple_accessor("Foo::x", "x");
36 Moose::XS::install_predicate("Foo::has_x", "x");
37 Moose::XS::install_simple_getter("Foo::y", "y");
38 Moose::XS::install_simple_getter("Foo::z", "z");
39 Moose::XS::install_simple_setter("Foo::set_z", "z");
40
41 my $foo = Foo->new( x => "ICKS", y => "WHY", z => "ZEE" );
42
43 is( $foo->x, "ICKS" );
44 is( $foo->y, "WHY" );
45 is( $foo->z, "ZEE" );
46
47 lives_ok { $foo->x("YASE") };
48
49 is( $foo->x, "YASE" );
50
51 dies_ok { $foo->y("blah") };
52
53 is( $foo->y, "WHY" );
54
55 dies_ok { $foo->z("blah") };
56
57 is( $foo->z, "ZEE" );
58
59 lives_ok { $foo->set_z("new") };
60
61 is( $foo->z, "new" );
62
63 ok( $foo->has_x );
64
65 ok( !Foo->new->has_x );
66