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;
229 const char* new_nr_of_children = "3";
230 const char* note_text = "This is some text";
232 fam1 = gom_add_family("@FAM1@");
233 if (!fam1) return 201;
235 value = gom_set_string(&fam1->nr_of_children, new_nr_of_children);
238 if (strcmp(value, new_nr_of_children))
241 ind1 = gom_add_individual("@FAM1@");
242 if (ind1) return 204;
244 ind1 = gom_add_individual("@IND1@");
245 if (!ind1) return 205;
247 mm1 = gom_add_multimedia("@OBJ1@");
248 if (!mm1) return 206;
250 note1 = gom_add_note("@NOTE1@");
251 if (!note1) return 207;
253 value = gom_set_string(¬e1->text, note_text);
256 if (strcmp(value, note_text))
259 repo1 = gom_add_repository("@REPO1@");
260 if (!repo1) return 210;
262 sour1 = gom_add_source("@SOUR1@");
263 if (!sour1) return 211;
265 subm2 = gom_add_submitter("@SUBMITTER@");
266 if (subm2) return 212;
268 subm2 = gom_add_submitter("@SUBM2@");
269 if (!subm2) return 213;
271 subn1 = gom_add_submission("@SUBMISSION@");
272 if (!subn1) return 214;
274 user1 = gom_add_user_rec("@USER1@", "WRTAG");
275 if (user1) return 215;
277 user1 = gom_add_user_rec("@USER1@", "_TAG");
278 if (!user1) return 216;
280 output(0, "Intermediate output:\n");
283 result = gom_delete_family(fam1);
284 if (result != 0) return 217;
286 result = gom_delete_individual(ind1);
287 if (result != 0) return 218;
289 result = gom_delete_multimedia(mm1);
290 if (result != 0) return 219;
292 result = gom_delete_note(note1);
293 if (result != 0) return 220;
295 result = gom_delete_repository(repo1);
296 if (result != 0) return 221;
298 result = gom_delete_source(sour1);
299 if (result != 0) return 222;
301 result = gom_delete_submitter(subm2);
302 if (result != 0) return 223;
304 result = gom_delete_submission(subn1);
305 if (result != 0) return 224;
307 result = gom_delete_user_rec(user1);
308 if (result != 0) return 225;
313 int main(int argc, char* argv[])
316 char* outfilename = NULL;
320 for (i=1; i<argc; i++) {
321 if (!strncmp(argv[i], "-h", 3)) {
325 else if (!strncmp(argv[i], "-q", 3)) {
328 else if (!strncmp(argv[i], "-o", 3)) {
331 outfilename = argv[i];
334 printf ("Missing output file name\n");
340 printf ("Unrecognized option: %s\n", argv[i]);
348 setlocale(LC_ALL, "");
349 gedcom_set_message_handler(gedcom_message_handler);
351 output_open(outfilename);
353 result = gom_new_model();
355 result |= test_string_functions();
357 result |= test_date_functions();
359 result |= test_record_add_delete_functions();
361 output(1, "Test succeeded\n");
364 output(1, "Test failed: %d\n", result);