On Mon, Jan 12, 2026 at 4:29 PM John Ralls <[email protected]> wrote:
>
>
>
> > On Jan 12, 2026, at 11:49 AM, Stefan Koch <[email protected]> 
> > wrote:
> >
> > [OLDER STUFF DELETED]
> >
> > The test still passes, but the output is messed up.   Is there a way
> > to setup the expectation for this assertion failure, and thus hide the
> > output?  Or should I not worry about this?
>
> There is, but it’s part of Glib’s testing apparatus. The infrastructure for 
> it is in 
> https://github.com/Gnucash/gnucash/blob/stable/common/test-core/unittest-support.c
>  and you can see an example of its use in 
> https://github.com/Gnucash/gnucash/blob/1d9b80f7ff4f53c2e8cdaa79d2be3fe5e0625c95/libgnucash/engine/test/utest-Account.cpp#L470.
>  We set up some logging variables in the first 4 lines, then change the log 
> handlers in lined 482 and 483. The checked handlers count the number of times 
> a particular error is emitted and that’s tested in lines 485 and 487. The 
> default logger is restored in line 489 but the fatal handler isn’t, and 
> there’s one more check at line 492.
>
> I’ve never tried using it in a Googletest test suite, but I can’t think of 
> any reason it wouldn’t work. You’d just change the assert macro from 
> g_assert_cmpint to EXPECT_EQ.
>
> Regards,
> John Ralls
>
>

I looked at that example, I think it looks like it is doing more than
it really does.  The "test_null_handler" function does not do
anything, so setting up the "check = test_error_struct_new".  (Maybe
there are other parts where it matters.  This is what I ended up with.
It seems to work great.

// The indicator for how many times test_count_handler has been called.
static int handler_count = 0;

// This is the error handler that does nothing but count how many times it is
// called.  The handler_count is incremented every time.
static gboolean
test_count_handler (const char *log_domain, GLogLevelFlags log_level,
    const gchar *msg, gpointer user_data )
{
    handler_count++;
    return FALSE;
}

TEST(QofIDTest, collection_add)
{
    auto col = qof_collection_new(QOF_ID_BOOK);
    auto book = qof_book_new();
    auto job = gncJobCreate(book);
    gncJobBeginEdit(job);

    EXPECT_FALSE(qof_collection_add_entity(NULL, NULL));
    EXPECT_FALSE(qof_collection_add_entity(col, NULL));
    EXPECT_FALSE(qof_collection_add_entity(NULL, QOF_INSTANCE(book)));

    EXPECT_TRUE(qof_collection_add_entity(col, QOF_INSTANCE(book)));
    EXPECT_FALSE(qof_collection_add_entity(col, QOF_INSTANCE(book)));
    handler_count = 0;
    auto oldlogger =
g_log_set_default_handler((GLogFunc)test_null_handler, NULL);
    EXPECT_FALSE(qof_collection_add_entity(col, QOF_INSTANCE(job)));
    EXPECT_EQ(handler_count, 1);
    g_log_set_default_handler(oldlogger, NULL);

    gncJobDestroy(job);
    qof_collection_destroy(col);
}
_______________________________________________
gnucash-devel mailing list
[email protected]
https://lists.gnucash.org/mailman/listinfo/gnucash-devel

Reply via email to