+TODO
+====
+
+The following are considered bugs in Check. If you have a fix, please
+send it to <check-devel@lists.sourceforge.net>. Bug fixing is
+considered more important than feature requests at this point. Also
+please check the Sourceforge trackers.
+
+Documentation
+=============
+
+[0.9.4] * Convert to info format and update.
+[ ] * Fix building of documentation that relies on diff
+[ ] * Add html generation of Texinfo docs.
+[0.9.4] * Create initial and final versions of money example.
+[0.9.4] * Update tutorial so that it works with modern tools.
+[ ] * Clarify looping tests and give example of usage.
+
+Interface
+=========
+
+[ ] * Change check not to clobber things in the global namespace.
+ Prepend CHECK_ to all constants, check_ to all exported symbols,
+ and _check to all internal functions. Currently fail() is
+ causing a problem. Deprecate the old API in a nice way.
+
Build issues:
--------------
+=============
-convert check to use libtool
-figure out if we need stamp-h.in or not
-use AC_CONFIG_MACRO_DIR([m4]) and create an m4/ dir for check.m4
- aclocaldir = $(datadir)/aclocal
- aclocal_DATA = mymacro.m4 myothermacro.m4
+[0.9.4] * Convert Check to use Libtool
+[ ] * Figure out if we need stamp-h.in or not
+[ ] * use AC_CONFIG_MACRO_DIR([m4]) and create an m4/ dir for check.m4
+ aclocaldir = $(datadir)/aclocal
+ aclocal_DATA = mymacro.m4 myothermacro.m4
+ ACLOCAL_AMFLAGS = -I m4 # put in top-level Makefile.am
+[ ] * Fix overriding CFLAGS in configure.ac
+[ ] * Use AC_DEFINE to define version number stuff?
+[ ] * Change MICRO to ALPHA? probably not
+[ ] * Add std-options to AM_INIT_AUTOMAKE
+[ ] * Investigate subdir-objects option to AM_INIT_AUTOMAKE
+[ ] * Use filename-length-max=99 in AM_INIT_AUTOMAKE
+[0.9.4] * Make sure libcheck.(l)a works as a dependency, don't call $(MAKE)
+[0.9.4] * Build tests/ dirs after everything else
+[ ] * Fix AM_PATH_CHECK totally; use pkg-config
+[ ] * make Check pass its own unit tests: make distcheck fails
+[ ] * use stricter CFLAGS for compiling Check
+[ ] * deprecate the old API: Check clobbers things, e.g. fail() in C++
- ACLOCAL_AMFLAGS = -I m4 # put in top-level Makefile.am
+Check source code:
+============
-fix overriding CFLAGS in configure.ac
-use AC_DEFINE to define version number stuff?
-change MICRO to ALPHA?
-add std-options to AM_INIT_AUTOMAKE
-investigate subdir-objects option to AM_INIT_AUTOMAKE
-use filename-length-max=99 in AM_INIT_AUTOMAKE
+[ ] * Eliminate abbreviations like nf for number_failed
+[ ] * Run indent on everything, make sure it works well.
+[ ] * Fix START_TEST/END_TEST to look like valid C code.
+[ ] * Document things way more.
+[ ] * Create check.h automatically using makeheaders.c (not sure)
+[ ] * Eliminate check_ prefix from files in src/ ... not needed
-just make sure libcheck.a works as a dependency, don't call $(MAKE)
+Internal Check tests
+======================
-Using
+[0.9.3] * Use gcov to test and expand coverage of existing unit tests
+[ ] * Increase tests for more non-public modules
+[0.8.0] * Refactor to allow better unit testing of printing functionality.
+[ ] * Document things way more.
+[ ] * Clarify what all the different tests mean, whether they are
+ meant to fail or not --- setting all CK_SILENT to CK_VERBOSE
+ makes it seem like there are lots of errors being produced!
- SUBDIRS = lib src . test
+Packaging
+=========
-will cause lib/ to be built before src/, then the current directory
-will be built, finally the test/ directory will be built. It is
-customary to arrange test directories to be built after everything
-else since they are meant to test what has been constructed.
+[0.7.2] * Automate RPM production
+[0.7.2] * Debian packaging
+[0.9.2] * Get Check into Debian Sid
+[0.9.4] * Eliminate .deb and .rpm packaging for vendors --- not necessary
-Documentation
--------------
-* Convert to info format.
-* Create initial and final versions of money example.
-Interface
----------
-* Change check not to clobber things in the global namespace.
- Prepend CHECK_ to all constants, check_ to all exported symbols,
- and _check to all internal functions. Currently fail() is
- causing a problem.
+
+The following enhancements are being considered for Check. Please
+send an email to <check-devel@lists.sourceforge.net> if you would like
+to assist in any of these, or if you would like to suggest additional
+enhancements. Also please check the various trackers at the Check
+project website.
+
+Printing and Logging
+====================
+
+[ ] * Allow unit test output (stdout and stderr) to be captured and logged
+[0.9.1] * Add XML as option for test output
+[ ] * Open the API for printing/logging customization
+[ ] * JUnit-style UI?
+
+Unit test writing
+=================
+
+[0.8.0] * Allow fail and friends to be used within fixture
+ setup/teardown functions
+[0.8.0] * Allow forkless running of suites, to allow debugging
+[0.9.2] * Allow unit tests that expect signals
+[ ] * Allow unit tests to write to the log
+[ ] * Allow unit tests that expect output (see stdout logging above) (but
+ maybe perl/sh/expect/dejagnu are better tools)
+[ ] * Autoproduce unit test framework from header files
+
+Check Internals
+===============
+
+[0.8.0] * Implement message passing between unit test and test
+ programs using pipes, rather than SysV IPC, to allow support
+ under cygwin.
+[ ] * Abstract the forking and message passing implementation to
+ allow Win32 compatibility.
tcase_add_unchecked_fixture(tc, fixture_sub_setup, NULL);
suite_add_tcase (fixture_s, tc);
fixture_sr = srunner_create(fixture_s);
- srunner_run_all(fixture_sr,CK_SILENT);
+ srunner_run_all(fixture_sr,CK_VERBOSE);
}
void teardown_fixture (void)
tcase_add_test(tc,test_sub_ch_setup_norm);
tcase_add_test(tc,test_sub_ch_setup_norm);
tcase_add_checked_fixture(tc,sub_ch_setup_norm,sub_ch_teardown_norm);
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
fail_unless(srunner_ntests_failed(sr) == 0,
"Checked setup not being run correctly");
tcase_add_test(tc,test_sub_fail);
tcase_add_checked_fixture(tc,setup_sub_fail, NULL);
sr = srunner_create(s);
- srunner_run_all(sr,CK_SILENT);
+ srunner_run_all(sr,CK_VERBOSE);
fail_unless (srunner_ntests_run(sr) == 0,
"Test run counts not correct for checked setup failure");
tcase_add_checked_fixture(tc, setup_sub_fail, NULL);
sr = srunner_create(s);
srunner_set_fork_status(sr, CK_NOFORK);
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
fail_unless (srunner_ntests_run(sr) == 0,
"Test run counts not correct for checked setup failure");
tcase_add_checked_fixture(tc, setup_sub_fail, NULL);
sr = srunner_create(s);
srunner_set_fork_status(sr, CK_NOFORK);
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
fail_unless (srunner_ntests_run(sr) == 0,
"Test run counts not correct for checked setup failure");
srunner_set_fork_status(sr, CK_NOFORK);
testval_up = 1;
testval_down = 1;
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
fail_unless(testval_up == 7, "Multiple setups failed");
fail_unless(testval_down == 7, "Multiple teardowns failed");
tcase_add_test(tc,test_sub_fail);
tcase_add_checked_fixture(tc,setup_sub_signal, NULL);
sr = srunner_create(s);
- srunner_run_all(sr,CK_SILENT);
+ srunner_run_all(sr,CK_VERBOSE);
fail_unless (srunner_ntests_failed(sr) == 1,
"Failure counts not correct for checked setup signal");
tcase_add_checked_fixture(tc,sub_ch_setup_dual_1,NULL);
tcase_add_checked_fixture(tc,sub_ch_setup_dual_2,NULL);
testval_up = 1;
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
fail_unless(srunner_ntests_failed(sr) == 0,
"Problem with several setups");
tcase_add_test(tc,test_sub_pass);
tcase_add_checked_fixture(tc,NULL, teardown_sub_fail);
sr = srunner_create(s);
- srunner_run_all(sr,CK_SILENT);
+ srunner_run_all(sr,CK_VERBOSE);
fail_unless (srunner_ntests_failed(sr) == 1,
"Failure counts not correct for checked teardown failure");
tcase_add_test(tc,test_sub_pass);
tcase_add_checked_fixture(tc,NULL, teardown_sub_signal);
sr = srunner_create(s);
- srunner_run_all(sr,CK_SILENT);
+ srunner_run_all(sr,CK_VERBOSE);
fail_unless (srunner_ntests_failed(sr) == 1,
"Failure counts not correct for checked teardown signal");
tcase_add_checked_fixture(tc,NULL,sub_ch_teardown_dual_1);
tcase_add_checked_fixture(tc,NULL,sub_ch_teardown_dual_2);
testval_down = 1;
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
nr_of_failures = srunner_ntests_failed(sr);
if (nr_of_failures > 0) {
fork_sr = srunner_create(make_fork_sub_suite());
fork_dummy_sr = srunner_create (make_fork_sub_suite());
srunner_set_fork_status(fork_sr,CK_NOFORK);
- srunner_run_all(fork_sr,CK_SILENT);
+ srunner_run_all(fork_sr,CK_VERBOSE);
}
void fork_teardown (void)
{
Suite *s = suite_create("Empty");
sr = srunner_create(s);
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
}
static void limit_teardown (void)
setup();
printf ("Ran %d tests in subordinate suite\n", sub_ntests);
- srunner_run_all (sr, CK_NORMAL);
+ srunner_run_all (sr, CK_VERBOSE);
cleanup();
fork_teardown();
teardown_fixture();
Suite *s = make_sub_suite();
SRunner *sr = srunner_create(s);
srunner_add_suite(sr, make_sub2_suite());
- srunner_run_all(sr, CK_SILENT);
+ srunner_run_all(sr, CK_VERBOSE);
tr_fail_array = srunner_failures(sr);
tr_all_array = srunner_results(sr);
sub_nfailed = srunner_ntests_failed(sr);