Added compatibility for PAF 4.
[gedcom-parse.git] / t / src / gom_write.c
index 65aef2e597d3438f2568d269e511c76966b5bcf5..30a45a64c777b4332638b8b340cfa20d3393fe75 100644 (file)
@@ -73,13 +73,12 @@ int update_header(char* encoding)
   if (head == NULL)
     return 1;
   else {
-    /*
-    value = gom_set_string(&head->charset.name, encoding);
-    if (value == NULL || strcmp(value, encoding))
-      return 1;
-    else
-      return 0;
-    */
+    /* force warning for anything except UNICODE */
+    if (!strcmp(encoding, "UNICODE")) {
+      value = gom_set_string(&head->charset.name, encoding);
+      if (value == NULL || strcmp(value, encoding))
+       return 1;
+    }
     value = gom_set_string(&head->note, long_note);
     if (value == NULL || strcmp(value, long_note))
       return 1;
@@ -88,11 +87,34 @@ int update_header(char* encoding)
   }
 }
 
-int main(int argc, char* argv[])
+int test_timestamps()
 {
-  int result;
+  int result = 0;
   struct tm* tm_ptr;
   time_t tval;
+  /* Make sure we get a reproduceable output, in different timezones */
+  tval   = TIMESTAMP;
+  tm_ptr = gmtime(&tval);
+  tm_ptr->tm_isdst = 0;
+  tval   = mktime(tm_ptr);
+  result = gom_header_update_timestamp(tval);
+  
+  /* Also change timestamp of submitter */
+  if (result == 0) {
+    struct submitter* subm = gom_get_first_submitter();
+    if (!subm)
+      result = 100;
+    else {
+      result = gom_update_timestamp(&(subm->change_date), tval);
+    }
+  }
+  
+  return result;
+}
+
+int main(int argc, char* argv[])
+{
+  int result;
   int total_conv_fails = 0;
   char* outfilename = NULL;
   char* infilename  = NULL;
@@ -213,8 +235,6 @@ int main(int argc, char* argv[])
   gedcom_init();
   setlocale(LC_ALL, "");
   gedcom_set_message_handler(gedcom_message_handler);
-  gedcom_write_set_encoding(encoding, enc, bom);
-  gedcom_write_set_line_terminator(end);
 
   output_open(outfilename);
 
@@ -222,21 +242,24 @@ int main(int argc, char* argv[])
     result = gom_parse_file(infilename);
   }
   else {
+    gedcom_write_set_encoding(ENC_MANUAL, encoding, enc, bom);
+    gedcom_write_set_line_terminator(ENC_MANUAL, end);
     result = gom_new_model();
     if (result == 0)
       result |= update_header(encoding);
   }
-  /* Make sure we get a reproduceable output, in different timezones */
-  if (result == 0) {
-    tval   = TIMESTAMP;
-    tm_ptr = gmtime(&tval);
-    tm_ptr->tm_isdst = 0;
-    tval   = mktime(tm_ptr);
-    result = gom_header_update_timestamp(tval);
-  }
   if (result == 0)
+    result |= test_timestamps();
+  if (result == 0) {
+    output(1, "Writing file...\n");
     result |= gom_write_file(gedfilename, &total_conv_fails);
+  }
   if (result == 0 && total_conv_fails == 0) {
+    output(1, "Re-parsing file...\n");
+    gedcom_set_compat_handling(0);
+    result |= gom_parse_file(gedfilename);
+  }
+  if (result == 0) {
     output(1, "Test succeeded\n");
   }
   else {