trigger
[gitmo/Moose.git] / t / 700_xs / 001_basic.t
index a4004d5..9ad3e37 100644 (file)
@@ -93,6 +93,8 @@ BEGIN {
                 $_->has_default,
                 $_->default,
                 $_->builder,
+
+                $_->init_arg,
             ]} $mi->get_all_attributes ]
         );
     }
@@ -103,6 +105,8 @@ ok( defined &Moose::XS::new_writer, "new_writer" );
 ok( defined &Moose::XS::new_accessor, "new_accessor" );
 ok( defined &Moose::XS::new_predicate, "new_predicate" );
 
+my $trigger;
+
 {
     package Foo;
     use Moose;
@@ -126,6 +130,7 @@ ok( defined &Moose::XS::new_predicate, "new_predicate" );
     has c => ( isa => "ClassName", is => "rw" );
     has b => ( is => "ro", lazy_build => 1 ); # fixme type constraint checking
     has tc => ( is => "rw", isa => "FiveChars" );
+    has t => ( is => "rw", trigger => sub { $trigger = "got: " . $_[1] } );
 
     sub _build_b { "builded!" }
 
@@ -145,7 +150,7 @@ ok( defined &Moose::XS::new_predicate, "new_predicate" );
 }
 
 {
-    my ( $x, $y, $z, $ref, $a, $s, $i, $o, $f, $c, $b ) = map { Foo->meta->get_attribute($_) } qw(x y z ref a s i o f c b);
+    my ( $x, $y, $z, $ref, $a, $s, $i, $o, $f, $c, $b, $tc, $t ) = map { Foo->meta->get_attribute($_) } qw(x y z ref a s i o f c b tc t);
     $x->Moose::XS::new_accessor("Foo::x");
     $x->Moose::XS::new_predicate("Foo::has_x");
     $y->Moose::XS::new_reader("Foo::y");
@@ -159,6 +164,8 @@ ok( defined &Moose::XS::new_predicate, "new_predicate" );
     $f->Moose::XS::new_accessor("Foo::f");
     $c->Moose::XS::new_accessor("Foo::c");
     $b->Moose::XS::new_accessor("Foo::b");
+    $tc->Moose::XS::new_accessor("Foo::tc");
+    $t->Moose::XS::new_accessor("Foo::t");
 }
 
 
@@ -205,6 +212,12 @@ is( $foo->ref, $ref, "attr set" );
 undef $ref;
 is( $foo->ref(), undef, "weak ref destroyed" );
 
+is( $trigger, undef, "trigger not yet called" );
+is( $foo->t, undef, "no value in t" );
+is( $trigger, undef, "trigger not yet called" );
+$foo->t("laaa");
+is( $trigger, "got: laaa", "trigger called" );
+
 ok( !eval { $foo->a("not a ref"); 1 }, "ArrayRef" );
 ok( !eval { $foo->a(3); 1 }, "ArrayRef" );
 ok( !eval { $foo->a({}); 1 }, "ArrayRef" );
@@ -213,6 +226,7 @@ ok( !eval { $foo->i(1.3); 1 }, "Int" );
 ok( !eval { $foo->i("1.3"); 1 }, "Int" );
 ok( !eval { $foo->i("foo"); 1 }, "Int" );
 ok( !eval { $foo->i(undef); 1 }, "Int" );
+ok( !eval { $foo->i(\undef); 1 }, "Int" );
 ok( !eval { $foo->s(undef); 1 }, "Str" );
 ok( !eval { $foo->s([]); 1 }, "Str" );
 ok( !eval { $foo->o({}); 1 }, "Object" );