ipc/ipdl/test/cxx/TestJSON.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/ipc/ipdl/test/cxx/TestJSON.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,129 @@
     1.4 +#include "TestJSON.h"
     1.5 +
     1.6 +#include "IPDLUnitTests.h"      // fail etc.
     1.7 +
     1.8 +#define test_assert(_cond, _msg) \
     1.9 +    if (!(_cond)) fail(_msg)
    1.10 +
    1.11 +namespace mozilla {
    1.12 +namespace _ipdltest {
    1.13 +
    1.14 +static nsString
    1.15 +String(const char* const str)
    1.16 +{
    1.17 +    return NS_ConvertUTF8toUTF16(str);
    1.18 +}
    1.19 +
    1.20 +static void
    1.21 +Array123(InfallibleTArray<JSONVariant>& a123)
    1.22 +{
    1.23 +    a123.AppendElement(1);  a123.AppendElement(2);  a123.AppendElement(3);
    1.24 +
    1.25 +    test_assert(a123 == a123, "operator== is broken");
    1.26 +}
    1.27 +
    1.28 +template<class HandleT>
    1.29 +JSONVariant
    1.30 +MakeTestVariant(HandleT* handle)
    1.31 +{
    1.32 +    // In JS syntax:
    1.33 +    //
    1.34 +    //   return [
    1.35 +    //     undefined, null, true, 1.25, "test string",
    1.36 +    //     handle,
    1.37 +    //     [ 1, 2, 3 ],
    1.38 +    //     { "undefined" : undefined,
    1.39 +    //       "null"      : null,
    1.40 +    //       "true"      : true,
    1.41 +    //       "1.25"      : 1.25,
    1.42 +    //       "string"    : "string"
    1.43 +    //       "handle"    : handle,
    1.44 +    //       "array"     : [ 1, 2, 3 ]
    1.45 +    //     }
    1.46 +    //   ]
    1.47 +    //
    1.48 +    InfallibleTArray<JSONVariant> outer;
    1.49 +
    1.50 +    outer.AppendElement(void_t());
    1.51 +    outer.AppendElement(null_t());
    1.52 +    outer.AppendElement(true);
    1.53 +    outer.AppendElement(1.25);
    1.54 +    outer.AppendElement(String("test string"));
    1.55 +
    1.56 +    outer.AppendElement(handle);
    1.57 +
    1.58 +    InfallibleTArray<JSONVariant> tmp;
    1.59 +    Array123(tmp);
    1.60 +    outer.AppendElement(tmp);
    1.61 +
    1.62 +    InfallibleTArray<KeyValue> obj;
    1.63 +    obj.AppendElement(KeyValue(String("undefined"), void_t()));
    1.64 +    obj.AppendElement(KeyValue(String("null"), null_t()));
    1.65 +    obj.AppendElement(KeyValue(String("true"), true));
    1.66 +    obj.AppendElement(KeyValue(String("1.25"), 1.25));
    1.67 +    obj.AppendElement(KeyValue(String("string"), String("value")));
    1.68 +    obj.AppendElement(KeyValue(String("handle"), handle));
    1.69 +    InfallibleTArray<JSONVariant> tmp2;
    1.70 +    Array123(tmp2);
    1.71 +    obj.AppendElement(KeyValue(String("array"), tmp2));
    1.72 +
    1.73 +    outer.AppendElement(obj);
    1.74 +
    1.75 +    test_assert(outer == outer, "operator== is broken");
    1.76 +
    1.77 +    return JSONVariant(outer);
    1.78 +}
    1.79 +
    1.80 +//-----------------------------------------------------------------------------
    1.81 +// parent
    1.82 +
    1.83 +void
    1.84 +TestJSONParent::Main()
    1.85 +{
    1.86 +    if (!SendStart())
    1.87 +        fail("sending Start");
    1.88 +}
    1.89 +
    1.90 +
    1.91 +bool
    1.92 +TestJSONParent::RecvTest(const JSONVariant& i,
    1.93 +                         JSONVariant* o)
    1.94 +{
    1.95 +    test_assert(i == i, "operator== is broken");
    1.96 +    test_assert(i == MakeTestVariant(mKid), "inparam mangled en route");
    1.97 +
    1.98 +    *o = i;
    1.99 +
   1.100 +    test_assert(i == *o, "operator= is broken");
   1.101 +
   1.102 +    return true;
   1.103 +}
   1.104 +
   1.105 +
   1.106 +//-----------------------------------------------------------------------------
   1.107 +// child
   1.108 +
   1.109 +bool
   1.110 +TestJSONChild::RecvStart()
   1.111 +{
   1.112 +    if (!SendPTestHandleConstructor())
   1.113 +        fail("sending Handle ctor");
   1.114 +
   1.115 +    JSONVariant i(MakeTestVariant(mKid));
   1.116 +    test_assert(i == i, "operator== is broken");
   1.117 +    test_assert(i == MakeTestVariant(mKid), "copy ctor is broken");
   1.118 +
   1.119 +    JSONVariant o;
   1.120 +    if (!SendTest(i, &o))
   1.121 +        fail("sending Test");
   1.122 +
   1.123 +    test_assert(i == o, "round-trip mangled input data");
   1.124 +    test_assert(o == MakeTestVariant(mKid), "outparam mangled en route");
   1.125 +
   1.126 +    Close();
   1.127 +    return true;
   1.128 +}
   1.129 +
   1.130 +
   1.131 +} // namespace _ipdltest
   1.132 +} // namespace mozilla

mercurial