test: move mkdir & mkdtemp calls to common place and fix them on MSVC
authorRan Benita <ran@unusedvar.com>
Sat, 24 Sep 2022 07:27:51 +0000 (10:27 +0300)
committerRan Benita <ran@unusedvar.com>
Sat, 24 Sep 2022 09:31:53 +0000 (12:31 +0300)
Signed-off-by: Ran Benita <ran@unusedvar.com>
meson.build
test/common.c
test/context.c
test/registry.c
test/test.h

index 5b33b017e4d4d6658fe0e6dfde6a32e2adc8ba81..26fca41518ee74b795454b639e04d8e3e64432e8 100644 (file)
@@ -685,7 +685,7 @@ if get_option('enable-xkbregistry')
         'registry',
         executable('test-registry', 'test/registry.c',
                    include_directories: include_directories('src'),
-                   dependencies: dep_libxkbregistry),
+                   dependencies: [dep_libxkbregistry, test_dep]),
         env: test_env,
     )
 endif
index c6f66447829f09a41b318a6e206c7125233a65d5..1d5a99d6125345d508cf7ebe24d0e02b1670d7a9 100644 (file)
@@ -34,6 +34,7 @@
 
 #include <limits.h>
 #include <fcntl.h>
+#include <stdio.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #ifdef _MSC_VER
@@ -162,6 +163,52 @@ test_key_seq(struct xkb_keymap *keymap, ...)
     return ret;
 }
 
+char *
+test_makedir(const char *parent, const char *path)
+{
+    char *dirname;
+    int err;
+
+    dirname = asprintf_safe("%s/%s", parent, path);
+    assert(dirname);
+#ifdef _MSC_VER
+    err = _mkdir(dirname);
+#else
+    err = mkdir(dirname, 0777);
+#endif
+    assert(err == 0);
+
+    return dirname;
+}
+
+char *
+test_maketempdir(const char *template)
+{
+#ifdef _MSC_VER
+    const char *basetmp = getenv("TMP");
+    if (basetmp == NULL) {
+        basetmp = getenv("TEMP");
+    }
+    if (basetmp == NULL) {
+        basetmp = getenv("top_builddir");
+    }
+    assert(basetmp != NULL);
+    char *tmpdir = asprintf_safe("%s/%s", basetmp, template);
+    assert(tmpdir != NULL);
+    char *tmp = _mktemp(tmpdir);
+    assert(tmp == tmpdir);
+    int ret = _mkdir(tmp);
+    assert(ret == 0);
+    return tmpdir;
+#else
+    char *tmpdir = asprintf_safe("/tmp/%s", template);
+    assert(tmpdir != NULL);
+    char *tmp = mkdtemp(tmpdir);
+    assert(tmp == tmpdir);
+    return tmpdir;
+#endif
+}
+
 char *
 test_get_path(const char *path_rel)
 {
index 9f6cad7321ec21bdb9247f2bc9e98a582c54cd9a..bb619b001b15aab04a3ad6e0f8f316737fcac762 100644 (file)
@@ -73,29 +73,15 @@ static void restore_env(void)
 
 static const char *makedir(const char *parent, const char *path)
 {
-    char *dirname;
-    int err;
-
-    dirname = asprintf_safe("%s/%s", parent, path);
-    assert(dirname);
-    err = mkdir(dirname, 0777);
-    assert(err == 0);
-
+    char *dirname = test_makedir(parent, path);
     dirnames[ndirs++] = dirname;
-
     return dirname;
 }
 
 static const char *maketmpdir(void)
 {
-    const char *template = "/tmp/xkbcommon-test.XXXXXX";
-    char *tmpdir = strdup(template);
-
-    tmpdir = mkdtemp(tmpdir);
-    assert(tmpdir != NULL);
-
+    char *tmpdir = test_maketempdir("xkbcommon-test.XXXXXX");
     dirnames[ndirs++] = tmpdir;
-
     return tmpdir;
 }
 
index 71a480fa66523dbfb98593df8aa919ea121c3e06..141281857be0bb614c6c4dff6899a80fec0f3d89 100644 (file)
@@ -35,6 +35,7 @@
 #include "xkbcommon/xkbregistry.h"
 
 #include "utils.h"
+#include "test.h"
 
 #define NO_VARIANT NULL
 
@@ -132,14 +133,13 @@ test_create_rules(const char *ruleset,
     int rc;
     FILE *fp;
 
-    tmpdir = asprintf_safe("/tmp/%s.%d.XXXXXX", ruleset, iteration++);
-    assert(tmpdir);
-    assert(mkdtemp(tmpdir) == tmpdir);
+    char *template = asprintf_safe("%s.%d.XXXXXX", ruleset, iteration++);
+    assert(template != NULL);
+    tmpdir = test_maketempdir(template);
+    free(template);
+
+    free(test_makedir(tmpdir, "rules"));
 
-    rc = snprintf_safe(buf, sizeof(buf), "%s/rules", tmpdir);
-    assert(rc);
-    rc = mkdir(buf, 0777);
-    assert(rc == 0);
     rc = snprintf_safe(buf, sizeof(buf), "%s/rules/%s.xml", tmpdir, ruleset);
     assert(rc);
 
index 81ba49b3abccf586e9766662fedfaf2abfa5ac3e..ba06debe84fd884a0825e60121166ad8d0a39d57 100644 (file)
@@ -53,6 +53,12 @@ test_key_seq(struct xkb_keymap *keymap, ...);
 int
 test_key_seq_va(struct xkb_keymap *keymap, va_list args);
 
+char *
+test_makedir(const char *parent, const char *path);
+
+char *
+test_maketempdir(const char *template);
+
 char *
 test_get_path(const char *path_rel);