summaryrefslogtreecommitdiffstats
path: root/tests/clar
diff options
context:
space:
mode:
Diffstat (limited to 'tests/clar')
-rw-r--r--tests/clar/clar.c5
-rw-r--r--tests/clar/clar/fixtures.h2
-rw-r--r--tests/clar/clar/fs.h2
-rw-r--r--tests/clar/clar/sandbox.h45
-rw-r--r--tests/clar/clar_libgit2.h17
5 files changed, 57 insertions, 14 deletions
diff --git a/tests/clar/clar.c b/tests/clar/clar.c
index c9c3fde..9695dc9 100644
--- a/tests/clar/clar.c
+++ b/tests/clar/clar.c
@@ -41,9 +41,6 @@
# ifndef strdup
# define strdup(str) _strdup(str)
# endif
-# ifndef strcasecmp
-# define strcasecmp(a,b) _stricmp(a,b)
-# endif
# ifndef __MINGW32__
# pragma comment(lib, "shell32")
@@ -94,8 +91,10 @@
static void fs_rm(const char *_source);
static void fs_copy(const char *_source, const char *dest);
+#ifdef CLAR_FIXTURE_PATH
static const char *
fixture_path(const char *base, const char *fixture_name);
+#endif
struct clar_error {
const char *file;
diff --git a/tests/clar/clar/fixtures.h b/tests/clar/clar/fixtures.h
index 77033d3..6ec6423 100644
--- a/tests/clar/clar/fixtures.h
+++ b/tests/clar/clar/fixtures.h
@@ -1,3 +1,4 @@
+#ifdef CLAR_FIXTURE_PATH
static const char *
fixture_path(const char *base, const char *fixture_name)
{
@@ -20,7 +21,6 @@ fixture_path(const char *base, const char *fixture_name)
return _path;
}
-#ifdef CLAR_FIXTURE_PATH
const char *cl_fixture(const char *fixture_name)
{
return fixture_path(CLAR_FIXTURE_PATH, fixture_name);
diff --git a/tests/clar/clar/fs.h b/tests/clar/clar/fs.h
index 44ede45..a6eda5e 100644
--- a/tests/clar/clar/fs.h
+++ b/tests/clar/clar/fs.h
@@ -295,7 +295,9 @@ fs_copy(const char *_source, const char *_dest)
void
cl_fs_cleanup(void)
{
+#ifdef CLAR_FIXTURE_PATH
fs_rm(fixture_path(_clar_path, "*"));
+#endif
}
#else
diff --git a/tests/clar/clar/sandbox.h b/tests/clar/clar/sandbox.h
index 0ba1479..0688374 100644
--- a/tests/clar/clar/sandbox.h
+++ b/tests/clar/clar/sandbox.h
@@ -2,7 +2,8 @@
#include <sys/syslimits.h>
#endif
-static char _clar_path[4096 + 1];
+#define CLAR_PATH_MAX 4096
+static char _clar_path[CLAR_PATH_MAX];
static int
is_valid_tmp_path(const char *path)
@@ -35,10 +36,9 @@ find_tmp_path(char *buffer, size_t length)
continue;
if (is_valid_tmp_path(env)) {
-#ifdef __APPLE__
- if (length >= PATH_MAX && realpath(env, buffer) != NULL)
- return 0;
-#endif
+ if (strlen(env) + 1 > CLAR_PATH_MAX)
+ return -1;
+
strncpy(buffer, env, length - 1);
buffer[length - 1] = '\0';
return 0;
@@ -47,10 +47,6 @@ find_tmp_path(char *buffer, size_t length)
/* If the environment doesn't say anything, try to use /tmp */
if (is_valid_tmp_path("/tmp")) {
-#ifdef __APPLE__
- if (length >= PATH_MAX && realpath("/tmp", buffer) != NULL)
- return 0;
-#endif
strncpy(buffer, "/tmp", length - 1);
buffer[length - 1] = '\0';
return 0;
@@ -75,6 +71,34 @@ find_tmp_path(char *buffer, size_t length)
return -1;
}
+static int canonicalize_tmp_path(char *buffer)
+{
+#ifdef _WIN32
+ char tmp[CLAR_PATH_MAX];
+ DWORD ret;
+
+ ret = GetFullPathName(buffer, CLAR_PATH_MAX, tmp, NULL);
+
+ if (ret == 0 || ret > CLAR_PATH_MAX)
+ return -1;
+
+ ret = GetLongPathName(tmp, buffer, CLAR_PATH_MAX);
+
+ if (ret == 0 || ret > CLAR_PATH_MAX)
+ return -1;
+
+ return 0;
+#else
+ char tmp[CLAR_PATH_MAX];
+
+ if (realpath(buffer, tmp) == NULL)
+ return -1;
+
+ strcpy(buffer, tmp);
+ return 0;
+#endif
+}
+
static void clar_unsandbox(void)
{
if (_clar_path[0] == '\0')
@@ -95,7 +119,8 @@ static int build_sandbox_path(void)
size_t len;
- if (find_tmp_path(_clar_path, sizeof(_clar_path)) < 0)
+ if (find_tmp_path(_clar_path, sizeof(_clar_path)) < 0 ||
+ canonicalize_tmp_path(_clar_path) < 0)
return -1;
len = strlen(_clar_path);
diff --git a/tests/clar/clar_libgit2.h b/tests/clar/clar_libgit2.h
index c33b5d2..d8105c8 100644
--- a/tests/clar/clar_libgit2.h
+++ b/tests/clar/clar_libgit2.h
@@ -166,10 +166,27 @@ GIT_INLINE(void) clar__assert_equal_oid(
}
}
+GIT_INLINE(void) clar__assert_equal_oidstr(
+ const char *file, const char *func, int line, const char *desc,
+ const char *one_str, const git_oid *two)
+{
+ git_oid one;
+
+ if (git_oid__fromstr(&one, one_str, git_oid_type(two)) < 0) {
+ clar__fail(file, func, line, desc, "could not parse oid string", 1);
+ } else {
+ clar__assert_equal_oid(file, func, line, desc, &one, two);
+ }
+}
+
#define cl_assert_equal_oid(one, two) \
clar__assert_equal_oid(__FILE__, __func__, __LINE__, \
"OID mismatch: " #one " != " #two, (one), (two))
+#define cl_assert_equal_oidstr(one_str, two) \
+ clar__assert_equal_oidstr(__FILE__, __func__, __LINE__, \
+ "OID mismatch: " #one_str " != " #two, (one_str), (two))
+
/*
* Some utility macros for building long strings
*/