Rob Shearman : rpcrt4: Add tests for varying and conformant varying arrays.

Alexandre Julliard julliard at winehq.org
Wed Dec 26 10:05:08 CST 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Mon Dec 24 17:01:20 2007 +0000

rpcrt4: Add tests for varying and conformant varying arrays.

---

 dlls/rpcrt4/tests/server.c   |   44 ++++++++++++++++++++++++++++++++++++++++++
 dlls/rpcrt4/tests/server.idl |    2 +
 2 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index c8acab9..2e392dd 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -595,6 +595,32 @@ s_context_handle_test(void)
 }
 
 void
+s_get_5numbers(int count, pints_t n[5])
+{
+    int i;
+    for (i = 0; i < count; i++)
+    {
+        n[i].pi = midl_user_allocate(sizeof(*n[i].pi));
+        *n[i].pi = i;
+        n[i].ppi = NULL;
+        n[i].pppi = NULL;
+    }
+}
+
+void
+s_get_numbers(int length, int size, pints_t n[])
+{
+    int i;
+    for (i = 0; i < length; i++)
+    {
+        n[i].pi = midl_user_allocate(sizeof(*n[i].pi));
+        *n[i].pi = i;
+        n[i].ppi = NULL;
+        n[i].pppi = NULL;
+    }
+}
+
+void
 s_stop(void)
 {
   ok(RPC_S_OK == RpcMgmtStopServerListening(NULL), "RpcMgmtStopServerListening\n");
@@ -1029,6 +1055,8 @@ array_tests(void)
   int n;
   int ca[5] = {1, -2, 3, -4, 5};
   doub_carr_t *dc;
+  int *pi;
+  pints_t api[5];
 
   ok(cstr_length(str1, sizeof str1) == strlen(str1), "RPC cstr_length\n");
 
@@ -1103,6 +1131,22 @@ array_tests(void)
   free_pyramid_doub_carr(dc);
 
   ok(sum_L1_norms(2, vs) == 21, "RPC sum_L1_norms\n");
+
+  memset(api, 0, sizeof(api));
+  pi = HeapAlloc(GetProcessHeap(), 0, sizeof(*pi));
+  *pi = -1;
+  api[0].pi = pi;
+  get_5numbers(1, api);
+  todo_wine
+  ok(api[0].pi == pi, "RPC varying array [out] pointer changed from %p to %p\n", pi, api[0].pi);
+  ok(*api[0].pi == 0, "pi unmarshalled incorrectly %d\n", *pi);
+
+  api[0].pi = pi;
+  get_numbers(1, 1, api);
+  todo_wine
+  ok(api[0].pi == pi, "RPC conformant varying array [out] pointer changed from %p to %p\n", pi, api[0].pi);
+  ok(*api[0].pi == 0, "pi unmarshalled incorrectly %d\n", *pi);
+  HeapFree(GetProcessHeap(), 0, pi);
 }
 
 static void
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index 66b0aff..ec51757 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -300,6 +300,8 @@ cpp_quote("#endif")
   int sum_pcarr2(int n, [size_is(, n)] int **pa);
   int sum_L1_norms(int n, [size_is(n)] vector_t *vs);
 
+  void get_5numbers([in] int count, [out, length_is(count)] pints_t pn[5]);
+  void get_numbers([in] int length, [in] int size, [out, length_is(length), size_is(size)] pints_t pn[]);
   str_t get_filename(void);
   void context_handle_test(void);
   void stop(void);




More information about the wine-cvs mailing list