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_record_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;
231 const char* new_nr_of_children = "3";
232 const char* note_text = "This is some text";
234 fam1 = gom_add_family("@FAM1@");
235 if (!fam1) return 201;
237 value = gom_set_string(&fam1->nr_of_children, new_nr_of_children);
240 if (strcmp(value, new_nr_of_children))
243 ind1 = gom_add_individual("@FAM1@");
244 if (ind1) return 204;
246 ind1 = gom_add_individual("@IND1@");
247 if (!ind1) return 205;
249 mm1 = gom_add_multimedia("@OBJ1@");
250 if (!mm1) return 206;
252 note1 = gom_add_note("@NOTE1@");
253 if (!note1) return 207;
255 value = gom_set_string(¬e1->text, note_text);
258 if (strcmp(value, note_text))
261 repo1 = gom_add_repository("@REPO1@");
262 if (!repo1) return 210;
264 sour1 = gom_add_source("@SOUR1@");
265 if (!sour1) return 211;
267 subm2 = gom_add_submitter("@SUBMITTER@");
268 if (subm2) return 212;
270 subm2 = gom_add_submitter("@SUBM2@");
271 if (!subm2) return 213;
273 subn1 = gom_add_submission("@SUBMISSION@");
274 if (!subn1) return 214;
276 user1 = gom_add_user_rec("@USER1@", "WRTAG");
277 if (user1) return 215;
279 user1 = gom_add_user_rec("@USER1@", "_TAG");
280 if (!user1) return 216;
282 xr = gom_set_xref(&(fam1->husband), ind1->xrefstr);
285 ind2 = gom_add_individual("@IND2@");
286 if (!ind2) return 219;
288 ind3 = gom_add_individual("@IND3@");
289 if (!ind3) return 220;
291 ind4 = gom_add_individual("@IND4@");
292 if (!ind4) return 221;
294 xrl = gom_add_xref(&(fam1->children), ind2->xrefstr);
295 if (!xrl) return 222;
297 xrl = gom_add_xref(&(fam1->children), ind3->xrefstr);
298 if (!xrl) return 223;
300 xrl = gom_add_xref(&(fam1->children), ind4->xrefstr);
301 if (!xrl) return 224;
303 result = gom_remove_xref(&(fam1->children), ind3->xrefstr);
304 if (result != 0) return 225;
306 result = gom_remove_xref(&(fam1->children), ind4->xrefstr);
307 if (result != 0) return 226;
309 output(1, "Intermediate output:\n");
312 result = gom_delete_individual(ind1);
313 if (result == 0) return 251;
315 xr = gom_set_xref(&(fam1->husband), NULL);
318 result = gom_delete_individual(ind1);
319 if (result != 0) return 253;
321 result = gom_delete_family(fam1);
322 if (result != 0) return 250;
324 result = gom_delete_multimedia(mm1);
325 if (result != 0) return 254;
327 result = gom_delete_note(note1);
328 if (result != 0) return 255;
330 result = gom_delete_repository(repo1);
331 if (result != 0) return 256;
333 result = gom_delete_source(sour1);
334 if (result != 0) return 257;
336 result = gom_delete_submitter(subm2);
337 if (result != 0) return 258;
339 result = gom_delete_submission(subn1);
340 if (result != 0) return 259;
342 result = gom_delete_user_rec(user1);
343 if (result != 0) return 260;
348 int main(int argc, char* argv[])
351 char* outfilename = NULL;
355 for (i=1; i<argc; i++) {
356 if (!strncmp(argv[i], "-h", 3)) {
360 else if (!strncmp(argv[i], "-q", 3)) {
363 else if (!strncmp(argv[i], "-o", 3)) {
366 outfilename = argv[i];
369 printf ("Missing output file name\n");
375 printf ("Unrecognized option: %s\n", argv[i]);
383 setlocale(LC_ALL, "");
384 gedcom_set_message_handler(gedcom_message_handler);
386 output_open(outfilename);
388 result = gom_new_model();
390 result |= test_string_functions();
392 result |= test_date_functions();
394 result |= test_record_add_delete_functions();
396 output(1, "Test succeeded\n");
399 output(1, "Test failed: %d\n", result);