]> git.vpit.fr Git - perl/modules/Bit-MorseSignals.git/blob - t/21-emitter-plain.t
Importing Bit-MorseSignals-0.06.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 sub test_msg {
13  my ($desc, $exp, $try_post) = @_;
14  my $len = @$exp;
15  my $last = pop @$exp;
16
17  my $i = 0;
18  for (@$exp) {
19   is($deuce->pos, $deuce->busy ? $i : undef, "$desc: BME position is correct");
20   my $b = $deuce->pop;
21   if ($try_post) {
22    ok(!defined($deuce->post),   "$desc: posting undef while sending returns undef");
23    is($deuce->post('what'), -1, "$desc: posting while sending enqueues");
24    $deuce->flush;
25    is($deuce->queued, 0,        "$desc: flushing dequeues");
26   }
27   is($deuce->len, $len, "$desc: BME length is correct");
28   ok($deuce->busy,      "$desc: BME object is busy after pop $i");
29   is($b, $_,            "$desc: bit $i is correct");
30   ++$i;
31  }
32
33  my $b = $deuce->pop;
34  ok(!$deuce->busy, "$desc: BME object is no longer busy when over");
35  is($b, $last,     "$desc: last bit is correct");
36 }
37
38 my $msg = 'x';
39 my @exp = split //, '111110' . '000' . '00011110' . '011111';
40
41 my $ret = eval { $deuce->post($msg, type => 4675412) }; # defaults to PLAIN
42 ok(!$@, "simple post doesn't croak ($@)");
43 ok(defined $ret && $ret > 0, 'simple post was successful');
44 ok($deuce->busy, 'BME object is busy after simple post');
45 ok(!$deuce->queued, 'BME object has no message queued after simple post');
46
47 test_msg 'simple post', [ @exp ], 1;
48 ok(!defined $deuce->pop, "simple post: message is over");
49
50 $ret = eval { $deuce->post($msg) };
51 ok(!$@, "first double post doesn't croak ($@)");
52 ok(defined $ret && $ret > 0, 'first double post was successful');
53 ok($deuce->busy, 'BME object is busy after first double post');
54 ok(!$deuce->queued, 'BME object has no message queued after first double post');
55
56 $ret = eval { $deuce->post($msg) };
57 ok(!$@, "second double post doesn't croak ($@)");
58 ok(defined $ret && $ret < 0, 'second double post was queued');
59 ok($deuce->busy, 'BME object is busy after second double post');
60 ok($deuce->queued, 'BME object has a message queued after second double post');
61
62 test_msg 'first double post', [ @exp ];
63 ok(!$deuce->busy && $deuce->queued, 'first double post: BME object is no longer busy but still has something in queue between the two posts');
64 test_msg 'second double post', [ @exp ];
65 ok(!defined $deuce->pop, "second double post: message is over");
66
67 my $exp1 = join '', @exp;
68 my $msg2 = 'y';
69 my $exp2 = '00001' . '000' . '10011110' . '10000';
70 my $msg3 = 'z';
71 my $exp3 = '000001' . '000' . '01011110' . '100000';
72
73 $deuce->post($msg);
74 $deuce->post($msg2);
75 my $s = ''; $s .= $deuce->pop for 1 .. length $exp1;
76 is($s, $exp1, 'first send successful');
77 ok(!$deuce->busy, 'after the first send, the emitter isn\'t busy anymore' );
78 is($deuce->queued, 1, 'after the fist send, the emitter has still one item queued');
79 isnt($deuce->post($msg3), -1, 'posting between the two messages doesn\'t return -1');
80 ok($deuce->busy, 'after the new post, the emitter is busy, ready to send');
81 is($deuce->queued, 1, 'after the new post, there\'s a new element in the queue');
82 $s = ''; $s .= $deuce->pop for 1 .. length $exp2;
83 is($s, $exp2, 'second send successful');
84 $s = ''; $s .= $deuce->pop for 1 .. length $exp3;
85 is($s, $exp3, 'third send successful');
86
87
88