Commit 71686ddca660a3544c5aa6d4a34d1d06c031f4f9

Edward Thomson 2015-06-08T11:55:04

clar: support hierarchical test resource data Support hierarchical test resource data, such that you can have `tests/resources/foo/bar` and move the `bar` directory in as a fixture. Calling `cl_fixture_sandbox` on a path that is not directly beneath the test resources directory succeeds, placing that directory into the test fixture. (For example, `cl_fixture_sandbox("foo/bar")` will sandbox the `foo/bar` directory as `bar`). Add support for cleaning up directories created this way, by only cleaning up the basename (in this example, `bar`) from the fixture directory.

diff --git a/tests/clar/fixtures.h b/tests/clar/fixtures.h
index 264cd7f..f7b8d96 100644
--- a/tests/clar/fixtures.h
+++ b/tests/clar/fixtures.h
@@ -20,6 +20,19 @@ fixture_path(const char *base, const char *fixture_name)
 	return _path;
 }
 
+static const char *
+fixture_basename(const char *fixture_name)
+{
+	const char *p;
+
+	for (p = fixture_name; *p; p++) {
+		if (p[0] == '/' && p[1] && p[1] != '/')
+			fixture_name = p+1;
+	}
+
+	return fixture_name;
+}
+
 #ifdef CLAR_FIXTURE_PATH
 const char *cl_fixture(const char *fixture_name)
 {
@@ -33,6 +46,6 @@ void cl_fixture_sandbox(const char *fixture_name)
 
 void cl_fixture_cleanup(const char *fixture_name)
 {
-	fs_rm(fixture_path(_clar_path, fixture_name));
+	fs_rm(fixture_path(_clar_path, fixture_basename(fixture_name)));
 }
 #endif