annotate tests/test-quotearg.h @ 16817:7747cb9b54b9

unistd_h: make it easier to avoid sys_types_h This is useful for Emacs, which has its own method of porting to Windows, and which therefore does not need the sys_types_h module. * m4/off_t.m4: New file, defining gl_TYPE_OFF_T, which contains code moved here from gl_SYS_TYPES_H. * m4/sys_types_h.m4 (gl_SYS_TYPES_H): Require it instead of using the code directly. * m4/unistd_h.m4 (gl_UNISTD_H): Require gl_TYPE_OFF_T, not gl_SYS_TYPES_H. * modules/sys_types (Files): * modules/unistd (Files): Add m4/off_t.m4.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 04 May 2012 13:05:31 -0700
parents bb182ee4a09d
children e542fd46ad6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13386
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of quotearg family of functions.
16201
8250f2777afc maint: update all copyright year number ranges
Jim Meyering <meyering@redhat.com>
parents: 14079
diff changeset
2 Copyright (C) 2008-2012 Free Software Foundation, Inc.
13386
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 the Free Software Foundation; either version 3, or (at your option)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 any later version.
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
16366
bb182ee4a09d maint: replace FSF snail-mail addresses with URLs
Paul Eggert <eggert@cs.ucla.edu>
parents: 16201
diff changeset
15 along with this program; if not, see <http://www.gnu.org/licenses/>. */
13386
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 /* Written by Eric Blake <ebb9@byu.net>, 2008. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 struct result_strings {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20 char const *str1; /* Translation of "". */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 char const *str2; /* Translation of "\0""1\0". */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22 size_t len2; /* Length of str2. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23 char const *str3; /* Translation of "simple". */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 char const *str4; /* Translation of " \t\n'\"\033?""?/\\". */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 char const *str5; /* Translation of "a:b". */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 char const *str6; /* Translation of "a\\b". */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 char const *str7a; /* Translation of LQ RQ, in ASCII charset. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28 char const *str7b; /* Translation of LQ RQ, in Latin1 or UTF-8 charset. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 };
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31 struct result_groups {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32 struct result_strings group1; /* Via quotearg_buffer. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 struct result_strings group2; /* Via quotearg{,_mem}. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 struct result_strings group3; /* Via quotearg_colon{,_mem}. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 };
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 /* These quotes are borrowed from a pt_PT.utf8 translation. */
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38 # define LQ "\302\253"
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 # define RQ "\302\273"
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 # define LQ_ENC "\\302\\253"
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 # define RQ_ENC "\\302\\273"
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 # define RQ_ESC "\\\302\273"
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 static struct result_strings inputs = {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 "", "\0001\0", 3, "simple", " \t\n'\"\033?""?/\\", "a:b", "a\\b",
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 LQ RQ, NULL
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 };
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 static void
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50 compare (char const *a, size_t la, char const *b, size_t lb)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 ASSERT (la == lb);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 ASSERT (memcmp (a, b, la) == 0);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54 ASSERT (b[lb] == '\0');
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 }
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 static void
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 compare_strings (char *(func) (char const *, size_t *),
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 struct result_strings *results, bool ascii_only)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 size_t len;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 char *p;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 len = 0;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 p = func (inputs.str1, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 compare (results->str1, strlen (results->str1), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 len = inputs.len2;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69 p = func (inputs.str2, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 compare (results->str2, results->len2, p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 len = SIZE_MAX;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 p = func (inputs.str3, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 compare (results->str3, strlen (results->str3), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 len = strlen (inputs.str4);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 p = func (inputs.str4, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 compare (results->str4, strlen (results->str4), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 len = SIZE_MAX;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 p = func (inputs.str5, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82 compare (results->str5, strlen (results->str5), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84 len = strlen (inputs.str6);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 p = func (inputs.str6, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
86 compare (results->str6, strlen (results->str6), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88 len = strlen (inputs.str7a);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89 p = func (inputs.str7a, &len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
90 if (ascii_only)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 compare (results->str7a, strlen (results->str7a), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 else
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
93 compare (results->str7b, strlen (results->str7b), p, len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
94 }
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
95
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
96 static char *
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
97 use_quotearg_buffer (const char *str, size_t *len)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
98 {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
99 static char buf[100];
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
100 size_t size;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
101 memset (buf, 0xa5, 100);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
102 size = quotearg_buffer (buf, 100, str, *len, NULL);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
103 *len = size;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
104 ASSERT ((unsigned char) buf[size + 1] == 0xa5);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
105 return buf;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
106 }
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
107
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
108 static char *
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
109 use_quotearg (const char *str, size_t *len)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
110 {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
111 char *p = *len == SIZE_MAX ? quotearg (str) : quotearg_mem (str, *len);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
112 *len = strlen (p);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
113 return p;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
114 }
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
115
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
116 static char *
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
117 use_quote_double_quotes (const char *str, size_t *len)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
118 {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
119 char *p = *len == SIZE_MAX ? quotearg_char (str, '"')
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
120 : quotearg_char_mem (str, *len, '"');
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
121 *len = strlen (p);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
122 return p;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
123 }
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
124
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
125 static char *
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
126 use_quotearg_colon (const char *str, size_t *len)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
127 {
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
128 char *p = (*len == SIZE_MAX ? quotearg_colon (str)
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
129 : quotearg_colon_mem (str, *len));
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
130 *len = strlen (p);
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
131 return p;
36af21ca41f7 Reduce dependencies.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
132 }