diff options
Diffstat (limited to 'mrbgems/mruby-socket/test')
| -rw-r--r-- | mrbgems/mruby-socket/test/socket.rb | 2 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/sockettest.c | 59 | ||||
| -rw-r--r-- | mrbgems/mruby-socket/test/unix.rb | 2 |
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 |
