1 /* Test of quotearg family of functions.
2 Copyright (C) 2008-2020 Free Software Foundation, Inc.
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 3, or (at your option)
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, see <https://www.gnu.org/licenses/>. */
17 /* Written by Eric Blake <ebb9@byu.net>, 2008. */
19 struct result_strings
{
20 char const *str1
; /* Translation of "". */
21 char const *str2
; /* Translation of "\0""1\0". */
22 size_t len2
; /* Length of str2. */
23 char const *str3
; /* Translation of "simple". */
24 char const *str4
; /* Translation of " \t\n'\"\033?""?/\\". */
25 char const *str5
; /* Translation of "a:b". */
26 char const *str6
; /* Translation of "a\\b". */
27 char const *str7
; /* Translation of "a' b". */
28 char const *str8a
; /* Translation of LQ RQ, in ASCII charset. */
29 char const *str8b
; /* Translation of LQ RQ, in Latin1 or UTF-8 charset. */
32 struct result_groups
{
33 struct result_strings group1
; /* Via quotearg_buffer. */
34 struct result_strings group2
; /* Via quotearg{,_mem}. */
35 struct result_strings group3
; /* Via quotearg_colon{,_mem}. */
38 /* These quotes are borrowed from a pt_PT.utf8 translation. */
39 # define LQ "\302\253"
40 # define RQ "\302\273"
41 # define LQ_ENC "\\302\\253"
42 # define RQ_ENC "\\302\\273"
43 # define RQ_ESC "\\\302\273"
45 static struct result_strings inputs
= {
46 "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b",
51 compare (char const *a
, size_t la
, char const *b
, size_t lb
)
54 ASSERT (memcmp (a
, b
, la
) == 0);
55 ASSERT (b
[lb
] == '\0');
59 compare_strings (char *(func
) (char const *, size_t *),
60 struct result_strings
*results
, bool ascii_only
)
66 p
= func (inputs
.str1
, &len
);
67 compare (results
->str1
, strlen (results
->str1
), p
, len
);
70 p
= func (inputs
.str2
, &len
);
71 compare (results
->str2
, results
->len2
, p
, len
);
74 p
= func (inputs
.str3
, &len
);
75 compare (results
->str3
, strlen (results
->str3
), p
, len
);
77 len
= strlen (inputs
.str4
);
78 p
= func (inputs
.str4
, &len
);
79 compare (results
->str4
, strlen (results
->str4
), p
, len
);
82 p
= func (inputs
.str5
, &len
);
83 compare (results
->str5
, strlen (results
->str5
), p
, len
);
85 len
= strlen (inputs
.str6
);
86 p
= func (inputs
.str6
, &len
);
87 compare (results
->str6
, strlen (results
->str6
), p
, len
);
89 len
= strlen (inputs
.str7
);
90 p
= func (inputs
.str7
, &len
);
91 compare (results
->str7
, strlen (results
->str7
), p
, len
);
93 len
= strlen (inputs
.str8a
);
94 p
= func (inputs
.str8a
, &len
);
96 compare (results
->str8a
, strlen (results
->str8a
), p
, len
);
98 compare (results
->str8b
, strlen (results
->str8b
), p
, len
);
102 use_quotearg_buffer (const char *str
, size_t *len
)
104 static char buf
[100];
106 memset (buf
, 0xa5, 100);
107 size
= quotearg_buffer (buf
, 100, str
, *len
, NULL
);
109 ASSERT ((unsigned char) buf
[size
+ 1] == 0xa5);
114 use_quotearg (const char *str
, size_t *len
)
116 char *p
= *len
== SIZE_MAX
? quotearg (str
) : quotearg_mem (str
, *len
);
122 use_quotearg_colon (const char *str
, size_t *len
)
124 char *p
= (*len
== SIZE_MAX
? quotearg_colon (str
)
125 : quotearg_colon_mem (str
, *len
));