Piotr Caban : msvcp90/tests: Test virtual function calls returning structures.

Alexandre Julliard julliard at winehq.org
Thu Dec 29 12:15:49 CST 2011


Module: wine
Branch: master
Commit: ecbe1ff21113c50cb4260599283f7a13cb56ce77
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ecbe1ff21113c50cb4260599283f7a13cb56ce77

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Dec 29 12:45:44 2011 +0100

msvcp90/tests: Test virtual function calls returning structures.

---

 dlls/msvcp90/tests/misc.c |   54 ++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/dlls/msvcp90/tests/misc.c b/dlls/msvcp90/tests/misc.c
index 8e77e95..688f344 100644
--- a/dlls/msvcp90/tests/misc.c
+++ b/dlls/msvcp90/tests/misc.c
@@ -30,6 +30,19 @@ typedef struct {
     int delfl;
 } MSVCP__Ctypevec;
 
+/* basic_string<char, char_traits<char>, allocator<char>> */
+#define BUF_SIZE_CHAR 16
+typedef struct
+{
+    void *allocator;
+    union {
+        char buf[BUF_SIZE_CHAR];
+        char *ptr;
+    } data;
+    size_t size;
+    size_t res;
+} basic_string_char;
+
 static void* (__cdecl *p_set_invalid_parameter_handler)(void*);
 static _locale_t (__cdecl *p__get_current_locale)(void);
 static void  (__cdecl *p_free)(void*);
@@ -64,6 +77,11 @@ void* (__thiscall *p_collate_char_ctor_refs)(void*, size_t);
 int (__thiscall *p_collate_char_compare)(const void*, const char*,
         const char*, const char*, const char*);
 void (__thiscall *p_collate_char_dtor)(void*);
+void* (__thiscall *p_numpunct_char_ctor)(void*);
+basic_string_char* (__thiscall *p_numpunct_char_falsename)(void*,basic_string_char*);
+void (__thiscall *p_numpunct_char_dtor)(void*);
+static void (__thiscall *p_basic_string_char_dtor)(basic_string_char*);
+static const char* (__thiscall *p_basic_string_char_cstr)(basic_string_char*);
 
 static int invalid_parameter = 0;
 static void __cdecl test_invalid_parameter_handler(const wchar_t *expression,
@@ -97,6 +115,7 @@ static void * (WINAPI *call_thiscall_func2)( void *func, void *this, const void
 static void * (WINAPI *call_thiscall_func3)( void *func, void *this, const void *a, const void *b );
 static void * (WINAPI *call_thiscall_func5)( void *func, void *this, const void *a, const void *b,
         const void *c, const void *d );
+struct thiscall_thunk_retptr *thunk_retptr;
 
 static void init_thiscall_thunk(void)
 {
@@ -173,6 +192,13 @@ static BOOL init(void)
         SET(p_collate_char_ctor_refs, "??0?$collate at D@std@@QEAA at _K@Z");
         SET(p_collate_char_compare, "?compare@?$collate at D@std@@QEBAHPEBD000 at Z");
         SET(p_collate_char_dtor, "??1?$collate at D@std@@MEAA at XZ");
+        SET(p_numpunct_char_ctor, "??_F?$numpunct at D@std@@QEAAXXZ");
+        SET(p_numpunct_char_falsename, "?falsename@?$numpunct at D@std@@QEBA?AV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@2 at XZ");
+        SET(p_numpunct_char_dtor, "??1?$numpunct at D@std@@MEAA at XZ");
+        SET(p_basic_string_char_dtor,
+                "??1?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEAA at XZ");
+        SET(p_basic_string_char_cstr,
+                "?c_str@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QEBAPEBDXZ");
     } else {
         SET(p_char_assign, "?assign@?$char_traits at D@std@@SAXAADABD at Z");
         SET(p_wchar_assign, "?assign@?$char_traits at _W@std@@SAXAA_WAB_W at Z");
@@ -194,6 +220,13 @@ static BOOL init(void)
         SET(p_collate_char_ctor_refs, "??0?$collate at D@std@@QAE at I@Z");
         SET(p_collate_char_compare, "?compare@?$collate at D@std@@QBEHPBD000 at Z");
         SET(p_collate_char_dtor, "??1?$collate at D@std@@MAE at XZ");
+        SET(p_numpunct_char_ctor, "??_F?$numpunct at D@std@@QAEXXZ");
+        SET(p_numpunct_char_falsename, "?falsename@?$numpunct at D@std@@QBE?AV?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@2 at XZ");
+        SET(p_numpunct_char_dtor, "??1?$numpunct at D@std@@MAE at XZ");
+        SET(p_basic_string_char_dtor,
+                "??1?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QAE at XZ");
+        SET(p_basic_string_char_cstr,
+                "?c_str@?$basic_string at DU?$char_traits at D@std@@V?$allocator at D@2@@std@@QBEPBDXZ");
     }
 
     init_thiscall_thunk();
@@ -377,19 +410,28 @@ static void test_allocator_char(void)
 
 static void test_virtual_call(void)
 {
-    BYTE collate_char[16];
+    BYTE this[256];
+    basic_string_char bstr;
+    const char *p;
     char str1[] = "test";
     char str2[] = "TEST";
     int ret;
 
-    call_func2(p_collate_char_ctor_refs, collate_char, 0);
-    ret = (int)call_func5(p_collate_char_compare, collate_char, str1, str1+4, str1, str1+4);
+    call_func2(p_collate_char_ctor_refs, this, 0);
+    ret = (int)call_func5(p_collate_char_compare, this, str1, str1+4, str1, str1+4);
     ok(ret == 0, "collate<char>::compare returned %d\n", ret);
-    ret = (int)call_func5(p_collate_char_compare, collate_char, str2, str2+4, str1, str1+4);
+    ret = (int)call_func5(p_collate_char_compare, this, str2, str2+4, str1, str1+4);
     ok(ret == 1, "collate<char>::compare returned %d\n", ret);
-    ret = (int)call_func5(p_collate_char_compare, collate_char, str1, str1+3, str1, str1+4);
+    ret = (int)call_func5(p_collate_char_compare, this, str1, str1+3, str1, str1+4);
     ok(ret == -1, "collate<char>::compare returned %d\n", ret);
-    call_func1(p_collate_char_dtor, collate_char);
+    call_func1(p_collate_char_dtor, this);
+
+    call_func1(p_numpunct_char_ctor, this);
+    call_func2(p_numpunct_char_falsename, this, &bstr);
+    p = call_func1(p_basic_string_char_cstr, &bstr);
+    ok(!strcmp(p, "false"), "numpunct<char>::falsename returned %s\n", p);
+    call_func1(p_basic_string_char_dtor, &bstr);
+    call_func1(p_numpunct_char_dtor, this);
 }
 
 START_TEST(misc)




More information about the wine-cvs mailing list