Browse Source

Teach ccanlint about API tests.

Rusty Russell 17 years ago
parent
commit
7eb00644b8
3 changed files with 13 additions and 4 deletions
  1. 1 0
      tools/ccanlint/ccanlint.h
  2. 4 1
      tools/ccanlint/file_analysis.c
  3. 8 3
      tools/ccanlint/has_tests.c

+ 1 - 0
tools/ccanlint/ccanlint.h

@@ -12,6 +12,7 @@ struct manifest {
 	struct list_head h_files;
 	struct list_head h_files;
 
 
 	struct list_head run_tests;
 	struct list_head run_tests;
+	struct list_head api_tests;
 	struct list_head compile_ok_tests;
 	struct list_head compile_ok_tests;
 	struct list_head compile_fail_tests;
 	struct list_head compile_fail_tests;
 	struct list_head other_test_files;
 	struct list_head other_test_files;

+ 4 - 1
tools/ccanlint/file_analysis.c

@@ -85,7 +85,9 @@ static void add_files(struct manifest *m, const char *dir)
 				dest = &m->h_files;
 				dest = &m->h_files;
 		} else if (strstarts(f->name, "test/")) {
 		} else if (strstarts(f->name, "test/")) {
 			if (is_c_src) {
 			if (is_c_src) {
-				if (strstarts(f->name, "test/run"))
+				if (strstarts(f->name, "test/api"))
+					dest = &m->api_tests;
+				else if (strstarts(f->name, "test/run"))
 					dest = &m->run_tests;
 					dest = &m->run_tests;
 				else if (strstarts(f->name, "test/compile_ok"))
 				else if (strstarts(f->name, "test/compile_ok"))
 					dest = &m->compile_ok_tests;
 					dest = &m->compile_ok_tests;
@@ -135,6 +137,7 @@ struct manifest *get_manifest(void)
 	m->info_file = NULL;
 	m->info_file = NULL;
 	list_head_init(&m->c_files);
 	list_head_init(&m->c_files);
 	list_head_init(&m->h_files);
 	list_head_init(&m->h_files);
+	list_head_init(&m->api_tests);
 	list_head_init(&m->run_tests);
 	list_head_init(&m->run_tests);
 	list_head_init(&m->compile_ok_tests);
 	list_head_init(&m->compile_ok_tests);
 	list_head_init(&m->compile_fail_tests);
 	list_head_init(&m->compile_fail_tests);

+ 8 - 3
tools/ccanlint/has_tests.c

@@ -25,7 +25,9 @@ static void *check_has_tests(struct manifest *m)
 	if (!S_ISDIR(st.st_mode))
 	if (!S_ISDIR(st.st_mode))
 		return test_is_not_dir;
 		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)) 
 		if (list_empty(&m->compile_fail_tests)) 
 			return "You have no tests in the test directory";
 			return "You have no tests in the test directory";
 		else
 		else
@@ -38,7 +40,7 @@ static const char *describe_has_tests(struct manifest *m, void *check_result)
 {
 {
 	return talloc_asprintf(m, "%s\n\n"
 	return talloc_asprintf(m, "%s\n\n"
         "CCAN modules have a directory called test/ which contains tests.\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"
 	"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"
 	"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"
 	"The simplest kind of test is a run test, which must compile with no\n"
@@ -49,7 +51,10 @@ static const char *describe_has_tests(struct manifest *m, void *check_result)
 	"compile_fail tests are tests which should fail to compile (or emit\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"
 	"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"
 	"when it's not defined: this helps ensure unrelated errors don't make\n"
-	"compilation fail.\n\n"
+	"compilation fail.\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.\n\n"
 	"Note that the tests are not linked against the files in the\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"
 	"above: you should directly #include those C files you want.  This\n"
 	"allows access to static functions and use special effects inside\n"
 	"allows access to static functions and use special effects inside\n"