27 #include "qofinstance-p.h"
28 #include "qofevent-p.h"
29 #include "test-stuff.h"
31 #define TEST_MODULE_NAME "book-merge-test"
32 #define TEST_MODULE_DESC "Test Book Merge"
33 #define OBJ_NAME "somename"
34 #define OBJ_AMOUNT "anamount"
35 #define OBJ_DATE "nottoday"
36 #define OBJ_GUID "unique"
37 #define OBJ_DISCOUNT "hefty"
38 #define OBJ_VERSION "early"
39 #define OBJ_MINOR "tiny"
40 #define OBJ_ACTIVE "ofcourse"
41 #define OBJ_FLAG "tiny_flag"
45 static void test_merge (
void);
46 gboolean myobjRegister (
void);
67 obj_setGUID (myobj * g,
const GUID * h)
78 g_return_val_if_fail (book, NULL);
92 obj_setFlag (myobj * g,
char f)
99 obj_getFlag (myobj * g)
101 g_return_val_if_fail (g,
'n');
106 obj_setMinor (myobj * g, gint64 h)
108 g_return_if_fail (g != NULL);
113 obj_getMinor (myobj * g)
115 g_return_val_if_fail ((g != NULL), 0);
120 obj_setVersion (myobj * g, gint32 h)
122 g_return_if_fail (g != NULL);
127 obj_getVersion (myobj * g)
135 obj_setActive (myobj * g, gboolean h)
143 obj_getActive (myobj * g)
151 obj_setDiscount (myobj * g, gdouble h)
159 obj_getDiscount (myobj * g)
167 obj_setDate (myobj * g,
QofTime *h)
171 do_test ((h != NULL),
"passed a NULL time");
172 do_test ((qof_time_is_valid (h) == TRUE),
173 "passed an invalid time");
178 obj_getDate (myobj * g)
182 do_test ((g->date != NULL),
"stored time is NULL");
183 do_test ((qof_time_is_valid (g->date) == TRUE),
184 "stored time is invalid");
189 obj_getGUID (myobj * g)
197 obj_setName (myobj * g,
char *h)
201 g->Name = strdup (h);
205 obj_getName (myobj * g)
221 obj_getAmount (myobj * g)
230 .e_type = TEST_MODULE_NAME,
231 .type_label = TEST_MODULE_DESC,
232 .create = (gpointer) obj_create,
239 .version_cmp = (gint (*)(gpointer, gpointer))
249 {OBJ_AMOUNT, QOF_TYPE_NUMERIC, (
QofAccessFunc) obj_getAmount,
255 {OBJ_DISCOUNT, QOF_TYPE_DOUBLE, (
QofAccessFunc) obj_getDiscount,
257 {OBJ_ACTIVE, QOF_TYPE_BOOLEAN, (
QofAccessFunc) obj_getActive,
259 {OBJ_VERSION, QOF_TYPE_INT32, (
QofAccessFunc) obj_getVersion,
269 {NULL, NULL, NULL, NULL, NULL},
281 gdouble init_value, discount;
282 myobj *import_obj, *target_obj, *new_obj;
284 QofTime *base_time, *temp_time;
288 gchar *import_init, *target_init;
289 gchar flag, flag_check;
297 flag = get_random_character ();
300 version = get_random_int_in_range (0, 10000);
301 minor = get_random_int_in_range (1000001, 2000000);
302 import_init =
"test";
303 target_init =
"testing";
305 do_test ((TRUE == qof_time_is_valid (base_time)),
306 "invalid init time");
314 "2006-07-19 11:39:54.568714241 +0000", str)),
315 "failed to compare base_time correctly.");
320 do_test ((NULL != target),
"#1 target book is NULL");
321 do_test ((NULL !=
import),
"#2 import book is NULL");
324 import_obj = g_new (myobj, 1);
325 do_test ((NULL != import_obj),
"#3 new object create");
327 do_test ((NULL != &import_obj->inst),
"#4 instance init");
329 do_test ((NULL != &import_obj->obj_guid),
"#5 guid set");
331 do_test ((NULL != &import_obj->inst.entity),
"#6 gnc event create");
332 obj_setName (import_obj, import_init);
333 do_test ((NULL != &import_obj->Name),
"#7 string set");
335 obj_setAmount (import_obj, obj_amount);
337 "#8 gnc_numeric set");
338 obj_setActive (import_obj, active);
339 do_test ((FALSE != &import_obj->active),
"#9 gboolean set");
340 obj_setDiscount (import_obj, discount);
341 obj_setVersion (import_obj, version);
342 do_test ((version == import_obj->version),
"#11 gint32 set");
343 obj_setMinor (import_obj, minor);
344 do_test ((minor == import_obj->minor),
"#12 gint64 set");
345 do_test ((TRUE == qof_time_is_valid (base_time)),
346 "invalid import time ts");
354 "2006-07-19 11:39:54.568714241 +0000", str)),
355 "failed to compare base_time correctly.");
359 obj_setDate (import_obj, base_time);
360 do_test ((TRUE == qof_time_is_valid (import_obj->date)),
361 "invalid import time");
362 do_test ((
qof_time_cmp (base_time, import_obj->date) == 0),
363 "test #13 date set");
364 obj_setFlag (import_obj, flag);
365 do_test ((flag == obj_getFlag (import_obj)),
"#14 flag set");
369 discount = get_random_double ();
374 new_obj = g_new (myobj, 1);
378 obj_setName (new_obj, import_init);
379 obj_setAmount (new_obj, obj_amount);
380 obj_setActive (new_obj, active);
381 obj_setDiscount (new_obj, discount);
382 obj_setVersion (new_obj, version);
383 obj_setMinor (new_obj, minor);
384 do_test ((TRUE == qof_time_is_valid (base_time)),
385 "second import time invalid");
393 "2006-07-19 11:39:54.568714241 +0000", str)),
394 "failed to compare base_time correctly.");
398 obj_setDate (new_obj, base_time);
399 obj_setFlag (new_obj, flag);
403 discount = get_random_double ();
409 target_obj = g_new (myobj, 1);
413 obj_setName (target_obj, target_init);
414 obj_setAmount (target_obj, obj_amount);
415 obj_setActive (target_obj, active);
416 obj_setDiscount (target_obj, discount);
417 obj_setVersion (target_obj, version);
418 obj_setMinor (target_obj, minor);
426 "2006-07-19 11:39:54.568714241 +0000", str)),
427 "failed to compare base_time correctly.");
432 do_test ((TRUE == qof_time_is_valid (temp_time)),
433 "time add secs returned invalid");
434 obj_setDate (target_obj, temp_time);
435 obj_setFlag (target_obj, flag);
436 do_test ((flag == obj_getFlag (target_obj)),
"#15 flag set");
439 do_test (mergeData != NULL,
440 "FATAL: Merge could not be initialised!\t aborting . . ");
441 g_return_if_fail (mergeData != NULL);
451 obj_getName (target_obj))) != 0),
452 "Init value test #1");
458 do_test (((
safe_strcmp (import_init, obj_getName (target_obj))) == 0),
459 "Merged value test #1");
463 (obj_getName (target_obj), obj_getName (import_obj))) == 0),
464 "Merged value test #2");
468 "import gnc_numeric check");
470 "target gnc_numeric check");
482 temp_time = target_obj->date;
490 "2006-07-19 11:39:54.568714241 +0000", str)),
491 "failed to compare base_time after merge.");
502 "2006-07-19 11:39:54.568714241 +0000", str)),
503 "failed to compare target time after merge.");
508 "date value check: 1");
510 DEBUG (
" import<->target=%d\n",
517 DEBUG (
" base_time=%" G_GINT64_FORMAT
520 DEBUG (
" import:\nyear=%" G_GINT64_FORMAT
521 " month=%ld day=%ld hour=%ld min=%ld sec=%"
522 G_GINT64_FORMAT
"nsecs=%ld\n",
526 DEBUG (
" import=%s\n", check);
531 DEBUG (
" target:\nyear=%" G_GINT64_FORMAT
532 " month=%ld day=%ld hour=%ld min=%ld sec=%"
533 G_GINT64_FORMAT
"nsecs=%ld\n",
537 DEBUG (
" target=%s\n", check);
544 flag_check = obj_getFlag (target_obj);
545 do_test ((flag_check == obj_getFlag (import_obj)),
"flag value check: 1");
546 do_test ((obj_getFlag (import_obj) == obj_getFlag (target_obj)),
547 "flag value check: 2");
558 gboolean skip_target;
564 do_test ((rule != NULL),
"loop:#1 Rule is NULL");
565 do_test (remainder > 0,
"loop:#2 remainder error.");
567 "loop:#3 object label\n");
569 "loop:#4 empty import entity");
579 "loop: entity type mismatch");
582 "loop: empty parameter list");
585 while (testing != NULL)
587 eachParam = testing->data;
588 do_test ((eachParam != NULL),
"loop:#8 no QofParam data");
589 do_test ((eachParam->param_name != NULL),
590 "loop:#9 no parameter name");
591 do_test ((eachParam->param_getfcn != NULL),
592 "loop:#10 no get function");
593 do_test ((eachParam->param_setfcn != NULL),
594 "loop:#11 no set function");
596 if (
safe_strcmp (eachParam->param_type, QOF_TYPE_STRING) == 0)
599 g_strdup (eachParam->
600 param_getfcn (rule->
importEnt, eachParam));
601 do_test ((importstring != NULL),
602 "loop:#12 direct get_fcn import");
603 do_test ((
safe_strcmp (importstring,
"test") == 0),
604 "loop:#13 direct import comparison");
608 eachParam->param_getfcn (rule->
targetEnt, eachParam);
609 do_test ((targetstring != NULL),
610 "loop:#14 direct get_fcn target");
611 do_test ((
safe_strcmp (targetstring,
"testing") == 0),
612 "loop:#15 direct target comparison");
619 do_test ((importstring != NULL),
620 "loop:#16 import param_as_string is null");
625 do_test ((targetstring != NULL),
626 "loop:#17 target param_as_string is null");
628 testing = g_slist_next (testing);
634 "update result fail");
643 print_test_results ();