1 /* Test program for the Gedcom library.
2 Copyright (C) 2001, 2002 The Genes Development Team
3 This file is part of the Gedcom parser library.
4 Contributed by Peter Verthez <Peter.Verthez@advalvas.be>, 2001.
6 The Gedcom parser library is free software; you can redistribute it
7 and/or modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either
9 version 2.1 of the License, or (at your option) any later version.
11 The Gedcom parser library is distributed in the hope that it will be
12 useful, but 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.
16 You should have received a copy of the GNU Lesser General Public
17 License along with the Gedcom parser library; if not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
28 #include "portability.h"
33 void gedcom_message_handler(Gedcom_msg_type type, char *msg)
36 output(1, "MESSAGE: ");
37 else if (type == WARNING)
38 output(1, "WARNING: ");
39 else if (type == ERROR)
41 output(1, "%s\n", msg);
46 printf("gedcom-parse test program for libgedcom\n\n");
47 printf("Usage: updategomtest [options]\n");
49 printf(" -h Show this help text\n");
50 printf(" -q No output to standard output\n");
51 printf(" -o <outfile> File to generate output to (def. testgedcom.out)\n");
54 int test_string_functions()
57 struct submitter* subm;
58 struct xref_value* xref;
61 const char* orig_source_id = "GEDCOM_PARSE";
62 const char* new_source_id = "TEST_UPDATE";
63 const char* new_submitter_name_utf8 = "Belgi\xC3\xAB";
64 const char* new_submitter_name_ansi = "Belgi\xEB";
66 head = gom_get_header();
70 value = gom_get_string(head->source.id);
73 if (strcmp(value, orig_source_id))
76 value = gom_set_string(&head->source.id, new_source_id);
79 if (strcmp(value, new_source_id))
82 value = gom_get_string(head->source.id);
85 if (strcmp(value, new_source_id))
88 xref = head->submitter;
92 subm = gom_get_submitter_by_xref(xref->string);
96 value = gom_set_string(&subm->name, new_submitter_name_utf8);
99 if (strcmp(value, new_submitter_name_utf8))
102 value = gom_get_string_for_locale(subm->name, &conv_fails);
105 if (!strcmp(value, new_submitter_name_utf8))
110 value = gom_set_string(&subm->name, new_submitter_name_ansi);
114 value = gom_set_string_for_locale(&subm->name, new_submitter_name_ansi);
121 char* print_date(const char* message, struct date_value* dv)
124 output(0, "\n%s:", message);
126 date_str = gedcom_date_to_string(dv);
127 output(0, "String: '%s'\n", str_val(date_str));
131 int test_date_functions()
134 struct date_value* dv;
138 head = gom_get_header();
146 dv = gedcom_new_date_value(NULL);
151 date_str = print_date("Initial date value", dv);
155 dv->date1.cal = CAL_GREGORIAN;
156 strcpy(dv->date1.year_str, "1990");
157 normalized = gedcom_normalize_date(DI_FROM_STRINGS, dv);
160 date_str = print_date("Setting only year string", dv);
164 dv->date1.year = 1989;
165 normalized = gedcom_normalize_date(DI_FROM_NUMBERS, dv);
168 date_str = print_date("Setting only year number", dv);
172 dv->date1.type = DATE_EXACT;
173 dv->date1.sdn1 = 2500000;
175 normalized = gedcom_normalize_date(DI_FROM_SDN, dv);
178 date_str = print_date("Setting only SDN 1", dv);
182 dv->date1.cal = CAL_HEBREW;
183 normalized = gedcom_normalize_date(DI_FROM_SDN, dv);
186 date_str = print_date("Same date in Hebrew calendar", dv);
190 dv->date1.cal = CAL_FRENCH_REV;
191 normalized = gedcom_normalize_date(DI_FROM_SDN, dv);
194 date_str = print_date("Same date in French revolution calendar", dv);
198 dv->date1.cal = CAL_GREGORIAN;
201 dv->date1.year = 1799;
202 normalized = gedcom_normalize_date(DI_FROM_NUMBERS, dv);
205 dv->date1.cal = CAL_FRENCH_REV;
206 normalized = gedcom_normalize_date(DI_FROM_SDN, dv);
209 date_str = print_date("Valid French revolution date", dv);
216 int test_add_delete_functions()
219 struct individual *ind1, *ind2, *ind3, *ind4;
220 struct multimedia* mm1;
222 struct repository* repo1;
223 struct source* sour1;
224 struct submitter* subm2;
225 struct submission* subn1;
226 struct user_rec* user1;
227 struct xref_value* xr;
228 struct xref_list* xrl;
229 struct personal_name* name;
232 const char* new_nr_of_children = "3";
233 const char* note_text = "This is some text";
235 fam1 = gom_new_family("@FAM1@");
236 if (!fam1) return 101;
238 value = gom_set_string(&fam1->nr_of_children, new_nr_of_children);
241 if (strcmp(value, new_nr_of_children))
244 ind1 = gom_new_individual("@FAM1@");
245 if (ind1) return 104;
247 ind1 = gom_new_individual("@IND1@");
248 if (!ind1) return 105;
250 mm1 = gom_new_multimedia("@OBJ1@");
251 if (!mm1) return 106;
253 note1 = gom_new_note("@NOTE1@");
254 if (!note1) return 107;
256 value = gom_set_string(¬e1->text, note_text);
259 if (strcmp(value, note_text))
262 repo1 = gom_new_repository("@REPO1@");
263 if (!repo1) return 110;
265 sour1 = gom_new_source("@SOUR1@");
266 if (!sour1) return 111;
268 subm2 = gom_new_submitter("@SUBMITTER@");
269 if (subm2) return 112;
271 subm2 = gom_new_submitter("@SUBM2@");
272 if (!subm2) return 113;
274 subn1 = gom_new_submission("@SUBMISSION@");
275 if (!subn1) return 114;
277 user1 = gom_new_user_rec("@USER1@", "WRTAG");
278 if (user1) return 115;
280 user1 = gom_new_user_rec("@USER1@", "_TAG");
281 if (!user1) return 116;
283 xr = gom_set_xref(&(fam1->husband), ind1->xrefstr);
286 ind2 = gom_new_individual("@IND2@");
287 if (!ind2) return 119;
289 ind3 = gom_new_individual("@IND3@");
290 if (!ind3) return 120;
292 ind4 = gom_new_individual("@IND4@");
293 if (!ind4) return 121;
295 xrl = gom_add_xref(&(fam1->children), ind2->xrefstr);
296 if (!xrl) return 122;
298 xrl = gom_add_xref(&(fam1->children), ind3->xrefstr);
299 if (!xrl) return 123;
301 xrl = gom_add_xref(&(fam1->children), ind4->xrefstr);
302 if (!xrl) return 124;
304 result = gom_move_xref(MOVE_UP, &(fam1->children), ind4->xrefstr);
305 if (result != 0) return 125;
307 result = gom_move_xref(MOVE_UP, &(fam1->children), ind4->xrefstr);
308 if (result != 0) return 126;
310 result = gom_move_xref(MOVE_UP, &(fam1->children), ind4->xrefstr);
311 if (result != 0) return 127;
313 result = gom_move_xref(MOVE_DOWN, &(fam1->children), ind4->xrefstr);
314 if (result != 0) return 128;
316 result = gom_remove_xref(&(fam1->children), ind3->xrefstr);
317 if (result != 0) return 129;
319 result = gom_remove_xref(&(fam1->children), ind4->xrefstr);
320 if (result != 0) return 130;
322 name = gom_add_new_personal_name(&(ind2->name));
323 if (name == NULL) return 131;
325 value = gom_set_string(&(name->name), "Testname");
326 if (value == NULL) return 132;
328 name = gom_add_new_personal_name(&(ind2->name));
329 if (name == NULL) return 133;
331 value = gom_set_string(&(name->name), "Testname 2");
332 if (value == NULL) return 134;
334 result = gom_move_personal_name(MOVE_UP, &(ind2->name), name);
335 if (result != 0) return 135;
337 result = gom_remove_personal_name(&(ind2->name), name);
338 if (result != 0) return 136;
340 output(1, "Intermediate output:\n");
343 result = gom_delete_individual(ind1);
344 if (result == 0) return 150;
346 xr = gom_set_xref(&(fam1->husband), NULL);
349 result = gom_delete_individual(ind1);
350 if (result != 0) return 152;
352 result = gom_delete_family(fam1);
353 if (result != 0) return 153;
355 result = gom_delete_individual(ind2);
356 if (result != 0) return 154;
358 result = gom_delete_multimedia(mm1);
359 if (result != 0) return 155;
361 result = gom_delete_note(note1);
362 if (result != 0) return 156;
364 result = gom_delete_repository(repo1);
365 if (result != 0) return 157;
367 result = gom_delete_source(sour1);
368 if (result != 0) return 158;
370 result = gom_delete_submitter(subm2);
371 if (result != 0) return 159;
373 result = gom_delete_submission(subn1);
374 if (result != 0) return 160;
376 result = gom_delete_user_rec(user1);
377 if (result != 0) return 161;
382 int main(int argc, char* argv[])
385 char* outfilename = NULL;
389 for (i=1; i<argc; i++) {
390 if (!strncmp(argv[i], "-h", 3)) {
394 else if (!strncmp(argv[i], "-q", 3)) {
397 else if (!strncmp(argv[i], "-o", 3)) {
400 outfilename = argv[i];
403 printf ("Missing output file name\n");
409 printf ("Unrecognized option: %s\n", argv[i]);
417 setlocale(LC_ALL, "");
418 gedcom_set_message_handler(gedcom_message_handler);
420 output_open(outfilename);
422 result = gom_new_model();
424 result |= test_string_functions();
426 result |= test_date_functions();
428 result |= test_add_delete_functions();
430 output(1, "Test succeeded\n");
433 output(1, "Test failed: %d\n", result);