]> git.vpit.fr Git - perl/modules/Bit-MorseSignals.git/blob - t/21-emitter-plain.t
Importing Bit-MorseSignals-0.01.tar.gz
[perl/modules/Bit-MorseSignals.git] / t / 21-emitter-plain.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Test::More 'no_plan';
7
8 use Bit::MorseSignals::Emitter;
9
10 my $deuce = new Bit::MorseSignals::Emitter;
11
12 my $i;
13 sub test_bit {
14  my ($desc, $b, $e) = @_;
15  ok(defined $b && $b == $e,
16     "$desc: bit $i : " . (defined $b ? "got $b, expected $e" : 'undef'));
17  ++$i;
18 }
19
20 sub test_msg {
21  my ($desc, $exp) = @_;
22  my $last = pop @$exp;
23
24  $i = 0;
25  for (@$exp) {
26   my $b = $deuce->pop;
27   ok($deuce->busy, "$desc: BME object is busy after pop $i");
28   test_bit $desc, $b, $_;
29  }
30
31  my $b = $deuce->pop;
32  ok(!$deuce->busy, "$desc: BME object is no longer busy when over");
33  test_bit $desc, $b, $last;
34 }
35
36 my $msg = 'x';
37 my @exp = split //, '111110' . '000' . '00011110' . '011111';
38
39 my $ret = eval { $deuce->post($msg) };
40 ok(!$@, "simple post doesn't croak ($@)");
41 ok(defined $ret && $ret > 0, 'simple post was successful');
42 ok($deuce->busy, 'BME object is busy after simple post');
43 ok(!$deuce->queued, 'BME object has no message queued after simple post');
44
45 test_msg 'simple post', [ @exp ];
46 ok(!defined $deuce->pop, "simple post: message is over");
47
48 $ret = eval { $deuce->post($msg) };
49 ok(!$@, "first double post doesn't croak ($@)");
50 ok(defined $ret && $ret > 0, 'first double post was successful');
51 ok($deuce->busy, 'BME object is busy after first double post');
52 ok(!$deuce->queued, 'BME object has no message queued after first double post');
53
54 $ret = eval { $deuce->post($msg) };
55 ok(!$@, "second double post doesn't croak ($@)");
56 ok(defined $ret && $ret < 0, 'second double post was queued');
57 ok($deuce->busy, 'BME object is busy after second double post');
58 ok($deuce->queued, 'BME object has a message queued after second double post');
59
60 test_msg 'first double post', [ @exp ];
61 ok(!$deuce->busy && $deuce->queued, 'first double post: BME object is no longer busy but still has something in queue between the two posts');
62 test_msg 'second double post', [ @exp ];
63 ok(!defined $deuce->pop, "second double post: message is over");