r22135 - gnucash/trunk/src - [Testing] Add hits field to TestErrorStruct

John Ralls jralls at code.gnucash.org
Tue Apr 3 17:35:48 EDT 2012


Author: jralls
Date: 2012-04-03 17:35:47 -0400 (Tue, 03 Apr 2012)
New Revision: 22135
Trac: http://svn.gnucash.org/trac/changeset/22135

Modified:
   gnucash/trunk/src/backend/sql/test/utest-gnc-backend-sql.c
   gnucash/trunk/src/engine/test/utest-Account.c
   gnucash/trunk/src/engine/test/utest-Split.c
   gnucash/trunk/src/test-core/unittest-support.c
   gnucash/trunk/src/test-core/unittest-support.h
Log:
[Testing] Add hits field to TestErrorStruct


Allows asserting on the number of times error messages are encountered.

Modified: gnucash/trunk/src/backend/sql/test/utest-gnc-backend-sql.c
===================================================================
--- gnucash/trunk/src/backend/sql/test/utest-gnc-backend-sql.c	2012-04-03 21:35:38 UTC (rev 22134)
+++ gnucash/trunk/src/backend/sql/test/utest-gnc-backend-sql.c	2012-04-03 21:35:47 UTC (rev 22135)
@@ -199,8 +199,8 @@
     gchar *msg2 = "[gnc_sql_commit_edit()] gnc_sql_commit_edit(): Unknown object type 'Book'\n";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
     gchar *logdomain = "gnc.backend.sql";
-    TestErrorStruct check1 = { loglevel, logdomain, msg1 };
-    TestErrorStruct check2 = { loglevel, logdomain, msg2 };
+    TestErrorStruct check1 = { loglevel, logdomain, msg1, 0 };
+    TestErrorStruct check2 = { loglevel, logdomain, msg2, 0 };
     guint hdlr1;
 
     test_add_error (&check1);
@@ -229,6 +229,8 @@
     g_assert (!qof_instance_get_dirty_flag (inst));
     g_assert (!qof_book_session_not_saved (be.book));
     g_assert_cmpint (dirty_called, == , 0);
+    g_assert_cmpint (check1.hits, ==, 2);
+    g_assert_cmpint (check2.hits, ==, 0);
 
     qof_book_mark_session_dirty (be.book);
 
@@ -239,6 +241,8 @@
     g_assert (!qof_instance_get_dirty_flag (QOF_INSTANCE (be.book)));
     g_assert (qof_book_session_not_saved (be.book));
     g_assert_cmpint (dirty_called, == , 1);
+    g_assert_cmpint (check1.hits, ==, 2);
+    g_assert_cmpint (check2.hits, ==, 0);
 
     qof_instance_set_dirty_flag (QOF_INSTANCE (be.book), TRUE);
 
@@ -249,6 +253,8 @@
     g_assert (!qof_instance_get_dirty_flag (QOF_INSTANCE (be.book)));
     g_assert (!qof_book_session_not_saved (be.book));
     g_assert_cmpint (dirty_called, == , 0);
+    g_assert_cmpint (check1.hits, ==, 2);
+    g_assert_cmpint (check2.hits, ==, 2);
 
     g_log_remove_handler (logdomain, hdlr1);
     g_object_unref (inst);

Modified: gnucash/trunk/src/engine/test/utest-Account.c
===================================================================
--- gnucash/trunk/src/engine/test/utest-Account.c	2012-04-03 21:35:38 UTC (rev 22134)
+++ gnucash/trunk/src/engine/test/utest-Account.c	2012-04-03 21:35:47 UTC (rev 22135)
@@ -454,7 +454,7 @@
 static void
 test_gnc_account_list_name_violations (Fixture *fixture, gconstpointer pData)
 {
-    TestErrorStruct quiet = { 0, NULL, NULL };
+    TestErrorStruct quiet = { 0, NULL, NULL, 0 };
     GList *results, *res_iter;
     gchar *sep = ":";
     QofBook *book = gnc_account_get_book (fixture->acct);
@@ -639,7 +639,7 @@
 test_gnc_book_set_get_root_account (Fixture *fixture, gconstpointer pData)
 {
     gchar *msg = "[gnc_book_set_root_account()] cannot mix and match books freely!";
-    TestErrorStruct quiet = { 0, NULL, msg };
+    TestErrorStruct quiet = { 0, NULL, msg, 0 };
     Account *acc1, *acc2;
     QofBook* book1 = qof_book_new ();
     GLogFunc oldlogger;
@@ -728,7 +728,7 @@
     Account *clone;
     QofBook *book = gnc_account_get_book (fixture->acct);
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct quiet = { loglevel, "gnc.engine", NULL };
+    TestErrorStruct quiet = { loglevel, "gnc.engine", NULL, 0 };
     GLogFunc oldlogger;
     AccountPrivate *acct_p, *clone_p;
     oldlogger = g_log_set_default_handler ((GLogFunc)test_null_handler, &quiet);
@@ -822,8 +822,8 @@
                   " xaccAccountBeginEdit(); xaccAccountDestroy(); \n";
     gchar *msg2 = "xaccTransGetSplitIndex: assertion `trans && split' failed";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct check1 = { loglevel, "gnc.account", msg1 };
-    TestErrorStruct check2 = { loglevel, "gnc.engine", msg2 };
+    TestErrorStruct check1 = { loglevel, "gnc.account", msg1, 0 };
+    TestErrorStruct check2 = { loglevel, "gnc.engine", msg2, 0 };
     GLogLevelFlags oldmask1, oldmask2;
     QofBook *book = gnc_account_get_book (fixture->acct);
     Account *parent = gnc_account_get_parent (fixture->acct);
@@ -853,6 +853,8 @@
     g_assert (p_priv->splits != NULL);
     g_assert (p_priv->parent != NULL);
     g_assert (p_priv->commodity != NULL);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
     /* Now set the other private parts to something so that they can be set back */
     p_priv->cleared_balance = gnc_numeric_create ( 5, 12);
     p_priv->reconciled_balance = gnc_numeric_create ( 5, 12);
@@ -860,6 +862,8 @@
     p_priv->balance_dirty = TRUE;
     p_priv->sort_dirty = TRUE;
     fixture->func->xaccFreeAccount (parent);
+    g_assert_cmpint (check1.hits, ==, 6);
+    g_assert_cmpint (check2.hits, ==, 6);
     /* cleanup what's left */
     g_log_remove_handler ("gnc.account", hdlr1);
     g_log_remove_handler ("gnc.engine", hdlr2);
@@ -927,8 +931,8 @@
                   " xaccAccountBeginEdit(); xaccAccountDestroy(); \n";
     gchar *msg2 = "xaccTransGetSplitIndex: assertion `trans && split' failed";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct check1 = { loglevel, "gnc.account", msg1 };
-    TestErrorStruct check2 = { loglevel, "gnc.engine", msg2 };
+    TestErrorStruct check1 = { loglevel, "gnc.account", msg1, 0 };
+    TestErrorStruct check2 = { loglevel, "gnc.engine", msg2, 0 };
     guint hdlr1, hdlr2;
     TestSignal sig1, sig2;
     QofBook *book = gnc_account_get_book (fixture->acct);
@@ -958,6 +962,8 @@
     g_assert (p_priv->splits != NULL);
     g_assert (p_priv->parent != NULL);
     g_assert (p_priv->commodity != NULL);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
 
     sig1 = test_signal_new (&parent->inst, QOF_EVENT_MODIFY, NULL);
     sig2 = test_signal_new (&parent->inst, QOF_EVENT_DESTROY, NULL);
@@ -972,6 +978,8 @@
     g_assert (p_priv->splits != NULL);
     g_assert (p_priv->parent != NULL);
     g_assert (p_priv->commodity != NULL);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
     /* xaccAccountDestroy destroys the account by calling
      * qof_instance_set_destroying (), then xaccAccountCommitEdit ();
      */
@@ -980,6 +988,8 @@
     /* So this time we make sure that the account is destroyed */
     test_signal_assert_hits (sig1, 2);
     test_signal_assert_hits (sig2, 1);
+    g_assert_cmpint (check1.hits, ==, 2);
+    g_assert_cmpint (check2.hits, ==, 12);
     /* And clean up */
     test_signal_free (sig1);
     test_signal_free (sig2);
@@ -1035,9 +1045,9 @@
     gchar *msg2 = "gnc_account_insert_split: assertion `GNC_IS_SPLIT(acc)' failed";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
 //    gchar *log_domain = "gnc.engine";
-    TestErrorStruct check1 = { loglevel, "gnc.account", msg1 };
-    TestErrorStruct check2 = { loglevel, "gnc.account", msg2 };
-    TestErrorStruct check3 = { loglevel, "gnc.engine", NULL };
+    TestErrorStruct check1 = { loglevel, "gnc.account", msg1, 0 };
+    TestErrorStruct check2 = { loglevel, "gnc.account", msg2, 0 };
+    TestErrorStruct check3 = { loglevel, "gnc.engine", NULL, 0 };
     guint logger;
     sig1 = test_signal_new (&fixture->acct->inst, QOF_EVENT_MODIFY, NULL);
     sig2 = test_signal_new (&fixture->acct->inst, GNC_EVENT_ITEM_ADDED, split1);
@@ -1061,6 +1071,9 @@
     test_signal_assert_hits (sig2, 0);
     g_log_remove_handler ("gnc.engine", logger);
     test_clear_error_list ();
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
+    g_assert_cmpint (check3.hits, ==, 4);
 
     /* Check that it works the first time */
     g_assert (gnc_account_insert_split (fixture->acct, split1));
@@ -1069,6 +1082,9 @@
     g_assert (priv->balance_dirty);
     test_signal_assert_hits (sig1, 1);
     test_signal_assert_hits (sig2, 1);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
+    g_assert_cmpint (check3.hits, ==, 4);
     /* Check that it fails if the split has already been added once */
     g_assert (!gnc_account_insert_split (fixture->acct, split1));
     /* Free up hdlr2 and set up hdlr2 */
@@ -1081,6 +1097,9 @@
     g_assert (priv->balance_dirty);
     test_signal_assert_hits (sig1, 2);
     test_signal_assert_hits (sig3, 1);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
+    g_assert_cmpint (check3.hits, ==, 4);
     /* One more add, incrementing the editlevel to get sort_dirty set. */
     test_signal_free (sig3);
     sig3 = test_signal_new (&fixture->acct->inst, GNC_EVENT_ITEM_ADDED, split3);
@@ -1092,6 +1111,9 @@
     g_assert (priv->balance_dirty);
     test_signal_assert_hits (sig1, 3);
     test_signal_assert_hits (sig3, 1);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
+    g_assert_cmpint (check3.hits, ==, 4);
     /* Finally delete a split. It's going to recompute the balance, so
      * balance_dirty will be false. */
     test_signal_free (sig3);
@@ -1103,7 +1125,10 @@
     g_assert (!priv->balance_dirty);
     test_signal_assert_hits (sig1, 4);
     test_signal_assert_hits (sig3, 1);
-    /* And do it again to make sure that it fails when the split has
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
+    g_assert_cmpint (check3.hits, ==, 4);
+   /* And do it again to make sure that it fails when the split has
      * already been removed */
     g_assert (!gnc_account_remove_split (fixture->acct, split3));
     g_assert_cmpuint (g_list_length (priv->splits), == , 2);
@@ -1111,6 +1136,9 @@
     g_assert (!priv->balance_dirty);
     test_signal_assert_hits (sig1, 4);
     test_signal_assert_hits (sig3, 1);
+    g_assert_cmpint (check1.hits, ==, 0);
+    g_assert_cmpint (check2.hits, ==, 0);
+    g_assert_cmpint (check3.hits, ==, 4);
     /* Clean up the handlers */
     test_signal_free (sig3);
     test_signal_free (sig1);
@@ -1400,8 +1428,8 @@
     gchar *msg1 = "[gnc_account_append_child()] reparenting accounts across books is not correctly supported\n";
     gchar *msg2 = "[gnc_account_remove_child()] account not a child of parent";
     guint log_handler = 0;
-    TestErrorStruct check_warn = {G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL, "gnc.account", msg1 };
-    TestErrorStruct check_err = {G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL, "gnc.account", msg2 };
+    TestErrorStruct check_warn = {G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL, "gnc.account", msg1, 0 };
+    TestErrorStruct check_err = {G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL, "gnc.account", msg2, 0 };
     TestSignal sig1, sig2, sig3;
     AccountTestFunctions *func = _utest_account_fill_functions ();
     AccountPrivate *frpriv = func->get_private (froot),
@@ -1416,6 +1444,8 @@
     test_signal_assert_hits (sig1, 1);
     test_signal_assert_hits (sig2, 0);
     test_signal_assert_hits (sig3, 0);
+    g_assert_cmpint (check_warn.hits, ==, 0);
+    g_assert_cmpint (check_err.hits, ==, 0);
     g_assert (qof_instance_get_dirty (QOF_INSTANCE (froot)));
     g_assert (qof_instance_get_dirty (QOF_INSTANCE (account)));
     g_assert (g_list_find (frpriv->children, account));
@@ -1431,6 +1461,8 @@
     test_signal_assert_hits (sig1, 2);
     test_signal_assert_hits (sig2, 1);
     test_signal_assert_hits (sig3, 1);
+    g_assert_cmpint (check_warn.hits, ==, 1);
+    g_assert_cmpint (check_err.hits, ==, 0);
     g_assert (!qof_collection_lookup_entity (
                   qof_book_get_collection (fbook, GNC_ID_ACCOUNT),
                   acct_guid));
@@ -1454,12 +1486,16 @@
 
     test_signal_assert_hits (sig1, 0);
     test_signal_assert_hits (sig2, 0);
+    g_assert_cmpint (check_err.hits, ==, 1);
+    g_assert_cmpint (check_warn.hits, ==, 1);
 
     gnc_account_remove_child (fixture->acct, account);
     g_assert (gnc_account_get_parent (account) == NULL);
     g_assert (g_list_find (apriv->children, account) == NULL);
     test_signal_assert_hits (sig1, 1);
     test_signal_assert_hits (sig2, 1);
+    g_assert_cmpint (check_warn.hits, ==, 1);
+    g_assert_cmpint (check_err.hits, ==, 1);
     test_signal_free (sig1);
     test_signal_free (sig2);
     xaccAccountBeginEdit (account);
@@ -2039,9 +2075,9 @@
     gchar *msg2 = "[xaccAccountStringToType()] asked to translate unknown account type string (null).\n";
     gchar *msg3 = "[xaccAccountStringToType()] asked to translate unknown account type string LAST.\n";
     guint loghandler = 0;
-    TestErrorStruct check1 = {loglevel, logdomain, msg1};
-    TestErrorStruct check2 = {loglevel, logdomain, msg2};
-    TestErrorStruct check3 = {loglevel, logdomain, msg3};
+    TestErrorStruct check1 = { loglevel, logdomain, msg1, 0 };
+    TestErrorStruct check2 = { loglevel, logdomain, msg2, 0 };
+    TestErrorStruct check3 = { loglevel, logdomain, msg3, 0 };
     Account *acc = g_object_new (GNC_TYPE_ACCOUNT, NULL);
 
     for (type = ACCT_TYPE_NONE; type < ACCT_TYPE_LAST; type++)
@@ -2093,20 +2129,23 @@
                                     (GLogFunc)test_null_handler, &check1);
     g_test_log_set_fatal_handler ((GTestLogFatalFunc)test_checked_handler, &check1);
     g_assert (!xaccAccountTypeEnumAsString (ACCT_TYPE_LAST));
-    g_assert_cmpstr (check1.msg, == , msg1);
+    g_assert_cmpint (check1.hits, ==, 1);
+
     g_log_remove_handler (logdomain, loghandler);
     g_free (msg1);
     loghandler = g_log_set_handler (logdomain, loglevel,
                                     (GLogFunc)test_null_handler, &check2);
     g_test_log_set_fatal_handler ((GTestLogFatalFunc)test_checked_handler, &check2);
     g_assert (!xaccAccountStringToType (NULL, &type));
-    g_assert_cmpstr (check2.msg, == , msg2);
+    g_assert_cmpint (check2.hits, ==, 1);
+
     g_log_remove_handler (logdomain, loghandler);
     loghandler = g_log_set_handler (logdomain, loglevel,
                                     (GLogFunc)test_null_handler, &check3);
     g_test_log_set_fatal_handler ((GTestLogFatalFunc)test_checked_handler, &check3);
     g_assert (!xaccAccountStringToType ("LAST", &type));
-    g_assert_cmpstr (check3.msg, == , msg3);
+    g_assert_cmpint (check3.hits, ==, 1);
+
     g_log_remove_handler (logdomain, loghandler);
 
 
@@ -2140,8 +2179,8 @@
     gchar *msg2 = g_strdup_printf ("[xaccParentAccountTypesCompatibleWith()] bad account type: %d", ACCT_TYPE_SAVINGS);
     gchar *logdomain = "gnc.account";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct check1 = { loglevel, logdomain, msg1 };
-    TestErrorStruct check2 = { loglevel, logdomain, msg2 };
+    TestErrorStruct check1 = { loglevel, logdomain, msg1, 0 };
+    TestErrorStruct check2 = { loglevel, logdomain, msg2, 0 };
     gint loghandler;
 
     for (type = ACCT_TYPE_BANK; type < NUM_ACCOUNT_TYPES; type++)
@@ -2156,7 +2195,7 @@
             compat = xaccParentAccountTypesCompatibleWith (type);
             g_log_remove_handler (logdomain, loghandler);
             g_assert_cmpint (compat, == , 0);
-            g_assert_cmpstr (check1.msg, == , msg1);
+	    g_assert_cmpint (check1.hits, ==, 1);
             g_free (msg1);
             continue;
         }
@@ -2184,7 +2223,7 @@
     compat = xaccParentAccountTypesCompatibleWith (++type);
     g_log_remove_handler (logdomain, loghandler);
     g_assert_cmpint (compat, == , 0);
-    g_assert_cmpstr (check2.msg, == , msg2);
+    g_assert_cmpint (check2.hits, ==, 1);
     g_free (msg2);
 }
 /* More KVP getters & setters
@@ -2290,7 +2329,7 @@
     gchar *logdomain = "gnc.engine";
     gint loglevel =  G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
     gchar *msg = "[xaccSplitCommitEdit ()] Account grabbed split prematurely.";
-    TestErrorStruct quiet = { loglevel, logdomain, msg };
+    TestErrorStruct quiet = { loglevel, logdomain, msg, 0 };
     guint hdlr = g_log_set_handler (logdomain, loglevel,
     			   (GLogFunc)test_null_handler, &quiet);
     g_test_log_set_fatal_handler ((GTestLogFatalFunc)test_checked_handler, &quiet);

Modified: gnucash/trunk/src/engine/test/utest-Split.c
===================================================================
--- gnucash/trunk/src/engine/test/utest-Split.c	2012-04-03 21:35:38 UTC (rev 22134)
+++ gnucash/trunk/src/engine/test/utest-Split.c	2012-04-03 21:35:47 UTC (rev 22135)
@@ -374,7 +374,7 @@
 {
     gchar *msg = "[xaccSplitEqualCheckBal()] test balances differ: 123/100 vs 456/100";
     guint loglevel = G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL, hdlr;
-    TestErrorStruct check = { loglevel, "gnc.engine", msg };
+    TestErrorStruct check = { loglevel, "gnc.engine", msg, 0 };
 
     GLogFunc oldlogger;
     gnc_numeric foo = gnc_numeric_create (123, 100);
@@ -389,6 +389,7 @@
 
     g_assert_cmpint (fixture->func->xaccSplitEqualCheckBal ("test ", foo, foo), ==, TRUE);
     g_assert_cmpint (fixture->func->xaccSplitEqualCheckBal ("test ", foo, bar), ==, FALSE);
+    g_assert_cmpint (check.hits, ==, 2);
     g_log_remove_handler ("gnc.engine", hdlr);
     test_clear_error_list ();
 
@@ -418,10 +419,10 @@
     gchar *msg14 = "[xaccSplitEqualCheckBal()] reconciled balances differ: 321/1000 vs 0/1";
     gchar *logdomain = "gnc.engine";
     guint loglevel = G_LOG_LEVEL_WARNING | G_LOG_FLAG_FATAL;
-    TestErrorStruct checkA = { loglevel, logdomain, msg01 };
-    TestErrorStruct checkB = { loglevel, logdomain, msg10 };
-    TestErrorStruct checkC = { loglevel, logdomain, msg11 };
-    TestErrorStruct checkD = { loglevel, logdomain, msg14 };
+    TestErrorStruct checkA = { loglevel, logdomain, msg01, 0 };
+    TestErrorStruct checkB = { loglevel, logdomain, msg10, 0 };
+    TestErrorStruct checkC = { loglevel, logdomain, msg11, 0 };
+    TestErrorStruct checkD = { loglevel, logdomain, msg14, 0 };
     guint hdlr;
     GLogFunc oldlogger;
     oldlogger = g_log_set_default_handler ((GLogFunc)test_null_handler, &checkA);
@@ -436,6 +437,10 @@
 /* Test that a NULL comparison fails */
     g_assert (xaccSplitEqual (fixture->split, NULL, TRUE, TRUE, TRUE) == FALSE);
     g_assert (xaccSplitEqual (NULL, split1, TRUE, TRUE, TRUE) == FALSE);
+    g_assert_cmpint (checkA.hits, ==, 4);
+    g_assert_cmpint (checkB.hits, ==, 0);
+    g_assert_cmpint (checkC.hits, ==, 0);
+    g_assert_cmpint (checkD.hits, ==, 0);
     checkA.msg = msg02;
 /* Clone creates splits with different GUIDs: Make sure that it fails comparison */
     g_assert (xaccSplitEqual (fixture->split, split1, TRUE, TRUE, TRUE) == FALSE);
@@ -445,6 +450,10 @@
 			      (GLogFunc)test_list_handler, &checkA);
     g_assert (xaccSplitEqual (fixture->split, split1, FALSE, TRUE, TRUE) == FALSE);
 /* Now set split1's parent so that it passes -- we're also checking that the GUID check is disabled when we pass FALSE to check_guids */
+    g_assert_cmpint (checkA.hits, ==, 6);
+    g_assert_cmpint (checkB.hits, ==, 2);
+    g_assert_cmpint (checkC.hits, ==, 2);
+    g_assert_cmpint (checkD.hits, ==, 0);
     split1->parent = fixture->split->parent;
     g_log_remove_handler (logdomain, hdlr);
     hdlr = g_log_set_handler (logdomain, loglevel,
@@ -455,6 +464,10 @@
 		  "guid", qof_instance_get_guid (QOF_INSTANCE(fixture->split)),
 		  NULL);
     g_assert (xaccSplitEqual (fixture->split, split1, TRUE, TRUE, TRUE) == TRUE);
+    g_assert_cmpint (checkA.hits, ==, 6);
+    g_assert_cmpint (checkB.hits, ==, 2);
+    g_assert_cmpint (checkC.hits, ==, 2);
+    g_assert_cmpint (checkD.hits, ==, 0);
 /* Change the memo and action and test that each in turn causes the comparison to fail */
     split1->memo = "baz";
     msg03 = g_strdup_printf ("[xaccSplitEqual()] memos differ: (%p)%s vs (%p)%s",
@@ -462,6 +475,10 @@
 		     split1->memo, split1->memo);
     checkA.msg = msg03;
     g_assert (xaccSplitEqual (fixture->split, split1, TRUE, TRUE, TRUE) == FALSE);
+    g_assert_cmpint (checkA.hits, ==, 8);
+    g_assert_cmpint (checkB.hits, ==, 2);
+    g_assert_cmpint (checkC.hits, ==, 2);
+    g_assert_cmpint (checkD.hits, ==, 0);
     split1->memo = fixture->split->memo;
     split1->action = "bar";
     checkA.msg = msg04;
@@ -470,10 +487,18 @@
     hdlr  = g_log_set_handler (logdomain, loglevel,
 			       (GLogFunc)test_list_handler, &checkA);
    g_assert (xaccSplitEqual (fixture->split, split1, TRUE, TRUE, TRUE) == FALSE);
+    g_assert_cmpint (checkA.hits, ==, 12);
+    g_assert_cmpint (checkB.hits, ==, 2);
+    g_assert_cmpint (checkC.hits, ==, 2);
+    g_assert_cmpint (checkD.hits, ==, 0);
 /* Split2 doesn't have balances copied from fixture->split, so the balance test fails */
     checkB.msg = msg12;
     checkC.msg = msg13;
     g_assert (xaccSplitEqual (fixture->split, split2, TRUE, TRUE, TRUE) == FALSE);
+    g_assert_cmpint (checkA.hits, ==, 12);
+    g_assert_cmpint (checkB.hits, ==, 4);
+    g_assert_cmpint (checkC.hits, ==, 2);
+    g_assert_cmpint (checkD.hits, ==, 0);
     test_clear_error_list ();
     g_assert (xaccSplitEqual (fixture->split, split2, TRUE, FALSE, TRUE) == TRUE);
     g_object_unref (split1);
@@ -514,8 +539,8 @@
     gchar *logdomain = "gnc.engine";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
     guint hdlr;
-    TestErrorStruct checkA = { loglevel, logdomain, msg1 };
-    TestErrorStruct checkB = { loglevel, logdomain, msg2 };
+    TestErrorStruct checkA = { loglevel, logdomain, msg1, 0 };
+    TestErrorStruct checkB = { loglevel, logdomain, msg2, 0 };
     TestSignal sig1, sig2;
     TestErr error = { 0, ERR_BACKEND_NO_ERR };
     Account *oacc = xaccMallocAccount (xaccSplitGetBook (fixture->split));
@@ -551,6 +576,8 @@
     g_assert_cmpint (error.lasterr, ==, ERR_BACKEND_NO_ERR);
     g_assert (fixture->split->orig_acc == fixture->split->acc);
     g_assert (fixture->split->orig_parent == fixture->split->parent);
+    g_assert_cmpint (checkA.hits, ==, 4);
+    g_assert_cmpint (checkB.hits, ==, 2);
 
     g_log_remove_handler (logdomain, hdlr);
     qof_instance_mark_clean (QOF_INSTANCE (fixture->split->parent));
@@ -571,6 +598,8 @@
     g_assert (qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
     test_signal_assert_hits (sig1, 1);
     test_signal_assert_hits (sig2, 4);
+    g_assert_cmpint (checkA.hits, ==, 4);
+    g_assert_cmpint (checkB.hits, ==, 2);
     g_assert_cmpint (error.hits, ==, 0);
     g_assert_cmpint (error.lasterr, ==, ERR_BACKEND_NO_ERR);
     g_assert (fixture->split->orig_acc == fixture->split->acc);
@@ -838,7 +867,7 @@
 	"given split currency=%s and commodity=%s\n";
     gchar *logdomain = "gnc.engine";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct check = { loglevel, logdomain, msg1 };
+    TestErrorStruct check = { loglevel, logdomain, msg1, 0 };
     gnc_numeric value = { 360, 240 };
     gnc_numeric old_val = fixture->split->value;
     gnc_numeric old_amt = fixture->split->amount;
@@ -851,6 +880,7 @@
     xaccSplitSetBaseValue (fixture->split, value, fixture->comm);
     g_assert (!qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
     xaccTransRollbackEdit (fixture->split->parent);
+    g_assert_cmpint (check.hits, ==, 1);
 /* Base currency ==  currency, != commodity */
     fixture->split->acc = acc;
     xaccSplitSetBaseValue (fixture->split, value, fixture->curr);
@@ -859,6 +889,7 @@
     g_assert_cmpint (fixture->split->amount.num, ==, 321);
     g_assert_cmpint (fixture->split->amount.denom, ==, 1000);
     g_assert (qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
+    g_assert_cmpint (check.hits, ==, 1);
 
 /* Base currency == currency, == commodity */
     qof_instance_mark_clean (QOF_INSTANCE (fixture->split));
@@ -872,6 +903,7 @@
     g_assert_cmpint (fixture->split->amount.num, ==, 360);
     g_assert_cmpint (fixture->split->amount.denom, ==, 240);
     g_assert (qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
+    g_assert_cmpint (check.hits, ==, 1);
 /* Base currency != currency, == commodity */
     qof_instance_mark_clean (QOF_INSTANCE (fixture->split));
     fixture->split->value = old_val;
@@ -882,6 +914,7 @@
     g_assert_cmpint (fixture->split->amount.num, ==, 1500);
     g_assert_cmpint (fixture->split->amount.denom, ==, 1000);
     g_assert (qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
+    g_assert_cmpint (check.hits, ==, 1);
 
 /* Base currency != currency, != commodity */
     check.msg = g_strdup_printf (fmt, gnc_commodity_get_printname (gnaira),
@@ -895,6 +928,7 @@
     xaccAccountSetCommodity(fixture->split->acc, fixture->comm);
     xaccSplitSetBaseValue (fixture->split, value, gnaira);
     g_assert (!qof_instance_is_dirty (QOF_INSTANCE (fixture->split)));
+    g_assert_cmpint (check.hits, ==, 2);
 
     g_free (check.msg);
     g_log_set_default_handler (oldlogger, NULL);
@@ -933,7 +967,7 @@
 
     gchar *logdomain = "gnc.engine";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct check = { loglevel, logdomain, NULL };
+    TestErrorStruct check = { loglevel, logdomain, NULL, 0 };
     GLogFunc oldlogger = g_log_set_default_handler ((GLogFunc)test_null_handler, &check);
 
     check.msg = g_strdup_printf ("[xaccSplitConvertAmount()] The split's (%s) amount can't be converted from GNCXX into GNM.", guid_to_string(xaccSplitGetGUID(o_split)));
@@ -976,18 +1010,20 @@
 				  &check);
     result = xaccSplitConvertAmount (split, ya_acc);
     g_assert (gnc_numeric_zero_p (result));
+    g_assert_cmpint (check.hits, ==, 1);
 
-
 /* Transaction isn't balanced, split has 0 value, returns that */
     split->value = gnc_numeric_zero ();
     result = xaccSplitConvertAmount (split, o_acc);
     g_assert (gnc_numeric_zero_p (result));
+    g_assert_cmpint (check.hits, ==, 1);
 
 /* Transaction isn't balanced, compute a conversion */
     split->value = gnc_numeric_create (71330, 240);
     result = xaccSplitConvertAmount (split, o_acc);
     g_assert_cmpint (result.num, ==, -402131);
     g_assert_cmpint (result.denom, ==, 1000);
+    g_assert_cmpint (check.hits, ==, 1);
 
     test_destroy (split);
     test_destroy (acc);
@@ -1489,7 +1525,7 @@
 /* FIXME: This error doesn't actually stop execution, so we need to test for it happening. */
     gchar *msg = "[xaccSplitSetParent()] You may not add the split to more"
 	" than one transaction during the BeginEdit/CommitEdit block.";
-    TestErrorStruct check = { loglevel, logdomain, msg };
+    TestErrorStruct check = { loglevel, logdomain, msg, 0 };
     GLogFunc oldlogger = g_log_set_default_handler ((GLogFunc)test_null_handler,
 						    &check);
     g_test_log_set_fatal_handler ((GTestLogFatalFunc)test_checked_handler, &check);
@@ -1505,6 +1541,7 @@
     test_signal_assert_hits (sig1, 1);
     test_signal_assert_hits (sig2, 1);
     g_assert (qof_instance_is_dirty (QOF_INSTANCE (split)));
+    g_assert_cmpint (check.hits, ==, 1);
 
     test_signal_free (sig1);
     test_signal_free (sig2);
@@ -1524,7 +1561,7 @@
     const guint PRICE_SIGFIGS = 6;
     char *logdomain = "gnc.engine";
     guint loglevel = G_LOG_LEVEL_CRITICAL | G_LOG_FLAG_FATAL;
-    TestErrorStruct check = { loglevel, logdomain, NULL };
+    TestErrorStruct check = { loglevel, logdomain, NULL, 0 };
     guint hdlr = g_log_set_handler (logdomain, loglevel,
 				    (GLogFunc)test_checked_handler, &check);
     GLogFunc oldhandler = g_log_set_default_handler ((GLogFunc)test_null_handler, &check);
@@ -1541,16 +1578,19 @@
 
     result = xaccSplitGetSharePrice (split);
     g_assert (gnc_numeric_equal (result, expected));
+    g_assert_cmpint (check.hits, ==, 0);
 
     expected = gnc_numeric_create (0, 1);
     split->amount = gnc_numeric_zero ();
     result = xaccSplitGetSharePrice (split);
     g_assert (gnc_numeric_equal (result, expected));
+    g_assert_cmpint (check.hits, ==, 0);
 
     split->value = gnc_numeric_zero ();
     expected = gnc_numeric_create (1, 1);
     result = xaccSplitGetSharePrice (split);
     g_assert (gnc_numeric_equal (result, expected));
+    g_assert_cmpint (check.hits, ==, 0);
 
 /* Now invent some value/ammount pairs which cause numeric errors to test the limits */
     split->amount = gnc_numeric_create (987654321, 10);
@@ -1570,6 +1610,7 @@
     expected = gnc_numeric_create (0, 1);
     result = xaccSplitGetSharePrice (split);
     g_assert (gnc_numeric_equal (result, expected));
+    g_assert_cmpint (check.hits, ==, 2);
     g_free (check.msg);
 
     split->amount = gnc_numeric_create (987654321, 10);
@@ -1589,6 +1630,7 @@
     expected = gnc_numeric_create (0, 1);
     result = xaccSplitGetSharePrice (split);
     g_assert (gnc_numeric_equal (result, expected));
+    g_assert_cmpint (check.hits, ==, 4);
     g_free (check.msg);
 
     split->amount = gnc_numeric_create (9, 0);
@@ -1608,6 +1650,7 @@
     expected = gnc_numeric_create (0, 1);
     result = xaccSplitGetSharePrice (split);
     g_assert (gnc_numeric_equal (result, expected));
+    g_assert_cmpint (check.hits, ==, 6);
     g_free (check.msg);
 
     g_log_remove_handler (logdomain, hdlr);

Modified: gnucash/trunk/src/test-core/unittest-support.c
===================================================================
--- gnucash/trunk/src/test-core/unittest-support.c	2012-04-03 21:35:38 UTC (rev 22134)
+++ gnucash/trunk/src/test-core/unittest-support.c	2012-04-03 21:35:47 UTC (rev 22135)
@@ -39,6 +39,7 @@
                    const gchar *msg, gpointer user_data )
 {
     //Silent, remember?
+
     return FALSE;
 }
 
@@ -96,7 +97,10 @@
         if (!g_strcmp0 (log_domain, error->log_domain)
                 && ((log_level | fatal) == (error->log_level | fatal))
                 && !g_strcmp0 (msg, error->msg))
+	{
+	    ++(error->hits);
             return FALSE;
+	}
         list = g_list_next (list);
     }
     /* No list or no matches, fall through */
@@ -122,6 +126,7 @@
         g_assert (log_level ^ G_LOG_FLAG_FATAL);
         return FALSE;
     }
+    ++(tdata->hits);
     return FALSE;
 
 }

Modified: gnucash/trunk/src/test-core/unittest-support.h
===================================================================
--- gnucash/trunk/src/test-core/unittest-support.h	2012-04-03 21:35:38 UTC (rev 22134)
+++ gnucash/trunk/src/test-core/unittest-support.h	2012-04-03 21:35:47 UTC (rev 22135)
@@ -74,6 +74,7 @@
     GLogLevelFlags log_level;
     gchar *log_domain;
     gchar *msg;
+    guint hits;
 } TestErrorStruct;
 
 /**



More information about the gnucash-changes mailing list