glib/tests/spawn-singlethread: Improve test for Windows

Use a Windows-style .bat script for the test_spawn_script() test, at least
when the code is built with Visual C++ (due to differences in how scripts
are written for shells and Windows cmd.exe), and account for Windows-style
line endings for that test too.

Let the MinGW builds (which are normally done in an MSYS BASH-style shell) continue to use the
*NIX-style script for that test.

https://bugzilla.gnome.org/show_bug.cgi?id=711047
This commit is contained in:
Chun-wei Fan 2013-11-06 15:14:06 +08:00
parent b27a2d436b
commit a7707ec60b
3 changed files with 22 additions and 3 deletions

View File

@ -22,6 +22,7 @@ dist_test_data = \
dist_test_extra_scripts = \
echo-script \
echo-script.bat \
$(NULL)
test_extra_programs = \

View File

@ -0,0 +1,2 @@
@echo off
echo echo

View File

@ -26,6 +26,22 @@
#include <glib.h>
#include <string.h>
#ifdef G_OS_WIN32
#define LINEEND "\r\n"
#else
#define LINEEND "\n"
#endif
/* MinGW builds are likely done using a BASH-style shell, so run the
* normal script there, as on non-Windows builds, as it is more likely
* that one will run 'make check' in such shells to test the code
*/
#if defined (G_OS_WIN32) && defined (_MSC_VER)
#define SCRIPT_EXT ".bat"
#else
#define SCRIPT_EXT
#endif
static char *echo_prog_path;
static char *echo_script_path;
@ -179,7 +195,7 @@ test_spawn_script (void)
g_spawn_sync (NULL, (char**)argv->pdata, NULL, 0, NULL, NULL, &stdout_str, NULL, &estatus, &error);
g_assert_no_error (error);
g_assert_cmpstr ("echo\n", ==, stdout_str);
g_assert_cmpstr ("echo" LINEEND, ==, stdout_str);
g_free (stdout_str);
g_ptr_array_free (argv, TRUE);
}
@ -200,11 +216,11 @@ main (int argc,
g_free (echo_prog_path);
echo_prog_path = g_build_filename (dirname, "lt-test-spawn-echo" EXEEXT, NULL);
}
echo_script_path = g_build_filename (dirname, "echo-script", NULL);
echo_script_path = g_build_filename (dirname, "echo-script" SCRIPT_EXT, NULL);
if (!g_file_test (echo_script_path, G_FILE_TEST_EXISTS))
{
g_free (echo_script_path);
echo_script_path = g_test_build_filename (G_TEST_DIST, "echo-script", NULL);
echo_script_path = g_test_build_filename (G_TEST_DIST, "echo-script" SCRIPT_EXT, NULL);
}
g_free (dirname);