Made percent_escape more general.
[gnupg.git] / jnlib / t-stringhelp.c
1 /* t-stringhelp.c - Regression tests for stringhelp.c
2  * Copyright (C) 2007 Free Software Foundation, Inc.
3  *
4  * This file is part of JNLIB.
5  *
6  * JNLIB is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as
8  * published by the Free Software Foundation; either version 2.1 of
9  * the License, or (at your option) any later version.
10  *
11  * JNLIB is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA.
20  */
21
22 #include <config.h>
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26
27 #include "stringhelp.h"
28
29 #include "t-support.h"
30
31
32
33 static void
34 test_percent_escape (void)
35 {
36   char *result;
37   static struct {
38     const char *extra; 
39     const char *value; 
40     const char *expected;
41   } tests[] = 
42     {
43       { NULL, "", "" },
44       { NULL, "%", "%25" },
45       { NULL, "%%", "%25%25" },
46       { NULL, " %", " %25" },
47       { NULL, ":", "%3a" },
48       { NULL, " :", " %3a" },
49       { NULL, ": ", "%3a " },
50       { NULL, " : ", " %3a " },
51       { NULL, "::", "%3a%3a" },
52       { NULL, ": :", "%3a %3a" },
53       { NULL, "%:", "%25%3a" },
54       { NULL, ":%", "%3a%25" },
55       { "\\\n:", ":%", "%3a%25" },
56       { "\\\n:", "\\:%", "%5c%3a%25" },
57       { "\\\n:", "\n:%", "%0a%3a%25" },
58       { "\\\n:", "\xff:%", "\xff%3a%25" },
59       { "\\\n:", "\xfe:%", "\xfe%3a%25" },
60       { "\\\n:", "\x01:%", "\x01%3a%25" },
61       { "\x01",  "\x01:%", "%01%3a%25" },
62       { "\xfe",  "\xfe:%", "%fe%3a%25" },
63       { "\xfe",  "\xff:%", "\xff%3a%25" },
64
65       { NULL, NULL, NULL }
66     };
67   int testno;
68
69   result = percent_escape (NULL, NULL);
70   if (result)
71     fail (0);
72   for (testno=0; tests[testno].value; testno++)
73     {
74       result = percent_escape (tests[testno].value, tests[testno].extra);
75       if (!result)
76         fail (testno);
77       if (strcmp (result, tests[testno].expected))
78         fail (testno);
79       xfree (result);
80     }
81
82 }
83
84
85
86
87 int
88 main (int argc, char **argv)
89 {
90   test_percent_escape ();
91
92   return 0;
93 }
94