From d589d95d508ee7d687599a8a98f76677d860039f Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 20 Jul 2010 23:24:32 +0200 Subject: [PATCH] msvcp90/tests: Added char_traits assign tests. --- configure | 1 + configure.ac | 1 + dlls/msvcp90/tests/Makefile.in | 17 +++++ dlls/msvcp90/tests/misc.c | 104 ++++++++++++++++++++++++++++ dlls/msvcp90/tests/msvcp90.manifest | 22 ++++++ dlls/msvcp90/tests/msvcp90.rc | 22 ++++++ 6 files changed, 167 insertions(+) create mode 100644 dlls/msvcp90/tests/Makefile.in create mode 100644 dlls/msvcp90/tests/misc.c create mode 100644 dlls/msvcp90/tests/msvcp90.manifest create mode 100644 dlls/msvcp90/tests/msvcp90.rc diff --git a/configure b/configure index 084a3b75368..6f8fca28f5b 100755 --- a/configure +++ b/configure @@ -14519,6 +14519,7 @@ wine_fn_config_dll mstask enable_mstask wine_fn_config_test dlls/mstask/tests mstask_test wine_fn_config_dll msvcirt enable_msvcirt wine_fn_config_dll msvcp90 enable_msvcp90 +wine_fn_config_test dlls/msvcp90/tests msvcp90_test wine_fn_config_dll msvcr100 enable_msvcr100 wine_fn_config_dll msvcr70 enable_msvcr70 msvcr70 wine_fn_config_dll msvcr71 enable_msvcr71 msvcr71 diff --git a/configure.ac b/configure.ac index 4c27f843d78..5638f2b2dab 100644 --- a/configure.ac +++ b/configure.ac @@ -2456,6 +2456,7 @@ WINE_CONFIG_DLL(mstask) WINE_CONFIG_TEST(dlls/mstask/tests) WINE_CONFIG_DLL(msvcirt) WINE_CONFIG_DLL(msvcp90) +WINE_CONFIG_TEST(dlls/msvcp90/tests) WINE_CONFIG_DLL(msvcr100) WINE_CONFIG_DLL(msvcr70,,[msvcr70]) WINE_CONFIG_DLL(msvcr71,,[msvcr71]) diff --git a/dlls/msvcp90/tests/Makefile.in b/dlls/msvcp90/tests/Makefile.in new file mode 100644 index 00000000000..37cc9abfa81 --- /dev/null +++ b/dlls/msvcp90/tests/Makefile.in @@ -0,0 +1,17 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +TESTDLL = msvcp90.dll +APPMODE = -mno-cygwin +IMPORTS = kernel32 +MODCFLAGS = @BUILTINFLAG@ +EXTRAINCL = -I$(TOPSRCDIR)/include/msvcrt + +C_SRCS = \ + misc.c + +RC_SRCS = \ + msvcp90.rc + +@MAKE_TEST_RULES@ diff --git a/dlls/msvcp90/tests/misc.c b/dlls/msvcp90/tests/misc.c new file mode 100644 index 00000000000..2995dfddd28 --- /dev/null +++ b/dlls/msvcp90/tests/misc.c @@ -0,0 +1,104 @@ +/* + * Copyright 2010 Piotr Caban for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#include +#include +#include "wine/test.h" + +static void* (__cdecl *p_set_invalid_parameter_handler)(void*); + +static void (__cdecl *p_char_assign)(void*, const void*); +static void (__cdecl *p_wchar_assign)(void*, const void*); +static void (__cdecl *p_short_assign)(void*, const void*); + +static int invalid_parameter = 0; +static void __cdecl test_invalid_parameter_handler(const wchar_t *expression, + const wchar_t *function, const wchar_t *file, + unsigned line, uintptr_t arg) +{ + ok(expression == NULL, "expression is not NULL\n"); + ok(function == NULL, "function is not NULL\n"); + ok(file == NULL, "file is not NULL\n"); + ok(line == 0, "line = %u\n", line); + ok(arg == 0, "arg = %lx\n", (UINT_PTR)arg); + invalid_parameter++; +} + +static BOOL init(void) +{ + HMODULE msvcr = LoadLibraryA("msvcr90.dll"); + HMODULE msvcp = LoadLibraryA("msvcp90.dll"); + if(!msvcr || !msvcp) { + win_skip("msvcp90.dll or msvcrt90.dll not installed\n"); + return FALSE; + } + + p_set_invalid_parameter_handler = (void*)GetProcAddress(msvcr, "_set_invalid_parameter_handler"); + if(!p_set_invalid_parameter_handler) { + win_skip("Error setting tests environment\n"); + return FALSE; + } + + p_set_invalid_parameter_handler(test_invalid_parameter_handler); + + p_char_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@D@std@@SAXAADABD@Z"); + p_wchar_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@_W@std@@SAXAA_WAB_W@Z"); + p_short_assign = (void*)GetProcAddress(msvcp, "?assign@?$char_traits@G@std@@SAXAAGABG@Z"); + + return TRUE; +} + +static void test_assign(void) +{ + const char in[] = "abc"; + char out[4]; + + if(!p_char_assign || !p_wchar_assign || !p_short_assign) { + win_skip("assign tests skipped\n"); + return; + } + + out[1] = '#'; + p_char_assign(out, in); + ok(out[0] == in[0], "out[0] = %c\n", out[0]); + ok(out[1] == '#', "out[1] = %c\n", out[1]); + + out[2] = '#'; + p_wchar_assign(out, in); + ok(*((char*)out)==in[0] && *((char*)out+1)==in[1], + "out[0] = %d, out[1] = %d\n", (int)out[0], (int)out[1]); + ok(out[2] == '#', "out[2] = %c\n", out[2]); + + out[2] = '#'; + p_short_assign(out, in); + ok(*((char*)out)==in[0] && *((char*)out+1)==in[1], + "out[0] = %d, out[1] = %d\n", (int)out[0], (int)out[1]); + ok(out[2] == '#', "out[2] = %c\n", out[2]); +} + +START_TEST(misc) +{ + if(!init()) + return; + + test_assign(); + + ok(!invalid_parameter, "invalid_parameter_handler was invoked too many times\n"); +} diff --git a/dlls/msvcp90/tests/msvcp90.manifest b/dlls/msvcp90/tests/msvcp90.manifest new file mode 100644 index 00000000000..3cf3405b2e1 --- /dev/null +++ b/dlls/msvcp90/tests/msvcp90.manifest @@ -0,0 +1,22 @@ + + + +Wine msvcp90 test suite + + + + + + diff --git a/dlls/msvcp90/tests/msvcp90.rc b/dlls/msvcp90/tests/msvcp90.rc new file mode 100644 index 00000000000..4f2dd98f0df --- /dev/null +++ b/dlls/msvcp90/tests/msvcp90.rc @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2010 Piotr Caban + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "winuser.h" + +/* @makedep: msvcp90.manifest */ +1 RT_MANIFEST msvcp90.manifest