27 #include <sys/types.h>
34 #include <glib/gstdio.h>
37 #include "sixtp-dom-parsers.h"
38 #include "sixtp-parsers.h"
39 #include "test-file-stuff.h"
40 #include "test-stuff.h"
41 #include "io-gncxml-gen.h"
42 #include "sixtp-utils.h"
50 files_return(
int ret,
const char* msg)
57 files_compare(
const gchar* f1,
const gchar* f2)
62 int amount_read1, amount_read2;
64 fd1 = g_open(f1, O_RDONLY, 0);
65 fd2 = g_open(f2, O_RDONLY, 0);
71 amount_read1 = read(fd1, buf1, 512);
72 amount_read2 = read(fd2, buf2, 512);
74 if (amount_read1 > amount_read2)
75 return files_return(1,
"read1 > read2");
76 if (amount_read1 < amount_read2)
77 return files_return(-1,
"read1 < read2");
79 if ((memcmp_ret = memcmp(buf1, buf2, amount_read1)) != 0)
81 return files_return(memcmp_ret,
"memcmp return");
85 while (amount_read1 == 512);
91 write_dom_node_to_file(xmlNodePtr node,
int fd)
95 out = fdopen(fd,
"w");
97 xmlElemDump(out, NULL, node);
103 print_dom_tree(gpointer data_for_children, GSList* data_from_children,
104 GSList* sibling_data, gpointer parent_data,
105 gpointer global_data, gpointer *result,
const gchar *tag)
107 if (parent_data == NULL)
109 xmlElemDump((FILE*)global_data, NULL, (xmlNodePtr)data_for_children);
110 xmlFreeNode(data_for_children);
116 check_dom_tree_version(xmlNodePtr node, gchar *verstr)
120 g_return_val_if_fail(node, FALSE);
121 g_return_val_if_fail(verstr, FALSE);
122 g_return_val_if_fail(node->properties, FALSE);
123 g_return_val_if_fail(node->properties->xmlAttrPropertyValue, FALSE);
124 g_return_val_if_fail(node->properties->xmlAttrPropertyValue->content,
127 verteststr = (
char*) node->properties->xmlAttrPropertyValue->content;
128 if (g_strcmp0(verstr, verteststr) == 0)
139 equals_node_val_vs_string(xmlNodePtr node,
const gchar* str)
143 g_return_val_if_fail(node, FALSE);
144 g_return_val_if_fail(str, FALSE);
146 cmp1 = dom_tree_to_text(node);
152 else if (g_strcmp0(cmp1, str) == 0)
159 printf(
"Differing types: node:`%s' vs string:`%s'\n", cmp1, str);
166 equals_node_val_vs_int(xmlNodePtr node, gint64 val)
171 g_return_val_if_fail(node, FALSE);
173 text = dom_tree_to_text(node);
175 if (!string_to_gint64(text, &test_val))
183 return val == test_val;
187 equals_node_val_vs_boolean(xmlNodePtr node, gboolean val)
189 return equals_node_val_vs_string(node, val ?
"TRUE" :
"FALSE");
193 equals_node_val_vs_guid(xmlNodePtr node,
const GncGUID *
id)
197 g_return_val_if_fail(node, FALSE);
198 g_return_val_if_fail(
id, FALSE);
200 cmpid = dom_tree_to_guid(node);
202 g_return_val_if_fail(cmpid, FALSE);
204 if (guid_compare(cmpid,
id) == 0)
217 equals_node_val_vs_commodity(xmlNodePtr node,
const gnc_commodity *com,
222 g_return_val_if_fail(node, FALSE);
223 g_return_val_if_fail(com, FALSE);
225 cmpcom = dom_tree_to_commodity_ref_no_engine(node, book);
227 g_return_val_if_fail(cmpcom, FALSE);
242 equals_node_val_vs_kvp_frame(xmlNodePtr node,
const KvpFrame *frm)
246 g_return_val_if_fail(node, FALSE);
247 g_return_val_if_fail(frm, FALSE);
249 cmpfrm = dom_tree_to_kvp_frame(node);
251 g_return_val_if_fail(cmpfrm, FALSE);
266 printf(
"%s vs %s\n", frm1str, frm2str);
277 equals_node_val_vs_date(xmlNodePtr node,
const Timespec tm)
279 Timespec tm_test = dom_tree_to_timespec(node);
281 if (tm_test.tv_sec == tm.tv_sec && tm_test.tv_nsec == tm.tv_nsec)
294 just_dom_tree_end_handler(gpointer data_for_children,
295 GSList* data_from_children, GSList* sibling_data,
296 gpointer parent_data, gpointer global_data,
297 gpointer *result,
const gchar *tag)
299 xmlNodePtr tree = (xmlNodePtr)data_for_children;
300 xmlNodePtr *globaldata = (xmlNodePtr*)global_data;
314 g_return_val_if_fail(tree, FALSE);
322 grab_file_doc(
const char *filename)
326 gpointer parse_result = NULL;
328 parser = sixtp_dom_parser_new(just_dom_tree_end_handler, NULL, NULL);
330 sixtp_parse_file(parser, filename, NULL, &ret, &parse_result);
336 test_load_file(
const char *filename, gxpf_callback cb,
sixtp *top_parser,
341 node = grab_file_doc(filename);
345 failure_args(
"failure of libxml to parse file", __FILE__, __LINE__,
350 if (!gnc_xml_parse_file(top_parser, filename, cb, node->children, book))
352 failure_args(
"failure to parse file", __FILE__, __LINE__,
360 test_files_in_dir(
int argc,
char **argv, gxpf_callback cb,
361 sixtp *parser,
const char *parser_tag,
369 top_parser = sixtp_new();
370 main_parser = sixtp_new();
372 if (!sixtp_add_some_sub_parsers(top_parser, TRUE,
"gnc-v2", main_parser,
376 if (!sixtp_add_some_sub_parsers(main_parser, TRUE, parser_tag, parser,
381 for (count = 1; count < argc; count++)
383 struct stat file_info;
384 const char *to_open = argv[count];
385 if (g_stat(to_open, &file_info) != 0)
387 printf(
"cannot stat %s.\n", to_open);
388 failure(
"unable to stat file");
392 if (!S_ISDIR(file_info.st_mode))
395 printf(
"testing load of file \"%s\":\n", argv[count] );
397 test_load_file(to_open, cb, top_parser, book);
402 sixtp_destroy(top_parser);
gint kvp_frame_compare(const KvpFrame *fa, const KvpFrame *fb)
Use a 64-bit unsigned int timespec.
void kvp_frame_delete(KvpFrame *frame)
gchar * kvp_frame_to_string(const KvpFrame *frame)
All type declarations for the whole Gnucash engine.
struct KvpFrameImpl KvpFrame
void gnc_commodity_destroy(gnc_commodity *cm)
gboolean gnc_commodity_equiv(const gnc_commodity *a, const gnc_commodity *b)