]> git.vpit.fr Git - perl/modules/Bit-MorseSignals.git/blob - t/22-emitter-utf8.t
Switch to qw<>
[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 = Bit::MorseSignals::Emitter->new(utf8 => 'DO WANT');
14
15 sub test_msg {
16  my ($desc, $exp) = @_;
17  my $last = pop @$exp;
18
19  my $i = 0;
20  for (@$exp) {
21   my $b = $deuce->pop;
22   ok($deuce->busy, "$desc: BME object is busy after pop $i");
23   is($b, $_,       "$desc: bit $i is correct");
24  }
25
26  my $b = $deuce->pop;
27  ok(!$deuce->busy, "$desc: BME object is no longer busy when over");
28  is($b, $last, "$desc: last bit is correct");
29 }
30
31 my $msg = 'é';
32 my @exp = split //, '11110' . '100' . '11000011' . '10010101' . '01111';
33
34 my $ret = eval { $deuce->post($msg) };
35 ok(!$@, "simple post doesn't croak ($@)");
36 ok(defined $ret && $ret > 0, 'simple post was successful');
37 ok($deuce->busy, 'BME object is busy after simple post');
38 ok(!$deuce->queued, 'BME object has no message queued after simple post');
39
40 test_msg 'simple post', [ @exp ];
41 ok(!defined $deuce->pop, "simple post: message is over");
42
43 $ret = eval { $deuce->post($msg) };
44 ok(!$@, "first double post doesn't croak ($@)");
45 ok(defined $ret && $ret > 0, 'first double post was successful');
46 ok($deuce->busy, 'BME object is busy after first double post');
47 ok(!$deuce->queued, 'BME object has no message queued after first double post');
48
49 $ret = eval { $deuce->post($msg) };
50 ok(!$@, "second double post doesn't croak ($@)");
51 ok(defined $ret && $ret < 0, 'second double post was queued');
52 ok($deuce->busy, 'BME object is busy after second double post');
53 ok($deuce->queued, 'BME object has a message queued after second double post');
54
55 test_msg 'first double post', [ @exp ];
56 ok(!$deuce->busy && $deuce->queued, 'first double post: BME object is no longer busy but still has something in queue between the two posts');
57 test_msg 'second double post', [ @exp ];
58 ok(!defined $deuce->pop, "second double post: message is over");
59
60 # Force non-utf8
61 @exp = split //, '00001' . '000' . '10010111' . '10000';
62
63 $ret = eval { $deuce->post($msg, type => BM_DATA_PLAIN); };
64 ok(!$@, "forced non-utf8 post doesn't croak ($@)");
65 ok(defined $ret && $ret > 0, 'forced non-utf8 post was successful');
66 ok($deuce->busy, 'BME object is busy after forced non-utf8 post');
67 ok(!$deuce->queued, 'BME object has no message queued after forced non-utf8 post');
68
69 test_msg 'forced non-utf8 post', [ @exp ];
70 ok(!defined $deuce->pop, "forced non-utf8 post: message is over");
71