Teach ccanlint about API tests.
authorRusty Russell <rusty@rustcorp.com.au>
Sat, 14 Feb 2009 03:02:43 +0000 (13:32 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Sat, 14 Feb 2009 03:02:43 +0000 (13:32 +1030)
tools/ccanlint/ccanlint.h
tools/ccanlint/file_analysis.c
tools/ccanlint/has_tests.c

index d536d6bfefae290d5bf1f425b8c07ac23c50a6f0..ac169fa81156b57452708208af65fecd05402fdf 100644 (file)
@@ -12,6 +12,7 @@ struct manifest {
        struct list_head h_files;
 
        struct list_head run_tests;
+       struct list_head api_tests;
        struct list_head compile_ok_tests;
        struct list_head compile_fail_tests;
        struct list_head other_test_files;
index 663748e5f5ff983481d1681b13c622eb3b8d42dd..9513ab67d7c0b6fe821362218cf0666520f9cf30 100644 (file)
@@ -85,7 +85,9 @@ static void add_files(struct manifest *m, const char *dir)
                                dest = &m->h_files;
                } else if (strstarts(f->name, "test/")) {
                        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;
                                else if (strstarts(f->name, "test/compile_ok"))
                                        dest = &m->compile_ok_tests;
@@ -135,6 +137,7 @@ struct manifest *get_manifest(void)
        m->info_file = NULL;
        list_head_init(&m->c_files);
        list_head_init(&m->h_files);
+       list_head_init(&m->api_tests);
        list_head_init(&m->run_tests);
        list_head_init(&m->compile_ok_tests);
        list_head_init(&m->compile_fail_tests);
index aac1c20dadefcb0bac098716c0bdcc2cee2b46c9..44ef64abc95cce5719a4010825ba397f50250042 100644 (file)
@@ -25,7 +25,9 @@ static void *check_has_tests(struct manifest *m)
        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
@@ -38,7 +40,7 @@ static const char *describe_has_tests(struct manifest *m, void *check_result)
 {
        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"
@@ -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"
        "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"
+       "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"
        "above: you should directly #include those C files you want.  This\n"
        "allows access to static functions and use special effects inside\n"