summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-socket/test
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-socket/test')
-rw-r--r--mrbgems/mruby-socket/test/socket.rb2
-rw-r--r--mrbgems/mruby-socket/test/sockettest.c59
-rw-r--r--mrbgems/mruby-socket/test/unix.rb2
3 files changed, 55 insertions, 8 deletions
diff --git a/mrbgems/mruby-socket/test/socket.rb b/mrbgems/mruby-socket/test/socket.rb
index 41f5d1cbe..aa893588f 100644
--- a/mrbgems/mruby-socket/test/socket.rb
+++ b/mrbgems/mruby-socket/test/socket.rb
@@ -15,7 +15,7 @@ assert('Socket::getaddrinfo') do
assert_equal "127.0.0.1", a[3]
assert_equal Socket::AF_INET, a[4]
assert_equal Socket::SOCK_DGRAM, a[5]
- assert_equal Socket::IPPROTO_UDP, a[6]
+ assert_equal Socket::IPPROTO_UDP, a[6] unless SocketTest.cygwin?
end
assert('Socket#recvfrom') do
diff --git a/mrbgems/mruby-socket/test/sockettest.c b/mrbgems/mruby-socket/test/sockettest.c
index 835606141..086bc4892 100644
--- a/mrbgems/mruby-socket/test/sockettest.c
+++ b/mrbgems/mruby-socket/test/sockettest.c
@@ -2,18 +2,54 @@
#include <stdlib.h>
#include "mruby.h"
+#include "mruby/error.h"
+
+#if defined(_WIN32) || defined(_WIN64)
+
+#include <io.h>
+
+#ifdef _MSC_VER
+
+#include <fcntl.h>
+#include <sys/stat.h>
+#define close _close
+#define unlink _unlink
+
+static int
+mkstemp(char *p)
+{
+ int fd;
+ char* fname = _mktemp(p);
+ if (fname == NULL)
+ return -1;
+ fd = open(fname, O_RDWR | O_CREAT | O_EXCL, _S_IREAD | _S_IWRITE);
+ if (fd >= 0)
+ return fd;
+ return -1;
+}
+#endif
+
+#else
+
+#include <unistd.h>
-#ifdef _WIN32
- #define tempnam _tempnam
#endif
mrb_value
mrb_sockettest_tmppath(mrb_state *mrb, mrb_value klass)
{
- char *tmp = tempnam(NULL, "mruby-socket");
- mrb_value str = mrb_str_new_cstr(mrb, tmp);
- free(tmp);
- return str;
+ char name[] = "mruby-socket.XXXXXXXX";
+ int fd = mkstemp(name);
+ if (fd == -1) {
+ mrb_sys_fail(mrb, 0);
+ }
+ if (close(fd) == -1) {
+ mrb_sys_fail(mrb, 0);
+ }
+ if (unlink(name) == -1) {
+ mrb_sys_fail(mrb, 0);
+ }
+ return mrb_str_new_cstr(mrb, name);
}
mrb_value
@@ -26,10 +62,21 @@ mrb_sockettest_win_p(mrb_state *mrb, mrb_value klass)
#endif
}
+mrb_value
+mrb_sockettest_cygwin_p(mrb_state *mrb, mrb_value klass)
+{
+#if defined(__CYGWIN__) || defined(__CYGWIN32__)
+ return mrb_true_value();
+#else
+ return mrb_false_value();
+#endif
+}
+
void
mrb_mruby_socket_gem_test(mrb_state* mrb)
{
struct RClass *c = mrb_define_module(mrb, "SocketTest");
mrb_define_class_method(mrb, c, "tmppath", mrb_sockettest_tmppath, MRB_ARGS_NONE());
mrb_define_class_method(mrb, c, "win?", mrb_sockettest_win_p, MRB_ARGS_NONE());
+ mrb_define_class_method(mrb, c, "cygwin?", mrb_sockettest_cygwin_p, MRB_ARGS_NONE());
}
diff --git a/mrbgems/mruby-socket/test/unix.rb b/mrbgems/mruby-socket/test/unix.rb
index 2a29ddae7..4a88fba21 100644
--- a/mrbgems/mruby-socket/test/unix.rb
+++ b/mrbgems/mruby-socket/test/unix.rb
@@ -1,4 +1,4 @@
-unless SocketTest.win?
+unless SocketTest.win? || SocketTest.cygwin?
def unixserver_test_block
path = SocketTest.tmppath