]> git.vpit.fr Git - perl/modules/Bit-MorseSignals.git/blobdiff - t/21-emitter-plain.t
Importing Bit-MorseSignals-0.06.tar.gz
[perl/modules/Bit-MorseSignals.git] / t / 21-emitter-plain.t
index 83ee09a1494a6cee73dc80edd77d6468a328323c..812389a9343fb28d9c59b092249f83fff9c1985c 100644 (file)
@@ -9,40 +9,42 @@ use Bit::MorseSignals::Emitter;
 
 my $deuce = new Bit::MorseSignals::Emitter;
 
-my $i;
-sub test_bit {
- my ($desc, $b, $e) = @_;
- ok(defined $b && $b == $e,
-    "$desc: bit $i : " . (defined $b ? "got $b, expected $e" : 'undef'));
- ++$i;
-}
-
 sub test_msg {
- my ($desc, $exp) = @_;
+ my ($desc, $exp, $try_post) = @_;
+ my $len = @$exp;
  my $last = pop @$exp;
 
- $i = 0;
my $i = 0;
  for (@$exp) {
+  is($deuce->pos, $deuce->busy ? $i : undef, "$desc: BME position is correct");
   my $b = $deuce->pop;
-  ok($deuce->busy, "$desc: BME object is busy after pop $i");
-  test_bit $desc, $b, $_;
+  if ($try_post) {
+   ok(!defined($deuce->post),   "$desc: posting undef while sending returns undef");
+   is($deuce->post('what'), -1, "$desc: posting while sending enqueues");
+   $deuce->flush;
+   is($deuce->queued, 0,        "$desc: flushing dequeues");
+  }
+  is($deuce->len, $len, "$desc: BME length is correct");
+  ok($deuce->busy,      "$desc: BME object is busy after pop $i");
+  is($b, $_,            "$desc: bit $i is correct");
+  ++$i;
  }
 
  my $b = $deuce->pop;
  ok(!$deuce->busy, "$desc: BME object is no longer busy when over");
test_bit $desc, $b, $last;
is($b, $last,     "$desc: last bit is correct");
 }
 
 my $msg = 'x';
 my @exp = split //, '111110' . '000' . '00011110' . '011111';
 
-my $ret = eval { $deuce->post($msg) };
+my $ret = eval { $deuce->post($msg, type => 4675412) }; # defaults to PLAIN
 ok(!$@, "simple post doesn't croak ($@)");
 ok(defined $ret && $ret > 0, 'simple post was successful');
 ok($deuce->busy, 'BME object is busy after simple post');
 ok(!$deuce->queued, 'BME object has no message queued after simple post');
 
-test_msg 'simple post', [ @exp ];
+test_msg 'simple post', [ @exp ], 1;
 ok(!defined $deuce->pop, "simple post: message is over");
 
 $ret = eval { $deuce->post($msg) };
@@ -61,3 +63,26 @@ test_msg 'first double post', [ @exp ];
 ok(!$deuce->busy && $deuce->queued, 'first double post: BME object is no longer busy but still has something in queue between the two posts');
 test_msg 'second double post', [ @exp ];
 ok(!defined $deuce->pop, "second double post: message is over");
+
+my $exp1 = join '', @exp;
+my $msg2 = 'y';
+my $exp2 = '00001' . '000' . '10011110' . '10000';
+my $msg3 = 'z';
+my $exp3 = '000001' . '000' . '01011110' . '100000';
+
+$deuce->post($msg);
+$deuce->post($msg2);
+my $s = ''; $s .= $deuce->pop for 1 .. length $exp1;
+is($s, $exp1, 'first send successful');
+ok(!$deuce->busy, 'after the first send, the emitter isn\'t busy anymore' );
+is($deuce->queued, 1, 'after the fist send, the emitter has still one item queued');
+isnt($deuce->post($msg3), -1, 'posting between the two messages doesn\'t return -1');
+ok($deuce->busy, 'after the new post, the emitter is busy, ready to send');
+is($deuce->queued, 1, 'after the new post, there\'s a new element in the queue');
+$s = ''; $s .= $deuce->pop for 1 .. length $exp2;
+is($s, $exp2, 'second send successful');
+$s = ''; $s .= $deuce->pop for 1 .. length $exp3;
+is($s, $exp3, 'third send successful');
+
+
+