File: 20moo-param-role.t

package info (click to toggle)
libpackage-variant-perl 1.003002-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 148 kB
  • sloc: perl: 116; makefile: 2
file content (43 lines) | stat: -rw-r--r-- 871 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
use strictures 2;
use Test::More;

BEGIN {
  eval { require Moo::Role; 1 }
    or plan skip_all => q{Requires Moo::Role};
}

BEGIN {
  package My::Role::OnOff;

  use Package::Variant
    importing => { 'Moo::Role' => [] },
    subs => [ qw(has before after around) ];

  sub make_variant {
    my ($me, $into, %args) = @_;
    my $name = $args{name};
    has $name => (is => 'rw');
    install "${name}_on" => sub { shift->$name(1); };
    install "${name}_off" => sub { shift->$name(0); };
  }
  $INC{"My/Role/OnOff.pm"} = __FILE__;
}

BEGIN {
  package LightSwitch;

  use My::Role::OnOff;
  use Moo;

  with OnOff(name => 'lights');
}

my $lights = LightSwitch->new;

is($lights->lights, undef, 'Initial state');
is($lights->lights_on, 1, 'Turn on');
is($lights->lights, 1, 'On');
is($lights->lights_off, 0, 'Turn off');
is($lights->lights, 0, 'Off');

done_testing;