e7190d0f8a80c87ef5eba1a33aa992a88466e970
[gedcom-parse.git] / t / src / update_gom.c
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.
5
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.
10
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.
15
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
19    02111-1307 USA.  */
20
21 /* $Id$ */
22 /* $Name$ */
23
24 #include "gedcom.h"
25 #include "gom.h"
26 #include "output.h"
27 #include "dump_gom.h"
28 #include "portability.h"
29 #include <locale.h>
30 #include <stdio.h>
31
32 void gedcom_message_handler(Gedcom_msg_type type, char *msg)
33 {
34   if (type == MESSAGE)
35     output(1, "MESSAGE: ");
36   else if (type == WARNING)
37     output(1, "WARNING: ");
38   else if (type == ERROR)
39     output(1, "ERROR: ");
40   output(1, "%s\n", msg);
41 }
42
43 void show_help ()
44 {
45   printf("gedcom-parse test program for libgedcom\n\n");
46   printf("Usage:  updategomtest [options]\n");
47   printf("Options:\n");
48   printf("  -h    Show this help text\n");
49   printf("  -q    No output to standard output\n");
50   printf("  -o <outfile>  File to generate output to (def. testgedcom.out)\n");
51 }
52
53 int test_string_functions()
54 {
55   struct header* head;
56   struct submitter* subm;
57   struct xref_value* xref;
58   char* value;
59   int conv_fails = 0;
60   const char* orig_source_id = "GEDCOM_PARSE";
61   const char* new_source_id = "TEST_UPDATE";
62   const char* new_submitter_name_utf8 = "Belgi\xC3\xAB";
63   const char* new_submitter_name_ansi = "Belgi\xEB";
64
65   head = gom_get_header();
66   if (head == NULL)
67     return 10;
68   
69   value = gom_get_string(head->source.id);
70   if (value == NULL)
71     return 11;
72   if (strcmp(value, orig_source_id))
73     return 12;
74
75   value = gom_set_string(&head->source.id, new_source_id);
76   if (value == NULL)
77     return 13;
78   if (strcmp(value, new_source_id))
79     return 14;
80
81   value = gom_get_string(head->source.id);
82   if (value == NULL)
83     return 15;
84   if (strcmp(value, new_source_id))
85     return 16;
86
87   xref = head->submitter;
88   if (xref == NULL)
89     return 17;
90   
91   subm = gom_get_submitter_by_xref(xref->string);
92   if (subm == NULL)
93     return 18;
94
95   value = gom_set_string(&subm->name, new_submitter_name_utf8);
96   if (value == NULL)
97     return 19;
98   if (strcmp(value, new_submitter_name_utf8))
99     return 20;
100
101   value = gom_get_string_for_locale(subm->name, &conv_fails);
102   if (value == NULL)
103     return 21;
104   if (!strcmp(value, new_submitter_name_utf8))
105     return 22;
106   if (conv_fails != 1)
107     return 23;
108
109   value = gom_set_string(&subm->name, new_submitter_name_ansi);
110   if (value != NULL)
111     return 24;
112   
113   value = gom_set_string_for_locale(&subm->name, new_submitter_name_ansi);
114   if (value != NULL)
115     return 25;
116
117   return 0;
118 }
119
120 int main(int argc, char* argv[])
121 {
122   int result;
123   char* outfilename = NULL;
124   
125   if (argc > 1) {
126     int i;
127     for (i=1; i<argc; i++) {
128       if (!strncmp(argv[i], "-h", 3)) {
129         show_help();
130         exit(1);
131       }
132       else if (!strncmp(argv[i], "-q", 3)) {
133         output_set_quiet(1);
134       }
135       else if (!strncmp(argv[i], "-o", 3)) {
136         i++;
137         if (i < argc) {
138           outfilename = argv[i];
139         }
140         else {
141           printf ("Missing output file name\n");
142           show_help();
143           exit(1);
144         }
145       }
146       else {
147         printf ("Unrecognized option: %s\n", argv[i]);
148         show_help();
149         exit(1);
150       }
151     }
152   }
153   
154   gedcom_init();
155   setlocale(LC_ALL, "");
156   gedcom_set_message_handler(gedcom_message_handler);
157
158   output_open(outfilename);
159   
160   result = gom_new_model();
161   if (result == 0)
162     result |= test_string_functions();
163   if (result == 0) {
164     output(1, "Test succeeded\n");
165   }
166   else {
167     output(1, "Test failed: %d\n", result);
168   }
169
170   show_data();
171   output_close();
172   return result;
173 }