xref: /aosp_15_r20/external/curl/tests/test1544.pl (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker#!/usr/bin/env perl
2*6236dae4SAndroid Build Coastguard Worker#***************************************************************************
3*6236dae4SAndroid Build Coastguard Worker#                                  _   _ ____  _
4*6236dae4SAndroid Build Coastguard Worker#  Project                     ___| | | |  _ \| |
5*6236dae4SAndroid Build Coastguard Worker#                             / __| | | | |_) | |
6*6236dae4SAndroid Build Coastguard Worker#                            | (__| |_| |  _ <| |___
7*6236dae4SAndroid Build Coastguard Worker#                             \___|\___/|_| \_\_____|
8*6236dae4SAndroid Build Coastguard Worker#
9*6236dae4SAndroid Build Coastguard Worker# Copyright (C) Daniel Stenberg, <[email protected]>, et al.
10*6236dae4SAndroid Build Coastguard Worker#
11*6236dae4SAndroid Build Coastguard Worker# This software is licensed as described in the file COPYING, which
12*6236dae4SAndroid Build Coastguard Worker# you should have received as part of this distribution. The terms
13*6236dae4SAndroid Build Coastguard Worker# are also available at https://curl.se/docs/copyright.html.
14*6236dae4SAndroid Build Coastguard Worker#
15*6236dae4SAndroid Build Coastguard Worker# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16*6236dae4SAndroid Build Coastguard Worker# copies of the Software, and permit persons to whom the Software is
17*6236dae4SAndroid Build Coastguard Worker# furnished to do so, under the terms of the COPYING file.
18*6236dae4SAndroid Build Coastguard Worker#
19*6236dae4SAndroid Build Coastguard Worker# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20*6236dae4SAndroid Build Coastguard Worker# KIND, either express or implied.
21*6236dae4SAndroid Build Coastguard Worker#
22*6236dae4SAndroid Build Coastguard Worker# SPDX-License-Identifier: curl
23*6236dae4SAndroid Build Coastguard Worker#
24*6236dae4SAndroid Build Coastguard Worker#
25*6236dae4SAndroid Build Coastguard Worker###########################################################################
26*6236dae4SAndroid Build Coastguard Worker#
27*6236dae4SAndroid Build Coastguard Worker# Check the OS/400 translating wrapper properly handles all translatable
28*6236dae4SAndroid Build Coastguard Worker# string options.
29*6236dae4SAndroid Build Coastguard Worker
30*6236dae4SAndroid Build Coastguard Workeruse strict;
31*6236dae4SAndroid Build Coastguard Workeruse warnings;
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard Workermy $root=$ARGV[0] || ".";
34*6236dae4SAndroid Build Coastguard Workermy $incdir = "$root/include/curl";
35*6236dae4SAndroid Build Coastguard Workermy $os400dir = "$root/packages/OS400";
36*6236dae4SAndroid Build Coastguard Workermy $errcount = 0;
37*6236dae4SAndroid Build Coastguard Worker
38*6236dae4SAndroid Build Coastguard Worker# Scan header file for string option definitions.
39*6236dae4SAndroid Build Coastguard Workersub scan_header {
40*6236dae4SAndroid Build Coastguard Worker    my ($f)=@_;
41*6236dae4SAndroid Build Coastguard Worker    my $line = "";
42*6236dae4SAndroid Build Coastguard Worker    my $incomment = 0;
43*6236dae4SAndroid Build Coastguard Worker    my @stringopts;
44*6236dae4SAndroid Build Coastguard Worker
45*6236dae4SAndroid Build Coastguard Worker    open(my $h, "<", "$f");
46*6236dae4SAndroid Build Coastguard Worker    while(<$h>) {
47*6236dae4SAndroid Build Coastguard Worker      s/^\s*(.*?)\s*$/$1/;      # Trim.
48*6236dae4SAndroid Build Coastguard Worker      # Remove multi-line comment trail.
49*6236dae4SAndroid Build Coastguard Worker      if($incomment) {
50*6236dae4SAndroid Build Coastguard Worker        if($_ !~ /.*?\*\/\s*(.*)$/) {
51*6236dae4SAndroid Build Coastguard Worker          next;
52*6236dae4SAndroid Build Coastguard Worker        }
53*6236dae4SAndroid Build Coastguard Worker        $_ = $1;
54*6236dae4SAndroid Build Coastguard Worker        $incomment = 0;
55*6236dae4SAndroid Build Coastguard Worker      }
56*6236dae4SAndroid Build Coastguard Worker      if($line ne "") {
57*6236dae4SAndroid Build Coastguard Worker        # Unfold line.
58*6236dae4SAndroid Build Coastguard Worker        $_ = "$line $1";
59*6236dae4SAndroid Build Coastguard Worker        $line = "";
60*6236dae4SAndroid Build Coastguard Worker      }
61*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^(.*)\\$/) {
62*6236dae4SAndroid Build Coastguard Worker        $line = "$1 ";
63*6236dae4SAndroid Build Coastguard Worker        next;
64*6236dae4SAndroid Build Coastguard Worker      }
65*6236dae4SAndroid Build Coastguard Worker      # Remove comments.
66*6236dae4SAndroid Build Coastguard Worker      while($_ =~ /^(.*?)\/\*.*?\*\/(.*)$/) {
67*6236dae4SAndroid Build Coastguard Worker        $_ = "$1 $2";
68*6236dae4SAndroid Build Coastguard Worker      }
69*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^(.*)\/\*/) {
70*6236dae4SAndroid Build Coastguard Worker        $_ = "$1 ";
71*6236dae4SAndroid Build Coastguard Worker        $incomment = 1;
72*6236dae4SAndroid Build Coastguard Worker      }
73*6236dae4SAndroid Build Coastguard Worker      s/^\s*(.*?)\s*$/$1/;      # Trim again.
74*6236dae4SAndroid Build Coastguard Worker      # Ignore preprocessor directives and blank lines.
75*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /^(?:#|$)/) {
76*6236dae4SAndroid Build Coastguard Worker        next;
77*6236dae4SAndroid Build Coastguard Worker      }
78*6236dae4SAndroid Build Coastguard Worker      # Handle lines that may be continued as if they were folded.
79*6236dae4SAndroid Build Coastguard Worker      if($_ !~ /[;,{}]$/ || $_ =~ /[^)],$/) {
80*6236dae4SAndroid Build Coastguard Worker        # Folded line.
81*6236dae4SAndroid Build Coastguard Worker        $line = $_;
82*6236dae4SAndroid Build Coastguard Worker        next;
83*6236dae4SAndroid Build Coastguard Worker      }
84*6236dae4SAndroid Build Coastguard Worker      # Keep string options only.
85*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /CURLOPT(?:DEPRECATED)?\s*\(\s*([^, \t]+)\s*,\s*CURLOPTTYPE_STRINGPOINT/) {
86*6236dae4SAndroid Build Coastguard Worker        push(@stringopts, $1);
87*6236dae4SAndroid Build Coastguard Worker      }
88*6236dae4SAndroid Build Coastguard Worker    }
89*6236dae4SAndroid Build Coastguard Worker    close $h;
90*6236dae4SAndroid Build Coastguard Worker    return @stringopts;
91*6236dae4SAndroid Build Coastguard Worker}
92*6236dae4SAndroid Build Coastguard Worker
93*6236dae4SAndroid Build Coastguard Worker# Scan packages/OS400/ccsidcurl.c for translatable string option cases.
94*6236dae4SAndroid Build Coastguard Workersub scan_wrapper_for_strings {
95*6236dae4SAndroid Build Coastguard Worker    my ($f)=@_;
96*6236dae4SAndroid Build Coastguard Worker    my $inarmor = 0;
97*6236dae4SAndroid Build Coastguard Worker    my @stringopts;
98*6236dae4SAndroid Build Coastguard Worker
99*6236dae4SAndroid Build Coastguard Worker    open(my $h, "<", "$f");
100*6236dae4SAndroid Build Coastguard Worker    while(<$h>) {
101*6236dae4SAndroid Build Coastguard Worker      if($_ =~ /(BEGIN|END) TRANSLATABLE STRING OPTIONS/) {
102*6236dae4SAndroid Build Coastguard Worker        $inarmor = $1 eq "BEGIN";
103*6236dae4SAndroid Build Coastguard Worker      }
104*6236dae4SAndroid Build Coastguard Worker      elsif($inarmor && $_ =~ /case\s+([^:]+):/) {
105*6236dae4SAndroid Build Coastguard Worker        push(@stringopts, $1);
106*6236dae4SAndroid Build Coastguard Worker      }
107*6236dae4SAndroid Build Coastguard Worker    }
108*6236dae4SAndroid Build Coastguard Worker    close $h;
109*6236dae4SAndroid Build Coastguard Worker    return @stringopts;
110*6236dae4SAndroid Build Coastguard Worker}
111*6236dae4SAndroid Build Coastguard Worker
112*6236dae4SAndroid Build Coastguard Worker# Get translatable string options from header file.
113*6236dae4SAndroid Build Coastguard Workermy @stringdefs = scan_header("$incdir/curl.h");
114*6236dae4SAndroid Build Coastguard Worker
115*6236dae4SAndroid Build Coastguard Worker# Get translated string options.
116*6236dae4SAndroid Build Coastguard Workermy @stringrefs = scan_wrapper_for_strings("$os400dir/ccsidcurl.c");
117*6236dae4SAndroid Build Coastguard Worker
118*6236dae4SAndroid Build Coastguard Worker# Lists should be equal: check differences.
119*6236dae4SAndroid Build Coastguard Workermy %diff;
120*6236dae4SAndroid Build Coastguard Worker@diff{@stringdefs} = 0..$#stringdefs;
121*6236dae4SAndroid Build Coastguard Workerdelete @diff{@stringrefs};
122*6236dae4SAndroid Build Coastguard Worker
123*6236dae4SAndroid Build Coastguard Workerforeach(keys %diff) {
124*6236dae4SAndroid Build Coastguard Worker  print "$_ is not translated\n";
125*6236dae4SAndroid Build Coastguard Worker  delete $diff{$_};
126*6236dae4SAndroid Build Coastguard Worker  $errcount++;
127*6236dae4SAndroid Build Coastguard Worker}
128*6236dae4SAndroid Build Coastguard Worker
129*6236dae4SAndroid Build Coastguard Worker@diff{@stringrefs} = 0..$#stringrefs;
130*6236dae4SAndroid Build Coastguard Workerdelete @diff{@stringdefs};
131*6236dae4SAndroid Build Coastguard Worker
132*6236dae4SAndroid Build Coastguard Workerforeach(keys %diff) {
133*6236dae4SAndroid Build Coastguard Worker  print "translated option $_ does not exist\n";
134*6236dae4SAndroid Build Coastguard Worker  $errcount++;
135*6236dae4SAndroid Build Coastguard Worker}
136*6236dae4SAndroid Build Coastguard Worker
137*6236dae4SAndroid Build Coastguard Worker# Check translated string option cases are sorted alphanumerically.
138*6236dae4SAndroid Build Coastguard Workerforeach(my $i = 1; $i < $#stringrefs; $i++) {
139*6236dae4SAndroid Build Coastguard Worker  if($stringrefs[$i] lt $stringrefs[$i - 1]) {
140*6236dae4SAndroid Build Coastguard Worker    print("Translated string options are not sorted (" . $stringrefs[$i - 1] .
141*6236dae4SAndroid Build Coastguard Worker          "/" . $stringrefs[$i] . ")\n");
142*6236dae4SAndroid Build Coastguard Worker    $errcount++;
143*6236dae4SAndroid Build Coastguard Worker    last;
144*6236dae4SAndroid Build Coastguard Worker  }
145*6236dae4SAndroid Build Coastguard Worker}
146*6236dae4SAndroid Build Coastguard Worker
147*6236dae4SAndroid Build Coastguard Workerexit !!$errcount;
148