#include <stdlib.h>
#include <stdio.h>
#include <err.h>
-#include <string/string.h>
-#include <talloc/talloc.h>
-#include <noerr/noerr.h>
+#include <ccan/talloc/talloc.h>
static char test_is_not_dir[] = "test is not a directory";
if (!S_ISDIR(st.st_mode))
return test_is_not_dir;
- if (list_empty(&m->run_tests) && list_empty(&m->compile_ok_tests)) {
+ if (list_empty(&m->api_tests)
+ && list_empty(&m->run_tests)
+ && list_empty(&m->compile_ok_tests)) {
if (list_empty(&m->compile_fail_tests))
return "You have no tests in the test directory";
else
{
return talloc_asprintf(m, "%s\n\n"
"CCAN modules have a directory called test/ which contains tests.\n"
- "There are three kinds of tests: run, compile_ok and compile_fail:\n"
+ "There are four kinds of tests: api, run, compile_ok and compile_fail:\n"
"you can tell which type of test a C file is by its name, eg 'run.c'\n"
"and 'run-simple.c' are both run tests.\n\n"
+
"The simplest kind of test is a run test, which must compile with no\n"
"warnings, and then run: it is expected to use libtap to report its\n"
- "results in a simple and portable format.\n"
+ "results in a simple and portable format. It should #include the C\n"
+ "files from the module directly (so it can probe the internals): the\n"
+ "module will not be linked in.\n\n"
+
+ "api tests are just like a run test, except it is a guarantee of API\n"
+ "stability: this test should pass on all future versions of the\n"
+ "module. They *are* linked to the module, since they should only\n"
+ "test the API, not the internal state.\n\n"
+
"compile_ok tests are a subset of run tests: they must compile and\n"
- "link, but aren't run.\n"
+ "link, but aren't run.\n\n"
+
"compile_fail tests are tests which should fail to compile (or emit\n"
"warnings) or link when FAIL is defined, but should compile and link\n"
"when it's not defined: this helps ensure unrelated errors don't make\n"
"compilation fail.\n\n"
+
"Note that the tests are not linked against the files in the\n"
"above: you should directly #include those C files you want. This\n"
"allows access to static functions and use special effects inside\n"
if (!ask("Should I create a template test/run.c file for you?"))
return;
- if (mkdir("test", 0600) != 0) {
+ if (mkdir("test", 0700) != 0) {
if (errno != EEXIST)
err(1, "Creating test/ directory");
}