]> git.vpit.fr Git - perl/modules/IPC-MorseSignals.git/blob - t/11-unicode.t
Importing IPC-MorseSignals-0.04.tar.gz
[perl/modules/IPC-MorseSignals.git] / t / 11-unicode.t
1 #!perl -T
2
3 use Test::More tests => 7 * 5;
4
5 use POSIX qw/SIGINT SIGTERM SIGKILL EXIT_SUCCESS EXIT_FAILURE WIFEXITED WEXITSTATUS/;
6
7 use IPC::MorseSignals qw/msend mrecv/;
8
9 use utf8;
10
11 sub trysend8 {
12  my ($msg, $desc) = @_;
13  my $speed = 2 ** 16;
14  my $ok = 0;
15  $desc .= ' (unicode)';
16 SPEED:
17  while (($speed > 1) && !$ok) {
18   $speed /= 2;
19   my $pid = fork;
20   if (!defined $pid) {
21    die "$desc: fork() failed : $!";
22   } elsif ($pid == 0) {
23    local @SIG{qw/USR1 USR2/} = mrecv sub {
24     exit(($msg eq $_[0]) ? EXIT_SUCCESS : EXIT_FAILURE);
25    }, utf8 => 1;
26    1 while 1;
27    exit EXIT_FAILURE;
28   }
29   my $ret = EXIT_FAILURE;
30   eval {
31    local $SIG{ALRM} = sub { die 'timeout' };
32    my $a = (int(100 * (3 * length $msg) / $speed) || 1);
33    $a = 10 if $a > 10;
34    alarm $a;
35    msend $msg => $pid, speed => $speed, utf8 => 1;
36    waitpid $pid, 0;
37    $ok = (WIFEXITED($?) && (WEXITSTATUS($?) == EXIT_SUCCESS));
38   };
39   alarm 0;
40   if ($@) {
41    kill SIGINT,  $pid;
42    kill SIGTERM, $pid;
43    kill SIGKILL, $pid;
44   }
45  }
46  ok($speed >= 1, $desc);
47 }
48
49 for (1 .. 5) {
50  trysend8 'hello', 'ascii';
51  trysend8 "\0" x 10, 'few bits';
52  trysend8 "\x{FF}" x 10, 'lots of bits';
53  trysend8 "a\0b", 'null character';
54  trysend8 'éàùçà', 'extended';
55  trysend8 '€€€', 'unicode';
56  trysend8 'a€bécàd€e', 'mixed';
57 }