QOF
0.8.0
|
00001 /********************************************************************* 00002 * test-book-merge.c -- test implementation api for QoFBook merge * 00003 * Copyright (C) 2004-2005 Neil Williams <linux@codehelp.co.uk> * 00004 * * 00005 * This program is free software; you can redistribute it and/or * 00006 * modify it under the terms of the GNU General Public License as * 00007 * published by the Free Software Foundation; either version 2 of * 00008 * the License, or (at your option) any later version. * 00009 * * 00010 * This program is distributed in the hope that it will be useful, * 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00013 * GNU General Public License for more details. * 00014 * * 00015 * You should have received a copy of the GNU General Public License * 00016 * along with this program; if not, contact: * 00017 * * 00018 * Free Software Foundation Voice: +1-617-542-5942 * 00019 * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 * 00020 * Boston, MA 02110-1301, USA gnu@gnu.org * 00021 * * 00022 ********************************************************************/ 00023 /* Test the qof_book_merge infrastructure. */ 00024 00025 #include <glib.h> 00026 #include "qof.h" 00027 #include "qofinstance-p.h" 00028 #include "qofevent-p.h" 00029 #include "test-stuff.h" 00030 00031 #define TEST_MODULE_NAME "book-merge-test" 00032 #define TEST_MODULE_DESC "Test Book Merge" 00033 #define OBJ_NAME "somename" 00034 #define OBJ_AMOUNT "anamount" 00035 #define OBJ_DATE "nottoday" 00036 #define OBJ_GUID "unique" 00037 #define OBJ_DISCOUNT "hefty" 00038 #define OBJ_VERSION "early" 00039 #define OBJ_MINOR "tiny" 00040 #define OBJ_ACTIVE "ofcourse" 00041 #define OBJ_FLAG "tiny_flag" 00042 00043 static void test_rule_loop (QofBookMergeData *, QofBookMergeRule *, 00044 guint); 00045 static void test_merge (void); 00046 gboolean myobjRegister (void); 00047 #ifdef TEST_DEBUG 00048 static QofLogModule log_module = QOF_MOD_MERGE; 00049 #endif 00050 00051 /* simple object structure */ 00052 typedef struct obj_s 00053 { 00054 QofInstance inst; 00055 gchar *Name; 00056 gchar flag; 00057 QofNumeric Amount; 00058 const GUID *obj_guid; 00059 QofTime *date; 00060 gdouble discount; /* cheap pun, I know. */ 00061 gboolean active; 00062 gint32 version; 00063 gint64 minor; 00064 } myobj; 00065 00066 static void 00067 obj_setGUID (myobj * g, const GUID * h) 00068 { 00069 if (!g) 00070 return; 00071 g->obj_guid = h; 00072 } 00073 00074 static myobj * 00075 obj_create (QofBook * book) 00076 { 00077 myobj *g; 00078 g_return_val_if_fail (book, NULL); 00079 g = g_new (myobj, 1); 00080 qof_instance_init (&g->inst, TEST_MODULE_NAME, book); 00081 obj_setGUID (g, qof_instance_get_guid (&g->inst)); 00082 g->discount = 0; 00083 g->active = TRUE; 00084 g->version = 1; 00085 g->minor = 1; 00086 g->flag = 'n'; 00087 qof_event_gen (&g->inst.entity, QOF_EVENT_CREATE, NULL); 00088 return g; 00089 } 00090 00091 static void 00092 obj_setFlag (myobj * g, char f) 00093 { 00094 g_return_if_fail (g); 00095 g->flag = f; 00096 } 00097 00098 static gchar 00099 obj_getFlag (myobj * g) 00100 { 00101 g_return_val_if_fail (g, 'n'); 00102 return g->flag; 00103 } 00104 00105 static void 00106 obj_setMinor (myobj * g, gint64 h) 00107 { 00108 g_return_if_fail (g != NULL); 00109 g->minor = h; 00110 } 00111 00112 static gint64 00113 obj_getMinor (myobj * g) 00114 { 00115 g_return_val_if_fail ((g != NULL), 0); 00116 return g->minor; 00117 } 00118 00119 static void 00120 obj_setVersion (myobj * g, gint32 h) 00121 { 00122 g_return_if_fail (g != NULL); 00123 g->version = h; 00124 } 00125 00126 static gint32 00127 obj_getVersion (myobj * g) 00128 { 00129 if (!g) 00130 return 0; 00131 return g->version; 00132 } 00133 00134 static void 00135 obj_setActive (myobj * g, gboolean h) 00136 { 00137 if (!g) 00138 return; 00139 g->active = h; 00140 } 00141 00142 static gboolean 00143 obj_getActive (myobj * g) 00144 { 00145 if (!g) 00146 return FALSE; 00147 return g->active; 00148 } 00149 00150 static void 00151 obj_setDiscount (myobj * g, gdouble h) 00152 { 00153 if (!g) 00154 return; 00155 g->discount = h; 00156 } 00157 00158 static gdouble 00159 obj_getDiscount (myobj * g) 00160 { 00161 if (!g) 00162 return 0; 00163 return g->discount; 00164 } 00165 00166 static void 00167 obj_setDate (myobj * g, QofTime *h) 00168 { 00169 if (!g) 00170 return; 00171 do_test ((h != NULL), "passed a NULL time"); 00172 do_test ((qof_time_is_valid (h) == TRUE), 00173 "passed an invalid time"); 00174 g->date = h; 00175 } 00176 00177 static QofTime * 00178 obj_getDate (myobj * g) 00179 { 00180 if (!g) 00181 return NULL; 00182 do_test ((g->date != NULL), "stored time is NULL"); 00183 do_test ((qof_time_is_valid (g->date) == TRUE), 00184 "stored time is invalid"); 00185 return g->date; 00186 } 00187 00188 static const GUID * 00189 obj_getGUID (myobj * g) 00190 { 00191 if (!g) 00192 return NULL; 00193 return g->obj_guid; 00194 } 00195 00196 static void 00197 obj_setName (myobj * g, char *h) 00198 { 00199 if (!g || !h) 00200 return; 00201 g->Name = strdup (h); 00202 } 00203 00204 static gchar * 00205 obj_getName (myobj * g) 00206 { 00207 if (!g) 00208 return NULL; 00209 return g->Name; 00210 } 00211 00212 static void 00213 obj_setAmount (myobj * g, QofNumeric h) 00214 { 00215 if (!g) 00216 return; 00217 g->Amount = h; 00218 } 00219 00220 static QofNumeric 00221 obj_getAmount (myobj * g) 00222 { 00223 if (!g) 00224 return qof_numeric_zero (); 00225 return g->Amount; 00226 } 00227 00228 static QofObject obj_object_def = { 00229 .interface_version = QOF_OBJECT_VERSION, 00230 .e_type = TEST_MODULE_NAME, 00231 .type_label = TEST_MODULE_DESC, 00232 .create = (gpointer) obj_create, 00233 .book_begin = NULL, 00234 .book_end = NULL, 00235 .is_dirty = NULL, 00236 .mark_clean = NULL, 00237 .foreach = qof_collection_foreach, 00238 .printable = NULL, 00239 .version_cmp = (gint (*)(gpointer, gpointer)) 00240 qof_instance_version_cmp, 00241 }; 00242 00243 gboolean 00244 myobjRegister (void) 00245 { 00246 static QofParam params[] = { 00247 {OBJ_NAME, QOF_TYPE_STRING, (QofAccessFunc) obj_getName, 00248 (QofSetterFunc) obj_setName, NULL}, 00249 {OBJ_AMOUNT, QOF_TYPE_NUMERIC, (QofAccessFunc) obj_getAmount, 00250 (QofSetterFunc) obj_setAmount, NULL}, 00251 {OBJ_GUID, QOF_TYPE_GUID, (QofAccessFunc) obj_getGUID, 00252 (QofSetterFunc) obj_setGUID, NULL}, 00253 {OBJ_DATE, QOF_TYPE_TIME, (QofAccessFunc) obj_getDate, 00254 (QofSetterFunc) obj_setDate, NULL}, 00255 {OBJ_DISCOUNT, QOF_TYPE_DOUBLE, (QofAccessFunc) obj_getDiscount, 00256 (QofSetterFunc) obj_setDiscount, NULL}, 00257 {OBJ_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc) obj_getActive, 00258 (QofSetterFunc) obj_setActive, NULL}, 00259 {OBJ_VERSION, QOF_TYPE_INT32, (QofAccessFunc) obj_getVersion, 00260 (QofSetterFunc) obj_setVersion, NULL}, 00261 {OBJ_MINOR, QOF_TYPE_INT64, (QofAccessFunc) obj_getMinor, 00262 (QofSetterFunc) obj_setMinor, NULL}, 00263 {OBJ_FLAG, QOF_TYPE_CHAR, (QofAccessFunc) obj_getFlag, 00264 (QofSetterFunc) obj_setFlag, NULL}, 00265 {QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc) qof_instance_get_book, 00266 NULL, NULL}, 00267 {QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc) qof_instance_get_guid, 00268 NULL, NULL}, 00269 {NULL, NULL, NULL, NULL, NULL}, 00270 }; 00271 00272 qof_class_register (TEST_MODULE_NAME, NULL, params); 00273 00274 return qof_object_register (&obj_object_def); 00275 } 00276 00277 static void 00278 test_merge (void) 00279 { 00280 QofBook *target, *import; 00281 gdouble init_value, discount; 00282 myobj *import_obj, *target_obj, *new_obj; 00283 gint result; 00284 QofTime *base_time, *temp_time; 00285 gboolean active; 00286 gint32 version; 00287 gint64 minor; 00288 gchar *import_init, *target_init; 00289 gchar flag, flag_check; 00290 QofNumeric obj_amount; 00291 QofBookMergeData *mergeData; 00292 00293 target = qof_book_new (); 00294 import = qof_book_new (); 00295 init_value = 1.00; 00296 result = 0; 00297 flag = get_random_character (); 00298 discount = 0.175; 00299 active = TRUE; 00300 version = get_random_int_in_range (0, 10000); 00301 minor = get_random_int_in_range (1000001, 2000000); 00302 import_init = "test"; 00303 target_init = "testing"; 00304 base_time = qof_time_set (1153309194, 568714241); 00305 do_test ((TRUE == qof_time_is_valid (base_time)), 00306 "invalid init time"); 00307 { 00308 gchar *str; 00309 QofDate *qd; 00310 00311 qd = qof_date_from_qtime (base_time); 00312 str = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00313 do_test ((0 == safe_strcmp ( 00314 "2006-07-19 11:39:54.568714241 +0000", str)), 00315 "failed to compare base_time correctly."); 00316 g_free (str); 00317 qof_date_free (qd); 00318 } 00319 00320 do_test ((NULL != target), "#1 target book is NULL"); 00321 do_test ((NULL != import), "#2 import book is NULL"); 00322 00323 /* import book objects - tests used */ 00324 import_obj = g_new (myobj, 1); 00325 do_test ((NULL != import_obj), "#3 new object create"); 00326 qof_instance_init (&import_obj->inst, TEST_MODULE_NAME, import); 00327 do_test ((NULL != &import_obj->inst), "#4 instance init"); 00328 obj_setGUID (import_obj, qof_instance_get_guid (&import_obj->inst)); 00329 do_test ((NULL != &import_obj->obj_guid), "#5 guid set"); 00330 qof_event_gen (&import_obj->inst.entity, QOF_EVENT_CREATE, NULL); 00331 do_test ((NULL != &import_obj->inst.entity), "#6 gnc event create"); 00332 obj_setName (import_obj, import_init); 00333 do_test ((NULL != &import_obj->Name), "#7 string set"); 00334 obj_amount = qof_numeric_from_double (init_value, 1, QOF_HOW_DENOM_EXACT); 00335 obj_setAmount (import_obj, obj_amount); 00336 do_test ((qof_numeric_check (obj_getAmount (import_obj)) == QOF_ERROR_OK), 00337 "#8 gnc_numeric set"); 00338 obj_setActive (import_obj, active); 00339 do_test ((FALSE != &import_obj->active), "#9 gboolean set"); 00340 obj_setDiscount (import_obj, discount); 00341 obj_setVersion (import_obj, version); 00342 do_test ((version == import_obj->version), "#11 gint32 set"); 00343 obj_setMinor (import_obj, minor); 00344 do_test ((minor == import_obj->minor), "#12 gint64 set"); 00345 do_test ((TRUE == qof_time_is_valid (base_time)), 00346 "invalid import time ts"); 00347 { 00348 gchar *str; 00349 QofDate *qd; 00350 00351 qd = qof_date_from_qtime (base_time); 00352 str = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00353 do_test ((0 == safe_strcmp ( 00354 "2006-07-19 11:39:54.568714241 +0000", str)), 00355 "failed to compare base_time correctly."); 00356 g_free (str); 00357 qof_date_free (qd); 00358 } 00359 obj_setDate (import_obj, base_time); 00360 do_test ((TRUE == qof_time_is_valid (import_obj->date)), 00361 "invalid import time"); 00362 do_test ((qof_time_cmp (base_time, import_obj->date) == 0), 00363 "test #13 date set"); 00364 obj_setFlag (import_obj, flag); 00365 do_test ((flag == obj_getFlag (import_obj)), "#14 flag set"); 00366 00367 obj_amount = 00368 qof_numeric_add (obj_amount, obj_amount, 1, QOF_HOW_DENOM_EXACT); 00369 discount = get_random_double (); 00370 version = 2; 00371 minor = 3; 00372 00373 /* second import object - test results would be the same, so not tested. */ 00374 new_obj = g_new (myobj, 1); 00375 qof_instance_init (&new_obj->inst, TEST_MODULE_NAME, import); 00376 obj_setGUID (new_obj, qof_instance_get_guid (&new_obj->inst)); 00377 qof_event_gen (&new_obj->inst.entity, QOF_EVENT_CREATE, NULL); 00378 obj_setName (new_obj, import_init); 00379 obj_setAmount (new_obj, obj_amount); 00380 obj_setActive (new_obj, active); 00381 obj_setDiscount (new_obj, discount); 00382 obj_setVersion (new_obj, version); 00383 obj_setMinor (new_obj, minor); 00384 do_test ((TRUE == qof_time_is_valid (base_time)), 00385 "second import time invalid"); 00386 { 00387 gchar *str; 00388 QofDate *qd; 00389 00390 qd = qof_date_from_qtime (base_time); 00391 str = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00392 do_test ((0 == safe_strcmp ( 00393 "2006-07-19 11:39:54.568714241 +0000", str)), 00394 "failed to compare base_time correctly."); 00395 g_free (str); 00396 qof_date_free (qd); 00397 } 00398 obj_setDate (new_obj, base_time); 00399 obj_setFlag (new_obj, flag); 00400 00401 obj_amount = 00402 qof_numeric_add (obj_amount, obj_amount, 1, QOF_HOW_DENOM_EXACT); 00403 discount = get_random_double (); 00404 version = 2; 00405 minor = 3; 00406 flag = 'z'; 00407 00408 /* target object - test results would be the same, so not tested. */ 00409 target_obj = g_new (myobj, 1); 00410 qof_instance_init (&target_obj->inst, TEST_MODULE_NAME, target); 00411 obj_setGUID (target_obj, qof_instance_get_guid (&target_obj->inst)); 00412 qof_event_gen (&target_obj->inst.entity, QOF_EVENT_CREATE, NULL); 00413 obj_setName (target_obj, target_init); 00414 obj_setAmount (target_obj, obj_amount); 00415 obj_setActive (target_obj, active); 00416 obj_setDiscount (target_obj, discount); 00417 obj_setVersion (target_obj, version); 00418 obj_setMinor (target_obj, minor); 00419 { 00420 gchar *str; 00421 QofDate *qd; 00422 00423 qd = qof_date_from_qtime (base_time); 00424 str = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00425 do_test ((0 == safe_strcmp ( 00426 "2006-07-19 11:39:54.568714241 +0000", str)), 00427 "failed to compare base_time correctly."); 00428 g_free (str); 00429 qof_date_free (qd); 00430 } 00431 temp_time = qof_time_add_secs_copy (base_time, 65); 00432 do_test ((TRUE == qof_time_is_valid (temp_time)), 00433 "time add secs returned invalid"); 00434 obj_setDate (target_obj, temp_time); 00435 obj_setFlag (target_obj, flag); 00436 do_test ((flag == obj_getFlag (target_obj)), "#15 flag set"); 00437 00438 mergeData = qof_book_merge_init (import, target); 00439 do_test (mergeData != NULL, 00440 "FATAL: Merge could not be initialised!\t aborting . . "); 00441 g_return_if_fail (mergeData != NULL); 00442 qof_book_merge_rule_foreach (mergeData, test_rule_loop, MERGE_REPORT); 00443 qof_book_merge_rule_foreach (mergeData, test_rule_loop, MERGE_UPDATE); 00444 qof_book_merge_rule_foreach (mergeData, test_rule_loop, MERGE_NEW); 00445 /* reserved calls - test only */ 00446 qof_book_merge_rule_foreach (mergeData, test_rule_loop, MERGE_ABSOLUTE); 00447 qof_book_merge_rule_foreach (mergeData, test_rule_loop, MERGE_DUPLICATE); 00448 00449 /* import should not be in the target - pass if import_init fails match with target */ 00450 do_test (((safe_strcmp (obj_getName (import_obj), 00451 obj_getName (target_obj))) != 0), 00452 "Init value test #1"); 00453 00454 /* a good commit returns zero */ 00455 do_test (qof_book_merge_commit (mergeData) == 0, "Commit failed"); 00456 00457 /* import should be in the target - pass if import_init matches target */ 00458 do_test (((safe_strcmp (import_init, obj_getName (target_obj))) == 0), 00459 "Merged value test #1"); 00460 00461 /* import should be the same as target - pass if values are the same */ 00462 do_test (((safe_strcmp 00463 (obj_getName (target_obj), obj_getName (import_obj))) == 0), 00464 "Merged value test #2"); 00465 00466 /* check that the Amount really is a gnc_numeric */ 00467 do_test ((qof_numeric_check (obj_getAmount (import_obj)) == QOF_ERROR_OK), 00468 "import gnc_numeric check"); 00469 do_test ((qof_numeric_check (obj_getAmount (target_obj)) == QOF_ERROR_OK), 00470 "target gnc_numeric check"); 00471 00472 /* obj_amount was changed after the import object was set, so expect a difference. */ 00473 do_test ((qof_numeric_compare (obj_getAmount (import_obj), obj_amount) != 00474 QOF_ERROR_OK), "gnc_numeric value check #1"); 00475 00476 /* obj_amount is in the target object with the import value, expect a difference/ */ 00477 do_test ((qof_numeric_compare (obj_getAmount (target_obj), obj_amount) != 00478 QOF_ERROR_OK), "gnc_numeric value check #2"); 00479 00480 /* target had a different date, so import date should now be set */ 00481 qof_time_free (temp_time); 00482 temp_time = target_obj->date; 00483 { 00484 gchar *str; 00485 QofDate *qd; 00486 00487 qd = qof_date_from_qtime (base_time); 00488 str = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00489 do_test ((0 == safe_strcmp ( 00490 "2006-07-19 11:39:54.568714241 +0000", str)), 00491 "failed to compare base_time after merge."); 00492 g_free (str); 00493 qof_date_free (qd); 00494 } 00495 { 00496 gchar *str; 00497 QofDate *qd; 00498 00499 qd = qof_date_from_qtime (temp_time); 00500 str = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00501 do_test ((0 == safe_strcmp ( 00502 "2006-07-19 11:39:54.568714241 +0000", str)), 00503 "failed to compare target time after merge."); 00504 g_free (str); 00505 qof_date_free (qd); 00506 } 00507 do_test ((qof_time_cmp (base_time, temp_time) == 0), 00508 "date value check: 1"); 00509 #ifdef TEST_DEBUG 00510 DEBUG (" import<->target=%d\n", 00511 (qof_time_cmp (base_time, target_obj->date))); 00512 { 00513 QofDate *qd; 00514 gchar *check; 00515 00516 qd = qof_date_from_qtime (base_time); 00517 DEBUG (" base_time=%" G_GINT64_FORMAT 00518 " nsecs=%ld", qof_time_get_secs (base_time), 00519 qof_time_get_nanosecs (base_time)); 00520 DEBUG (" import:\nyear=%" G_GINT64_FORMAT 00521 " month=%ld day=%ld hour=%ld min=%ld sec=%" 00522 G_GINT64_FORMAT "nsecs=%ld\n", 00523 qd->qd_year, qd->qd_mon, qd->qd_mday, qd->qd_hour, 00524 qd->qd_min, qd->qd_sec, qd->qd_nanosecs); 00525 check = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00526 DEBUG (" import=%s\n", check); 00527 qof_date_free (qd); 00528 qd = qof_date_from_qtime (target_obj->date); 00529 if (!qd) 00530 PERR ("qd failed"); 00531 DEBUG (" target:\nyear=%" G_GINT64_FORMAT 00532 " month=%ld day=%ld hour=%ld min=%ld sec=%" 00533 G_GINT64_FORMAT "nsecs=%ld\n", 00534 qd->qd_year, qd->qd_mon, qd->qd_mday, qd->qd_hour, 00535 qd->qd_min, qd->qd_sec, qd->qd_nanosecs); 00536 check = qof_date_print (qd, QOF_DATE_FORMAT_ISO8601); 00537 DEBUG (" target=%s\n", check); 00538 g_free (check); 00539 qof_date_free (qd); 00540 } 00541 #endif 00542 qof_time_free (base_time); 00543 /* import should be the same as target - pass if values are the same */ 00544 flag_check = obj_getFlag (target_obj); 00545 do_test ((flag_check == obj_getFlag (import_obj)), "flag value check: 1"); 00546 do_test ((obj_getFlag (import_obj) == obj_getFlag (target_obj)), 00547 "flag value check: 2"); 00548 } 00549 00550 static void 00551 test_rule_loop (QofBookMergeData * mergeData, QofBookMergeRule * rule, 00552 guint remainder) 00553 { 00554 GSList *testing; 00555 QofParam *eachParam; 00556 gchar *importstring; 00557 gchar *targetstring; 00558 gboolean skip_target; 00559 00560 importstring = NULL; 00561 targetstring = NULL; 00562 skip_target = FALSE; 00563 mergeData->currentRule = rule; 00564 do_test ((rule != NULL), "loop:#1 Rule is NULL"); 00565 do_test (remainder > 0, "loop:#2 remainder error."); 00566 do_test ((safe_strcmp (NULL, rule->mergeLabel) != 0), 00567 "loop:#3 object label\n"); 00568 do_test ((rule->importEnt != NULL), 00569 "loop:#4 empty import entity"); 00570 /* targetEnt is always NULL at this stage if MERGE_NEW is set */ 00571 if (rule->targetEnt == NULL) 00572 { 00573 skip_target = TRUE; 00574 } 00575 if (!skip_target) 00576 { 00577 do_test ((safe_strcmp 00578 (rule->importEnt->e_type, rule->targetEnt->e_type) == 0), 00579 "loop: entity type mismatch"); 00580 } 00581 do_test ((rule->mergeParam != NULL), 00582 "loop: empty parameter list"); 00583 testing = rule->mergeParam; 00584 00585 while (testing != NULL) 00586 { // start of param loop 00587 eachParam = testing->data; 00588 do_test ((eachParam != NULL), "loop:#8 no QofParam data"); 00589 do_test ((eachParam->param_name != NULL), 00590 "loop:#9 no parameter name"); 00591 do_test ((eachParam->param_getfcn != NULL), 00592 "loop:#10 no get function"); 00593 do_test ((eachParam->param_setfcn != NULL), 00594 "loop:#11 no set function"); 00595 /* non-generic - test routines only! */ 00596 if (safe_strcmp (eachParam->param_type, QOF_TYPE_STRING) == 0) 00597 { 00598 importstring = 00599 g_strdup (eachParam-> 00600 param_getfcn (rule->importEnt, eachParam)); 00601 do_test ((importstring != NULL), 00602 "loop:#12 direct get_fcn import"); 00603 do_test ((safe_strcmp (importstring, "test") == 0), 00604 "loop:#13 direct import comparison"); 00605 if (!skip_target) 00606 { 00607 targetstring = 00608 eachParam->param_getfcn (rule->targetEnt, eachParam); 00609 do_test ((targetstring != NULL), 00610 "loop:#14 direct get_fcn target"); 00611 do_test ((safe_strcmp (targetstring, "testing") == 0), 00612 "loop:#15 direct target comparison"); 00613 } 00614 } 00615 /* param_as_string does the conversion for display purposes only */ 00616 /* do NOT use as_string for calculations or set_fcn */ 00617 importstring = qof_util_param_to_string (rule->importEnt, eachParam); 00618 do_test ((importstring != NULL), 00619 "loop:#16 import param_as_string is null"); 00620 if (!skip_target) 00621 { 00622 targetstring = qof_util_param_to_string (rule->targetEnt, eachParam); 00623 do_test ((targetstring != NULL), 00624 "loop:#17 target param_as_string is null"); 00625 } 00626 testing = g_slist_next (testing); 00627 } // end param loop 00628 /* set each rule dependent on the user involvement response above. */ 00629 /* test routine just sets all MERGE_REPORT to MERGE_UPDATE */ 00630 mergeData = qof_book_merge_update_result (mergeData, MERGE_UPDATE); 00631 do_test ((rule->mergeResult != MERGE_REPORT), 00632 "update result fail"); 00633 } 00634 00635 int 00636 main (void) 00637 { 00638 qof_init (); 00639 myobjRegister (); 00640 test_merge (); 00641 print_test_results (); 00642 qof_close (); 00643 return get_rv(); 00644 }