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;
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;
230 const char* new_nr_of_children = "3";
231 const char* note_text = "This is some text";
233 fam1 = gom_add_family("@FAM1@");
234 if (!fam1) return 201;
236 value = gom_set_string(&fam1->nr_of_children, new_nr_of_children);
239 if (strcmp(value, new_nr_of_children))
242 ind1 = gom_add_individual("@FAM1@");
243 if (ind1) return 204;
245 ind1 = gom_add_individual("@IND1@");
246 if (!ind1) return 205;
248 mm1 = gom_add_multimedia("@OBJ1@");
249 if (!mm1) return 206;
251 note1 = gom_add_note("@NOTE1@");
252 if (!note1) return 207;
254 value = gom_set_string(¬e1->text, note_text);
257 if (strcmp(value, note_text))
260 repo1 = gom_add_repository("@REPO1@");
261 if (!repo1) return 210;
263 sour1 = gom_add_source("@SOUR1@");
264 if (!sour1) return 211;
266 subm2 = gom_add_submitter("@SUBMITTER@");
267 if (subm2) return 212;
269 subm2 = gom_add_submitter("@SUBM2@");
270 if (!subm2) return 213;
272 subn1 = gom_add_submission("@SUBMISSION@");
273 if (!subn1) return 214;
275 user1 = gom_add_user_rec("@USER1@", "WRTAG");
276 if (user1) return 215;
278 user1 = gom_add_user_rec("@USER1@", "_TAG");
279 if (!user1) return 216;
281 xr = gom_make_individual_link(ind1);
284 xr = gom_set_xref_value(&(fam1->husband), xr);
287 output(0, "Intermediate output:\n");
290 result = gom_delete_individual(ind1);
291 if (result == 0) return 251;
293 xr = gom_set_xref_value(&(fam1->husband), NULL);
296 result = gom_delete_individual(ind1);
297 if (result != 0) return 253;
299 result = gom_delete_family(fam1);
300 if (result != 0) return 250;
302 result = gom_delete_multimedia(mm1);
303 if (result != 0) return 254;
305 result = gom_delete_note(note1);
306 if (result != 0) return 255;
308 result = gom_delete_repository(repo1);
309 if (result != 0) return 256;
311 result = gom_delete_source(sour1);
312 if (result != 0) return 257;
314 result = gom_delete_submitter(subm2);
315 if (result != 0) return 258;
317 result = gom_delete_submission(subn1);
318 if (result != 0) return 259;
320 result = gom_delete_user_rec(user1);
321 if (result != 0) return 260;
326 int main(int argc, char* argv[])
329 char* outfilename = NULL;
333 for (i=1; i<argc; i++) {
334 if (!strncmp(argv[i], "-h", 3)) {
338 else if (!strncmp(argv[i], "-q", 3)) {
341 else if (!strncmp(argv[i], "-o", 3)) {
344 outfilename = argv[i];
347 printf ("Missing output file name\n");
353 printf ("Unrecognized option: %s\n", argv[i]);
361 setlocale(LC_ALL, "");
362 gedcom_set_message_handler(gedcom_message_handler);
364 output_open(outfilename);
366 result = gom_new_model();
368 result |= test_string_functions();
370 result |= test_date_functions();
372 result |= test_record_add_delete_functions();
374 output(1, "Test succeeded\n");
377 output(1, "Test failed: %d\n", result);