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