Dmitry Timoshkov : rpcrt4/tests: Add some tests for marshalling embedded conformant arrays.

Alexandre Julliard julliard at winehq.org
Mon Jun 8 15:19:55 CDT 2020


Module: wine
Branch: master
Commit: 59c0dbb642e788a8d28c2b653545566db6346cdb
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=59c0dbb642e788a8d28c2b653545566db6346cdb

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Mon Jun  8 16:54:05 2020 +0800

rpcrt4/tests: Add some tests for marshalling embedded conformant arrays.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/rpcrt4/tests/server.c   | 54 ++++++++++++++++++++++++++++++++++++++++++++
 dlls/rpcrt4/tests/server.idl | 27 ++++++++++++++++++++++
 2 files changed, 81 insertions(+)

diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index 6ac2f74227..d665568831 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -94,6 +94,9 @@ static int (__cdecl *sum_cps)(cps_t *cps);
 static int (__cdecl *sum_cpsc)(cpsc_t *cpsc);
 static int (__cdecl *get_cpsc)(int n, cpsc_t *cpsc);
 static int (__cdecl *sum_complex_array)(int n, refpint_t pi[]);
+static int (__cdecl *sum_blob)(cs_blob_t *blob);
+static int (__cdecl *sum_data)(cs_data_t *data);
+static int (__cdecl *sum_container)(cs_container_t *container);
 static int (__cdecl *square_puint)(puint_t p);
 static int (__cdecl *sum_puints)(puints_t *p);
 static int (__cdecl *sum_cpuints)(cpuints_t *p);
@@ -185,6 +188,9 @@ static void (__cdecl *test_handle)(ctx_handle_t ctx_handle);
     X(sum_cpsc) \
     X(get_cpsc) \
     X(sum_complex_array) \
+    X(sum_blob) \
+    X(sum_data) \
+    X(sum_container) \
     X(square_puint) \
     X(sum_puints) \
     X(sum_cpuints) \
@@ -507,6 +513,36 @@ int __cdecl s_sum_complex_array(int n, refpint_t pi[])
   return total;
 }
 
+int __cdecl s_sum_blob(cs_blob_t *blob)
+{
+  int i, total = 0;
+
+  for (i = 0; i < blob->n; i++)
+    total += blob->ca[i];
+
+  return total;
+}
+
+int __cdecl s_sum_data(cs_data_t *data)
+{
+  int i, total = 0;
+
+  for (i = 0; i < data->blob.n; i++)
+    total += data->blob.ca[i];
+
+  return total;
+}
+
+int __cdecl s_sum_container(cs_container_t *container)
+{
+  int i, total = 0;
+
+  for (i = 0; i < container->data.blob.n; i++)
+    total += container->data.blob.ca[i];
+
+  return total;
+}
+
 int __cdecl s_dot_two_vectors(vector_t vs[2])
 {
   return vs[0].x * vs[1].x + vs[0].y * vs[1].y + vs[0].z * vs[1].z;
@@ -1618,6 +1654,9 @@ array_tests(void)
   vector_t vs[2] = {{1, -2, 3}, {4, -5, -6}};
   cps_t cps;
   cpsc_t cpsc;
+  cs_blob_t blob;
+  cs_data_t data;
+  cs_container_t container;
   cs_t *cs;
   int n;
   int ca[5] = {1, -2, 3, -4, 5};
@@ -1761,6 +1800,21 @@ array_tests(void)
 
   ok(sum_ptr_array(ptr_array) == 3, "RPC sum_ptr_array\n");
   ok(sum_array_ptr(&array) == 7, "RPC sum_array_ptr\n");
+
+  blob.n = ARRAY_SIZE(c);
+  blob.ca = c;
+  n = sum_blob(&blob);
+  ok(n == 45, "RPC sum_blob = %d\n", n);
+
+  data.blob.n = ARRAY_SIZE(c);
+  data.blob.ca = c;
+  n = sum_data(&data);
+  ok(n == 45, "RPC sum_data = %d\n", n);
+
+  container.data.blob.n = ARRAY_SIZE(c);
+  container.data.blob.ca = c;
+  n = sum_container(&container);
+  ok(n == 45, "RPC sum_container = %d\n", n);
 }
 
 void __cdecl s_authinfo_test(unsigned int protseq, int secure)
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index afda2eddd0..4d945dcca3 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -169,6 +169,30 @@ cpp_quote("#ifndef SKIP_TYPE_DECLS")
     [size_is(n)] int ca[];
   } cs_t;
 
+  typedef struct
+  {
+    int n;
+    [size_is(n)] int *ca;
+  } cs_blob_t;
+
+  typedef struct
+  {
+/* FIXME: widl generates incorrect correlation descriptor and the tests crash */
+#if 0
+    int dummy[1]; /* to make offset to conformant array unique */
+#endif
+    cs_blob_t blob;
+  } cs_data_t;
+
+  typedef struct
+  {
+/* FIXME: widl generates incorrect correlation descriptor and the tests crash */
+#if 0
+    int dummy[2]; /* to make offset to conformant array unique */
+#endif
+    cs_data_t data;
+  } cs_container_t;
+
   typedef struct
   {
     int *pn;
@@ -191,6 +215,9 @@ cpp_quote("#endif")
   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[]);
+  int sum_blob([in] cs_blob_t *blob);
+  int sum_data([in] cs_data_t *data);
+  int sum_container([in] cs_container_t *container);
 
 cpp_quote("#ifndef SKIP_TYPE_DECLS")
   typedef [wire_marshal(int)] void *puint_t;




More information about the wine-cvs mailing list