summaryrefslogtreecommitdiff
path: root/common/test.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/test.c')
-rw-r--r--common/test.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/common/test.c b/common/test.c
index a006f74..c619b7d 100644
--- a/common/test.c
+++ b/common/test.c
@@ -206,6 +206,22 @@ p11_fixture (void (* setup) (void *),
test_push (&item);
}
+static int
+should_run_test (int argc,
+ char **argv,
+ test_item *item)
+{
+ int i;
+ if (argc == 0)
+ return 1;
+ for (i = 0; i < argc; i++) {
+ if (strcmp (argv[i], item->x.test.name) == 0)
+ return 1;
+ }
+
+ return 0;
+}
+
int
p11_test_run (int argc,
char **argv)
@@ -216,16 +232,28 @@ p11_test_run (int argc,
int count;
int ret = 0;
int setup;
+ int opt;
/* p11-kit specific stuff */
putenv ("P11_KIT_STRICT=1");
p11_debug_init ();
+ while ((opt = getopt (argc, argv, "")) != -1) {
+ switch (opt) {
+ default:
+ fprintf (stderr, "specify only test names on the command line\n");
+ return 2;
+ }
+ }
+
+ argc -= optind;
+ argv += optind;
+
assert (gl.number == 0);
gl.last = NULL;
for (item = gl.suite, count = 0; item != NULL; item = item->next) {
- if (item->type == TEST)
+ if (item->type == TEST && should_run_test (argc, argv, item))
count++;
}
@@ -243,6 +271,10 @@ p11_test_run (int argc,
}
assert (item->type == TEST);
+
+ if (!should_run_test (argc, argv, item))
+ continue;
+
gl.last = item;
gl.number++;
setup = 0;