]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blob - t/11-multiple.t
Importing Variable-Magic-0.01
[perl/modules/Variable-Magic.git] / t / 11-multiple.t
1 #!perl -T
2
3 use Test::More tests => 33;
4
5 use Variable::Magic qw/wizard cast dispell/;
6
7 my $n = 3;
8 my @w;
9 my @c = (0) x $n;
10
11 sub multi {
12  my ($cb, $tests) = @_;
13  for (local $i = 0; $i < $n; ++$i) {
14   my $res = eval { $cb->() };
15   $tests->($res, $@);
16  }
17 }
18
19 eval { $w[0] = wizard get => sub { ++$c[0] }, set => sub { --$c[0] } };
20 ok(!$@, "wizard 0 creation error ($@)");
21 eval { $w[1] = wizard get => sub { ++$c[1] }, set => sub { --$c[1] } };
22 ok(!$@, "wizard 1 creation error ($@)");
23 eval { $w[2] = wizard get => sub { ++$c[2] }, set => sub { --$c[2] } };
24 ok(!$@, "wizard 2 creation error ($@)");
25
26 multi sub {
27  $w[$i]
28 }, sub {
29  my ($res, $err) = @_;
30  ok(defined $res, "wizard $i is defined");
31  ok(ref($w[$i]) eq 'SCALAR', "wizard $i is a scalar ref");
32 };
33
34 my $a = 0;
35
36 multi sub {
37  cast $a, $w[$i];
38 }, sub {
39  my ($res, $err) = @_;
40  ok(!$err, "cast magic $i error 1 ($err)");
41  ok($res, "cast magic $i error 2");
42 };
43
44 my $b = $a;
45 for (0 .. $n - 1) { ok($c[$_] == 1, "get magic $_"); }
46
47 $a = 1;
48 for (0 .. $n - 1) { ok($c[$_] == 0, "set magic $_"); }
49
50 my $res = eval { dispell $a, $w[1] };
51 ok(!$@, "dispell magic 1 error 1 ($@)");
52 ok($res, 'dispell magic 1 error 2');
53
54 $b = $a;
55 for (0, 2) { ok($c[$_] == 1, "get magic $_ after dispelled 1"); }
56
57 $a = 2;
58 for (0, 2) { ok($c[$_] == 0, "set magic $_ after dispelled 1"); }
59
60 $res = eval { dispell $a, $w[0] };
61 ok(!$@, "dispell magic 0 error 1 ($@)");
62 ok($res, 'dispell magic 0 error 2');
63
64 $b = $a;
65 ok($c[2] == 1, 'get magic 2 after dispelled 1 & 0');
66
67 $a = 3;
68 ok($c[2] == 0, 'set magic 2 after dispelled 1 & 0');
69
70 $res = eval { dispell $a, $w[2] };
71 ok(!$@, "dispell magic 2 error 1 ($@)");
72 ok($res, 'dispell magic 2 error 2');