Line data Source code
1 : /* t-percent.c - Module test for percent.c
2 : * Copyright (C) 2008 Free Software Foundation, Inc.
3 : *
4 : * This file is part of GnuPG.
5 : *
6 : * GnuPG is free software; you can redistribute it and/or modify
7 : * it under the terms of the GNU General Public License as published by
8 : * the Free Software Foundation; either version 3 of the License, or
9 : * (at your option) any later version.
10 : *
11 : * GnuPG is distributed in the hope that it will be useful,
12 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : * GNU General Public License for more details.
15 : *
16 : * You should have received a copy of the GNU General Public License
17 : * along with this program; if not, see <https://www.gnu.org/licenses/>.
18 : */
19 :
20 : #include <config.h>
21 : #include <stdio.h>
22 : #include <stdlib.h>
23 : #include <assert.h>
24 :
25 : #include "util.h"
26 :
27 : #define pass() do { ; } while(0)
28 : #define fail(a) do { fprintf (stderr, "%s:%d: test %d failed\n",\
29 : __FILE__,__LINE__, (a)); \
30 : exit (1); \
31 : } while(0)
32 :
33 : static void
34 1 : test_percent_plus_escape (void)
35 : {
36 : static struct {
37 : const char *string;
38 : const char *expect;
39 : } tbl[] = {
40 : {
41 : "",
42 : ""
43 : }, {
44 : "a",
45 : "a",
46 : }, {
47 : " ",
48 : "+",
49 : }, {
50 : " ",
51 : "++"
52 : }, {
53 : "+ +",
54 : "%2B+%2B"
55 : }, {
56 : "\" \"",
57 : "%22+%22"
58 : }, {
59 : "%22",
60 : "%2522"
61 : }, {
62 : "%% ",
63 : "%25%25+"
64 : }, {
65 : "\n ABC\t",
66 : "%0A+ABC%09"
67 : }, { NULL, NULL }
68 : };
69 : char *buf, *buf2;
70 : int i;
71 : size_t len;
72 :
73 10 : for (i=0; tbl[i].string; i++)
74 : {
75 9 : buf = percent_plus_escape (tbl[i].string);
76 9 : if (!buf)
77 : {
78 0 : fprintf (stderr, "out of core: %s\n", strerror (errno));
79 0 : exit (2);
80 : }
81 9 : if (strcmp (buf, tbl[i].expect))
82 0 : fail (i);
83 9 : buf2 = percent_plus_unescape (buf, 0);
84 9 : if (!buf2)
85 : {
86 0 : fprintf (stderr, "out of core: %s\n", strerror (errno));
87 0 : exit (2);
88 : }
89 9 : if (strcmp (buf2, tbl[i].string))
90 0 : fail (i);
91 9 : xfree (buf2);
92 : /* Now test the inplace conversion. */
93 9 : len = percent_plus_unescape_inplace (buf, 0);
94 9 : buf[len] = 0;
95 9 : if (strcmp (buf, tbl[i].string))
96 0 : fail (i);
97 9 : xfree (buf);
98 : }
99 1 : }
100 :
101 :
102 :
103 : int
104 1 : main (int argc, char **argv)
105 : {
106 : (void)argc;
107 : (void)argv;
108 :
109 : /* FIXME: We escape_unescape is not tested - only
110 : percent_plus_unescape. */
111 1 : test_percent_plus_escape ();
112 :
113 1 : return 0;
114 : }
|