This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
ext/POSIX/t/mb.t: Generalize for EBCDIC
[perl5.git] / ext / POSIX / t / mb.t
1 #!./perl
2
3 # These tests are in a separate file, because they use fresh_perl_is()
4 # from test.pl.
5
6 # The mb* functions use the "underlying locale" that is not affected by
7 # the Perl one.  So we run the tests in a separate "fresh_perl" process
8 # with the correct LC_CTYPE set in the environment.
9
10 BEGIN {
11     require Config; import Config;
12     if ($^O ne 'VMS' and $Config{'extensions'} !~ /\bPOSIX\b/) {
13         print "1..0\n";
14         exit 0;
15     }
16     unshift @INC, "../../t";
17     require 'loc_tools.pl';
18     require 'charset_tools.pl';
19     require 'test.pl';
20 }
21
22 plan tests => 3;
23
24 use POSIX qw();
25
26 SKIP: {
27     skip("mblen() not present", 3) unless $Config{d_mblen};
28
29     is(&POSIX::mblen("a", &POSIX::MB_CUR_MAX), 1, 'mblen() basically works');
30
31     skip("LC_CTYPE locale support not available", 2)
32       unless locales_enabled('LC_CTYPE');
33
34     my $utf8_locale = find_utf8_ctype_locale();
35     skip("no utf8 locale available", 2) unless $utf8_locale;
36
37     local $ENV{LC_CTYPE} = $utf8_locale;
38     local $ENV{LC_ALL};
39     delete $ENV{LC_ALL};
40
41     fresh_perl_is(
42         'use POSIX; print &POSIX::mblen("'
43       . I8_to_native("\x{c3}\x{28}")
44       . '", &POSIX::MB_CUR_MAX)',
45       -1, {}, 'mblen() recognizes invalid multibyte characters');
46
47     fresh_perl_is(
48      'use POSIX; print &POSIX::mblen("\N{GREEK SMALL LETTER SIGMA}", &POSIX::MB_CUR_MAX)',
49      2, {}, 'mblen() works on UTF-8 characters');
50 }