1#!perl -w
2
3# This is a base file to be used by various .t's in its directory
4# It tests various malformed UTF-8 sequences and some code points that are
5# "problematic", and verifies that the correct warnings/flags etc are
6# generated when using them.  For the code points, it also takes the UTF-8 and
7# perturbs it to be malformed in various ways, and tests that this gets
8# appropriately detected.
9
10use strict;
11use Test::More;
12
13BEGIN {
14    require './t/utf8_setup.pl';
15    use_ok('XS::APItest');
16};
17
18$|=1;
19
20use Data::Dumper;
21
22my @well_formed = (
23            "\xE1",
24            "The quick brown fox jumped over the lazy dog",
25            "Ces syst��mes de codage sont souvent incompatibles entre eux.  Ainsi, deux syst��mes peuvent utiliser le m��me nombre pour deux caract��res diff��rents ou utiliser diff��rents nombres pour le m��me caract��re.",
26            "Kelimelerin m\xC3\xAAme caract\xC3\xA8re ve yaz\xC3\xB1abc",
27);
28
29my @malformed = (
30            "Kelimelerin m\xC3\xAAme caract\xC3\xA8re ve yaz\xC4\xB1abc",
31            "Kelimelerin m\xC3\xAAme caract\xC3\xA8re ve yaz\xC4\xB1\xC3\xA8abc",
32            "Kelimelerin m\xC3\xAAme caract\xC3re ve yazi\xC3\xA8abc",
33            "Kelimelerin m\xC3\xAAme caract\xA8 ve yazi\xC3\xA8abc",
34            "Kelimelerin m\xC3\xAAme caract\xC3\xA8\xC3re ve yazi\xC3\xA8abc",
35);
36
37for my $test (@well_formed) {
38    my $utf8 = $test;
39    utf8::upgrade($utf8);
40    my $utf8_length;
41    my $byte_length = length $test;
42
43    {
44        use bytes;
45        $utf8_length = length $utf8;
46    }
47
48    my $ret_ref = test_utf8_to_bytes($utf8, $utf8_length);
49
50    is ($ret_ref->[0], $test, "Successfully downgraded "
51                            . display_bytes($utf8));
52    is ($ret_ref->[1], $byte_length, "... And returned correct length("
53                                     . $byte_length . ")");
54}
55
56for my $test (@malformed) {
57    my $utf8 = $test;
58    my $utf8_length = length $test;
59
60    my $ret_ref = test_utf8_to_bytes($utf8, $utf8_length);
61
62    ok (! defined $ret_ref->[0], "Returned undef for malformed "
63                                . display_bytes($utf8));
64    is ($ret_ref->[1], -1, "... And returned length -1");
65    is ($ret_ref->[2], $utf8, "... And left the input unchanged");
66}
67
68done_testing();
69