13b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie/* 23b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * Copyright © 2007 Ryan Lortie 33b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * 43b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * This program is free software: you can redistribute it and/or modify 53b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * it under the terms of the GNU Lesser General Public License as 63b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * published by the Free Software Foundation; either version 2 of the 73b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * License, or (at your option) any later version. 83b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * 93b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie * See the included COPYING file for more information. 103b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie */ 113b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 123b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#include <string.h> 133b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#include <glib.h> 143b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 153b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortiestatic void 163b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortiestart (GMarkupParseContext *context, 173b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char *element_name, 183b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char **attribute_names, 193b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char **attribute_values, 203b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie gpointer user_data, 213b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie GError **error) 223b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie{ 233b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie GString *string = user_data; 243b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie gboolean result; 253b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 263b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define collect(...) \ 273b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_markup_collect_attributes (element_name, attribute_names, \ 283b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie attribute_values, error, __VA_ARGS__, \ 293b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_COLLECT_INVALID) 303b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define BOOL G_MARKUP_COLLECT_BOOLEAN 313b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define OPTBOOL G_MARKUP_COLLECT_BOOLEAN | G_MARKUP_COLLECT_OPTIONAL 323b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define TRI G_MARKUP_COLLECT_TRISTATE 333b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define STR G_MARKUP_COLLECT_STRING 343b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define STRDUP G_MARKUP_COLLECT_STRDUP 353b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define OPTSTR G_MARKUP_COLLECT_STRING | G_MARKUP_COLLECT_OPTIONAL 363b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define OPTDUP G_MARKUP_COLLECT_STRDUP | G_MARKUP_COLLECT_OPTIONAL 373b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie#define n(x) ((x)?(x):"(null)") 383b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 393b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (strcmp (element_name, "bool") == 0) 403b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 413b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie gboolean mb = 2, ob = 2, tri = 2; 423b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 433b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie result = collect (BOOL, "mb", &mb, 443b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie OPTBOOL, "ob", &ob, 453b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie TRI, "tri", &tri); 463b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 473b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_assert (result || 483b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie (mb == FALSE && ob == FALSE && tri != TRUE && tri != FALSE)); 493b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 503b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (tri != FALSE && tri != TRUE) 513b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tri = -1; 523b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 533b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_string_append_printf (string, "<bool(%d) %d %d %d>", 543b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie result, mb, ob, tri); 553b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 563b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 573b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie else if (strcmp (element_name, "str") == 0) 583b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 593b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char *cm, *co; 603b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie char *am, *ao; 613b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 623b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie result = collect (STR, "cm", &cm, 633b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie STRDUP, "am", &am, 643b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie OPTDUP, "ao", &ao, 653b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie OPTSTR, "co", &co); 663b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 673b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_assert (result || 683b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie (cm == NULL && am == NULL && ao == NULL && co == NULL)); 693b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 703b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_string_append_printf (string, "<str(%d) %s %s %s %s>", 713b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie result, n (cm), n (am), n (ao), n (co)); 723b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 733b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_free (am); 743b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_free (ao); 753b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 763b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie} 773b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 783b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortiestatic GMarkupParser parser = { start }; 793b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 803b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortiestruct test 813b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie{ 823b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char *document; 833b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char *result; 843b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie GMarkupError error_code; 853b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie const char *error_info; 863b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie}; 873b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 883b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortiestatic struct test tests[] = 893b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie{ 903b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='y'>", "<bool(1) 1 0 -1>", 913b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_PARSE, "'bool'" }, 923b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 933b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='false'/>", "<bool(1) 0 0 -1>" }, 943b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='true'/>", "<bool(1) 1 0 -1>" }, 953b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='t' ob='f' tri='1'/>", "<bool(1) 1 0 1>" }, 963b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='y' ob='n' tri='0'/>", "<bool(1) 1 0 0>" }, 973b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 983b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool ob='y'/>", "<bool(0) 0 0 -1>", 993b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_MISSING_ATTRIBUTE, "'mb'" }, 1003b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1013b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='y' mb='y'/>", "<bool(0) 0 0 -1>", 1023b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_INVALID_CONTENT, "'mb'" }, 1033b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1043b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<bool mb='y' tri='y' tri='n'/>", "<bool(0) 0 0 -1>", 1053b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_INVALID_CONTENT, "'tri'" }, 1063b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1073b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str cm='x' am='y'/>", "<str(1) x y (null) (null)>" }, 1083b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1093b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str am='x' co='y'/>", "<str(0) (null) (null) (null) (null)>", 1103b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_MISSING_ATTRIBUTE, "'cm'" }, 1113b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1123b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str am='x'/>", "<str(0) (null) (null) (null) (null)>", 1133b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_MISSING_ATTRIBUTE, "'cm'" }, 1143b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1153b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str am='x' cm='x' am='y'/>", "<str(0) (null) (null) (null) (null)>", 1163b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_INVALID_CONTENT, "'am'" }, 1173b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1183b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str am='x' qm='y' cm='x'/>", "<str(0) (null) (null) (null) (null)>", 1193b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "'qm'" }, 1203b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1213b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' cm='x'/>", "<str(0) (null) (null) (null) (null)>", 1223b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_INVALID_CONTENT, "'am'" }, 1233b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1243b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str cm='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x' am='x'/>", "<str(0) (null) (null) (null) (null)>", 1253b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie G_MARKUP_ERROR_INVALID_CONTENT, "'am'" }, 1263b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1273b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { "<str a='x' b='x' c='x' d='x' e='x' f='x' g='x' h='x' i='x' j='x' k='x' l='x' m='x' n='x' o='x' p='x' q='x' r='x' s='x' t='x' u='x' v='x' w='x' x='x' y='x' z='x' aa='x' bb='x' cc='x' dd='x' ee='x' ff='x' gg='x' hh='x' ii='x' jj='x' kk='x' ll='x' mm='x' nn='x' oo='x' pp='x' qq='x' rr='x' ss='x' tt='x' uu='x' vv='x' ww='x' xx='x' yy='x' zz='x' am='x' cm='x'/>", 1283b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "<str(0) (null) (null) (null) (null)>", 129b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, "'a'" }, 130b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen 131b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen { "<bool mb='ja'/>", "<bool(0) 0 0 -1>", 132b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen G_MARKUP_ERROR_INVALID_CONTENT, "'mb'" }, 133b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen 134b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen { "<bool mb='nein'/>", "<bool(0) 0 0 -1>", 135b9743a23ddd083aca5ed8db4e9280df2ed6424fcMatthias Clasen G_MARKUP_ERROR_INVALID_CONTENT, "'mb'" } 1363b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie}; 1373b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1383b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortieint 1393b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortiemain (int argc, char **argv) 1403b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie{ 1413b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie gboolean verbose = FALSE; 1423b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie int i; 1433b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1443b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (argc > 1) 1453b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 1463b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (argc != 2 || strcmp (argv[1], "-v") != 0) 1473b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 1483b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_print ("error: call with no arguments or '-v' for verbose\n"); 1493b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie return 1; 1503b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 1513b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1523b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie verbose = TRUE; 1533b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 1543b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1553b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie for (i = 0; i < G_N_ELEMENTS (tests); i++) 1563b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 1573b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie GMarkupParseContext *ctx; 1583b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie GError *error = NULL; 1593b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie GString *string; 1603b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie gboolean result; 1613b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1623b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie string = g_string_new (""); 1633b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie ctx = g_markup_parse_context_new (&parser, 0, string, NULL); 1643b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie result = g_markup_parse_context_parse (ctx, 1653b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tests[i].document, 1663b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie -1, &error); 1673b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (result) 1683b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie result = g_markup_parse_context_end_parse (ctx, &error); 1693b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1703b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (verbose) 1713b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_print ("%d: %s:\n (error %d, \"%s\")\n %s\n\n", 1723b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie i, tests[i].document, 1733b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie error ? error->code : 0, 1743b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie error ? error->message : "(no error)", 1753b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie string->str); 1763b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1773b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (result) 1783b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 1793b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (error != NULL) 1803b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_error ("parser successful but error is set: " 1813b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "%s(%d) '%s'", g_quark_to_string (error->domain), 1823b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie error->code, error->message); 1833b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1843b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (tests[i].error_code != 0) 1853b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_error ("parser succeeded on test %d ('%s') but " 1863b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "we expected a failure with code %d\n", i, 1873b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tests[i].document, tests[i].error_code); 1883b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 1893b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie else 1903b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie { 1913b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (error->domain != G_MARKUP_ERROR) 1923b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_error ("error occured on test %d ('%s') but is not in " 1933b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "the GMarkupError domain, but rather '%s'", i, 1943b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tests[i].document, g_quark_to_string (error->domain)); 1953b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 1963b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (error->code != tests[i].error_code) 1973b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_error ("failure expected with test %d ('%s') but it " 1983b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "has error code %d (we expected code %d)", i, 1993b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tests[i].document, error->code, tests[i].error_code); 2003b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 2013b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (strstr (error->message, tests[i].error_info) == NULL) 2023b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_error ("failure message on test %d ('%s') fails " 2033b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "to mention '%s' in the error message", i, 2043b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tests[i].document, tests[i].error_info); 2053b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 2063b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 2073b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (strcmp (tests[i].result, string->str) != 0) 2083b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_error ("result on test %d ('%s') expected to be '%s' " 2093b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie "but came out as '%s'", i, tests[i].document, 2103b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie tests[i].result, string->str); 2113b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 2123b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_markup_parse_context_free (ctx); 2133b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_string_free (string, TRUE); 2143b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_clear_error (&error); 2153b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie } 2163b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 2173b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie if (verbose) 2183b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie g_print ("\n*** all tests passed ***\n\n"); 2193b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie 2203b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie return 0; 2213b4c9c92ddc8336e93ab1197a1fc4f88ac456885Ryan Lortie} 222