update repo to point to github
[gitmo/Moo.git] / t / accessor-trigger.t
index 0af7402..762b290 100644 (file)
 use strictures 1;
 use Test::More;
 
-my @one_tr;
+our @tr;
+
+sub run_for {
+  my $class = shift;
+
+  @tr = ();
+
+  my $obj = $class->new;
+
+  ok(!@tr, "${class}: trigger not fired with no value");
+
+  $obj = $class->new(one => 1);
+
+  is_deeply(\@tr, [ 1 ], "${class}: trigger fired on new");
+
+  my $res = $obj->one(2);
+
+  is_deeply(\@tr, [ 1, 2 ], "${class}: trigger fired on set");
+
+  is($res, 2, "${class}: return from set ok");
+
+  is($obj->one, 2, "${class}: return from accessor ok");
+
+  is_deeply(\@tr, [ 1, 2 ], "${class}: trigger not fired for accessor as get");
+}
 
 {
   package Foo;
 
-  use Class::Tiny;
+  use Moo;
 
-  has one => (is => 'rw', trigger => sub { push @one_tr, $_[1] });
+  has one => (is => 'rw', trigger => sub { push @::tr, $_[1] });
 }
 
-my $foo = Foo->new;
+run_for 'Foo';
 
-ok(!@one_tr, "trigger not fired with no value");
+{
+  package Bar;
 
-$foo = Foo->new(one => 1);
+  use Sub::Quote;
+  use Moo;
 
-is_deeply(\@one_tr, [ 1 ], "trigger fired on new");
+  has one => (is => 'rw', trigger => quote_sub q{ push @::tr, $_[1] });
+}
 
-my $res = $foo->one(2);
+run_for 'Bar';
 
-is_deeply(\@one_tr, [ 1, 2 ], "trigger fired on set");
+{
+  package Baz;
+
+  use Sub::Quote;
+  use Moo;
+
+  has one => (
+    is => 'rw',
+    trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr })
+  );
+}
 
-is($res, 2, "return from set ok");
+run_for 'Baz';
 
-is($foo->one, 2, "return from accessor ok");
+{
+  package Default;
+
+  use Sub::Quote;
+  use Moo;
+
+  has one => (
+    is => 'rw',
+    trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr }),
+    default => sub { 0 }
+  );
+}
+
+run_for 'Default';
+
+{
+  package LazyDefault;
+
+  use Sub::Quote;
+  use Moo;
+
+  has one => (
+    is => 'rw',
+    trigger => quote_sub(q{ push @{$tr}, $_[1] }, { '$tr' => \\@::tr }),
+    default => sub { 0 },
+    lazy => 1
+  );
+}
+
+run_for 'LazyDefault';
+
+{
+  package Shaz;
+
+  use Moo;
+
+  has one => (is => 'rw', trigger => 1 );
+
+  sub _trigger_one { push @::tr, $_[1] }
+}
 
-is_deeply(\@one_tr, [ 1, 2 ], "trigger not fired for accessor as get");
+run_for 'Shaz';
 
 done_testing;