Alexandre Julliard : rpcrt4/tests: Add a test about unmarshalling of an out-only structure.

Alexandre Julliard julliard at winehq.org
Wed Jul 27 13:25:24 CDT 2011


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Jul 27 11:51:24 2011 +0200

rpcrt4/tests: Add a test about unmarshalling of an out-only structure.

---

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

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index 4dbe1ce..ced357c 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -340,6 +340,19 @@ int __cdecl s_sum_cpsc(cpsc_t *cpsc)
   return sum;
 }
 
+int __cdecl s_get_cpsc(int n, cpsc_t *cpsc)
+{
+  static int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
+  int i, ret;
+
+  cpsc->ca = array;
+  cpsc->a = min( 10, 2 * n );
+  cpsc->b = 2;
+  cpsc->c = 1;
+  for (i = ret = 0; i < cpsc->a; i++) ret += cpsc->ca[i];
+  return ret;
+}
+
 int __cdecl s_square_puint(puint_t p)
 {
   int n = atoi(p);
@@ -1226,6 +1239,7 @@ array_tests(void)
   cs_t *cs;
   int n;
   int ca[5] = {1, -2, 3, -4, 5};
+  int tmp[10];
   doub_carr_t *dc;
   int *pi;
   pints_t api[5];
@@ -1293,6 +1307,18 @@ array_tests(void)
   cpsc.ca = c;
   ok(sum_cpsc(&cpsc) == 10, "RPC sum_cpsc\n");
 
+  cpsc.ca = NULL;
+  ok(get_cpsc(5, &cpsc) == 45, "RPC sum_cpsc\n");
+  ok( cpsc.a == 10, "RPC get_cpsc %u\n", cpsc.a );
+  for (n = 0; n < 10; n++) ok( cpsc.ca[n] == n, "RPC get_cpsc[%d] = %d\n", n, cpsc.ca[n] );
+
+  memset( tmp, 0x33, sizeof(tmp) );
+  cpsc.ca = tmp;
+  ok(get_cpsc(4, &cpsc) == 28, "RPC sum_cpsc\n");
+  ok( cpsc.a == 8, "RPC get_cpsc %u\n", cpsc.a );
+  ok( cpsc.ca == tmp, "RPC get_cpsc %p/%p\n", cpsc.ca, tmp );
+  for (n = 0; n < 8; n++) ok( cpsc.ca[n] == n, "RPC get_cpsc[%d] = %d\n", n, cpsc.ca[n] );
+
   ok(sum_toplev_conf_2n(c, 3) == 15, "RPC sum_toplev_conf_2n\n");
   ok(sum_toplev_conf_cond(c, 5, 6, 1) == 10, "RPC sum_toplev_conf_cond\n");
   ok(sum_toplev_conf_cond(c, 5, 6, 0) == 15, "RPC sum_toplev_conf_cond\n");
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index 3be3f33..c7c7237 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -162,6 +162,7 @@ cpp_quote("#endif")
   int sum_cs(cs_t *cs);
   int sum_cps(cps_t *cps);
   int sum_cpsc(cpsc_t *cpsc);
+  int get_cpsc(int n, [out] cpsc_t *cpsc );
   int sum_complex_array(int n, [size_is(n)] refpint_t pi[]);
 
   typedef [wire_marshal(int)] void *puint_t;




More information about the wine-cvs mailing list