• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #undef G_DISABLE_ASSERT
2 #undef G_LOG_DOMAIN
3 
4 #include <stdarg.h>
5 #include <string.h>
6 #include <glib.h>
7 
8 static void test_format (const gchar *format,
9 			 const gchar *expected, ...) G_GNUC_PRINTF (1, 3);
10 
11 static gboolean error = FALSE;
12 
13 static void
test(const gchar * original,const gchar * expected)14 test (const gchar *original,
15       const gchar *expected)
16 {
17   gchar *result = g_markup_escape_text (original, -1);
18 
19   if (strcmp (result, expected) != 0)
20     {
21       g_printerr ("g_markup_escape_text(): expected '%s', got '%s'\n",
22 		  expected, result);
23       error = TRUE;
24     }
25 
26   g_free (result);
27 }
28 
29 static void
test_unichar(gunichar c,gboolean entity)30 test_unichar (gunichar c,
31               gboolean entity)
32 {
33   gint len;
34   gchar outbuf[7], expected[12];
35 
36   len = g_unichar_to_utf8 (c, outbuf);
37   outbuf[len] = 0;
38 
39   if (entity)
40     g_snprintf (expected, 12, "&#x%x;", c);
41   else
42     strcpy (expected, outbuf);
43 
44   test (outbuf, expected);
45 }
46 
47 static void
test_format(const gchar * format,const gchar * expected,...)48 test_format (const gchar *format,
49 	     const gchar *expected,
50 	     ...)
51 {
52   gchar *result;
53 
54   va_list args;
55 
56   va_start (args, expected);
57   result = g_markup_vprintf_escaped (format, args);
58   va_end (args);
59 
60   if (strcmp (result, expected) != 0)
61     {
62       g_printerr ("g_markup_printf_escaped(): expected '%s', got '%s'\n",
63 		  expected, result);
64       error = TRUE;
65     }
66 
67   g_free (result);
68 }
69 
main(int argc,char ** argv)70 int main (int argc, char **argv)
71 {
72   /* Tests for g_markup_escape_text() */
73   test ("&", "&amp;");
74   test ("<", "&lt;");
75   test (">", "&gt;");
76   test ("'", "&apos;");
77   test ("\"", "&quot;");
78 
79   test ("", "");
80   test ("A", "A");
81   test ("A&", "A&amp;");
82   test ("&A", "&amp;A");
83   test ("A&A", "A&amp;A");
84   test ("&&A", "&amp;&amp;A");
85   test ("A&&", "A&amp;&amp;");
86   test ("A&&A", "A&amp;&amp;A");
87   test ("A&A&A", "A&amp;A&amp;A");
88   test ("A&#23;A", "A&amp;#23;A");
89   test ("A&#xa;A", "A&amp;#xa;A");
90   test_unichar (0x1, TRUE);
91   test_unichar (0x8, TRUE);
92   test_unichar (0x9, FALSE);
93   test_unichar (0xa, FALSE);
94   test_unichar (0xb, TRUE);
95   test_unichar (0xc, TRUE);
96   test_unichar (0xd, FALSE);
97   test_unichar (0xe, TRUE);
98   test_unichar (0x1f, TRUE);
99   test_unichar (0x20, FALSE);
100   test_unichar (0x7e, FALSE);
101   test_unichar (0x7f, TRUE);
102   test_unichar (0x84, TRUE);
103   test_unichar (0x85, FALSE);
104   test_unichar (0x86, TRUE);
105   test_unichar (0x9f, TRUE);
106   test_unichar (0xa0, FALSE);
107 
108   /* Tests for g_markup_printf_escaped() */
109   test_format ("A", "A");
110   test_format ("A%s", "A&amp;", "&");
111   test_format ("%sA", "&amp;A", "&");
112   test_format ("A%sA", "A&amp;A", "&");
113   test_format ("%s%sA", "&amp;&amp;A", "&", "&");
114   test_format ("A%s%s", "A&amp;&amp;", "&", "&");
115   test_format ("A%s%sA", "A&amp;&amp;A", "&", "&");
116   test_format ("A%sA%sA", "A&amp;A&amp;A", "&", "&");
117 
118   test_format ("%s", "&lt;B&gt;&amp;",
119 	       "<B>&");
120   test_format ("%c%c", "&lt;&amp;",
121 	       '<', '&');
122   test_format (".%c.%c.", ".&lt;.&amp;.",
123 	       '<', '&');
124   test_format ("%s", "",
125 	       "");
126   test_format ("%-5s", "A    ",
127 	       "A");
128   test_format ("%2$s%1$s", "B.A.",
129 	       "A.", "B.");
130 
131   return error ? 1 : 0;
132 }
133