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