aboutsummaryrefslogtreecommitdiffstats
path: root/camel
diff options
context:
space:
mode:
Diffstat (limited to 'camel')
-rw-r--r--camel/ChangeLog7
-rw-r--r--camel/tests/README38
-rw-r--r--camel/tests/lib/camel-test.c20
-rw-r--r--camel/tests/lib/camel-test.h24
4 files changed, 77 insertions, 12 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 6e8fb27fd8..b4b3ca8015 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,5 +1,12 @@
2000-11-24 Not Zed <NotZed@HelixCode.com>
+ * tests/README: Added at least some explanation of all this stuff.
+
+ * tests/lib/camel-test.h (check_msg): Added a non-gcc version of
+ the fail command, we dont get the expression that failed, but no
+ matter. Should be (more) portable now.
+ (check, check_msg): Put the file/lineno in the default message.
+
* Makefile.am (SUBDIRS): Add tests.
* camel-mime-filter-basic.c (filter): Well, I'll add the extra
diff --git a/camel/tests/README b/camel/tests/README
new file mode 100644
index 0000000000..e9262541b4
--- /dev/null
+++ b/camel/tests/README
@@ -0,0 +1,38 @@
+
+This directory is to contain regression tests that should be run
+before committing anything to camel.
+
+To write a new test: copy an existing one and replace the contents.
+
+See camel-test.h for a number of functions and macros which setup and
+define the test environmet, and help provide meaningful messages when
+something actually fails.
+
+All tests have the following options:
+ -v[vvvv]
+ verbose. more v's more verbose. 2 v's will give you
+ a simple test backtrace of any partially failed tests.
+ No v's give you a simple backtrace of any failed tests.
+ -q
+ quiet. Dont print anything, unless there is a SEGV.
+
+See the other files in lib/* for utility functions that help to
+write the tests (object comparison, creation, etc functions).
+
+Tests may fail and be non-fatal. In this case, you will see "Partial
+success" on the result of each test line. To get more information
+about the test, run the test manually with a -v command line argument.
+The more v's you have the more detail you get (upto about -vvvvv),
+generally use -vv to find out which parts of a partially successful
+test failed, and where.
+
+Note that if writing tests, non-fatal tests (bracketed by a
+camel_test_nonfatal() and camel_test_fatal() pair) should only be
+defined where: 1. The test in question should ideally pass, and 2. The
+code has known limitations currently that stop it passing, but
+otherwise works for nominal input.
+
+To debug tests, set a breakpoint on camel_test_fail, which will be
+called for any failure, even a non-fatal one.
+
+ Michael <notzed@helixcode.com>
diff --git a/camel/tests/lib/camel-test.c b/camel/tests/lib/camel-test.c
index b60ba1fb34..a913ad78a4 100644
--- a/camel/tests/lib/camel-test.c
+++ b/camel/tests/lib/camel-test.c
@@ -18,7 +18,7 @@ int camel_test_verbose;
static void die(int sig)
{
- static indie = 0;
+ static int indie = 0;
struct _stack *node;
if (!indie) {
@@ -118,17 +118,23 @@ void camel_test_pull(void)
void camel_test_fail(const char *why, ...)
{
- struct _stack *node;
va_list ap;
- char *text;
va_start(ap, why);
- text = g_strdup_vprintf(why, ap);
+ camel_test_failv(why, ap);
va_end(ap);
+}
+
+void camel_test_failv(const char *why, va_list ap)
+{
+ struct _stack *node;
+ char *text;
+
+ text = g_strdup_vprintf(why, ap);
if ((nonfatal == NULL && camel_test_verbose > 0)
|| (nonfatal && camel_test_verbose > 1)) {
- printf("Failed: %s\n", text);
+ printf("Failed.\n%s\n", text);
}
g_free(text);
@@ -174,8 +180,7 @@ void camel_test_nonfatal(const char *why, ...)
nonfatal = node;
}
-/* dont ask me why but the compiler just can't seem to find the prototypes for this */
-void camel_test_fatal()
+void camel_test_fatal(void)
{
struct _stack *node;
@@ -209,7 +214,6 @@ void camel_test_end(void)
int string_equal(const char *a, const char *b)
{
const char *ap, *bp;
- int cmp;
ap = a;
bp = b;
diff --git a/camel/tests/lib/camel-test.h b/camel/tests/lib/camel-test.h
index 8d3c94bd00..6ff8281aeb 100644
--- a/camel/tests/lib/camel-test.h
+++ b/camel/tests/lib/camel-test.h
@@ -6,9 +6,25 @@
#include <stdlib.h>
#include <glib.h>
+void camel_test_failv(const char *why, va_list ap);
+
/* perform a check assertion */
-#define check(x) do {if (!(x)) { camel_test_fail("%s", #x); } } while (0)
-#define check_msg(x, y, z...) do {if (!(x)) { camel_test_fail("%s\n\t" #y, #x, ##z); } } while (0)
+#define check(x) do {if (!(x)) { camel_test_fail("%s (%d): %s", __FILE__, __LINE__, #x); } } while (0)
+/* check with message */
+#ifdef __GNUC__
+#define check_msg(x, y, z...) do {if (!(x)) { camel_test_fail("%s (%d): %s\n\t" #y, __FILE__, __LINE__, #x, ##z); } } while (0)
+#else
+static void check_msg(int truth, char *fmt, ...)
+{
+ /* no gcc, we lose the condition that failed, nm */
+ if (!truth) {
+ va_list ap;
+ va_start(ap, fmt);
+ camel_test_failv(fmt, ap);
+ va_end(ap);
+ }
+}
+#endif
#define check_count(object, expected) do { \
if (CAMEL_OBJECT(object)->ref_count != expected) { \
@@ -41,11 +57,11 @@ void camel_test_pull(void);
/* fail a test, with a reason why */
void camel_test_fail(const char *why, ...);
+void camel_test_failv(const char *why, va_list ap);
/* Set whether a failed test quits. May be nested, but must be called in nonfatal/fatal pairs */
void camel_test_nonfatal(const char *why, ...);
-void camel_test_fatal();
-
+void camel_test_fatal(void);
/* utility functions */
/* compare strings, ignore whitespace though */