> On Jan 12, 2026, at 11:49 AM, Stefan Koch <[email protected]> wrote: > > In an effort to learn the gnucash code, I am looking at adding more > coverage in the test framework. > > I am working on full coverage of the libgnucash/engine/qofid.c file. > (It did not have full coverage, and looked like it depended on the > least other stuffl. I think the gtest is one that y'all consider > appropriate for new tests.) > > I get extra output when testing the error handling. In particular, in > the this test.... > > 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))); > EXPECT_FALSE(qof_collection_add_entity(col, QOF_INSTANCE(job))); > > gncJobDestroy(job); > qof_collection_destroy(col); > } > > I get extra output for the check jince I cannot add a job to a > collection of books. When running I get: > > 53: Test command: /home/sk/gnucash/build-debug/bin/test-qofid > 53: Working Directory: /home/sk/gnucash/build-debug/libgnucash/engine/test > 53: Environment variables: > 53: GNC_UNINSTALLED=YES > 53: GNC_BUILDDIR=/home/sk/gnucash/build-debug > 53: Test timeout computed to be: 10000000 > 53: Running main() from /usr/src/googletest/googletest/src/gtest_main.cc > 53: [==========] Running 2 tests from 1 test suite. > 53: [----------] Global test environment set-up. > 53: [----------] 2 tests from QofIDTest > 53: [ RUN ] QofIDTest.collection_new > 53: [ OK ] QofIDTest.collection_new (0 ms) > 53: [ RUN ] QofIDTest.collection_add > 53: > 53: (process:179319): gnc.engine-CRITICAL **: 14:35:03.788: gboolean > qof_collection_add_entity(QofCollection*, QofInstance*): assertion > 'coll->e_type == ent->e_type' failed > 53: [ OK ] QofIDTest.collection_add (0 ms) > 53: [----------] 2 tests from QofIDTest (0 ms total) > 53: > 53: [----------] Global test environment tear-down > 53: [==========] 2 tests from 1 test suite ran. (0 ms total) > 53: [ PASSED ] 2 tests. > 1/1 Test #53: test-qofid ....................... Passed 0.02 sec > > This is due to the "g_return_val_if_fail (coll->e_type == ent->e_type, > FALSE);" inside the qof_collection_add_entity function. > > 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 _______________________________________________ gnucash-devel mailing list [email protected] https://lists.gnucash.org/mailman/listinfo/gnucash-devel
