michael@0: #include "TestJSON.h" michael@0: michael@0: #include "IPDLUnitTests.h" // fail etc. michael@0: michael@0: #define test_assert(_cond, _msg) \ michael@0: if (!(_cond)) fail(_msg) michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: static nsString michael@0: String(const char* const str) michael@0: { michael@0: return NS_ConvertUTF8toUTF16(str); michael@0: } michael@0: michael@0: static void michael@0: Array123(InfallibleTArray& a123) michael@0: { michael@0: a123.AppendElement(1); a123.AppendElement(2); a123.AppendElement(3); michael@0: michael@0: test_assert(a123 == a123, "operator== is broken"); michael@0: } michael@0: michael@0: template michael@0: JSONVariant michael@0: MakeTestVariant(HandleT* handle) michael@0: { michael@0: // In JS syntax: michael@0: // michael@0: // return [ michael@0: // undefined, null, true, 1.25, "test string", michael@0: // handle, michael@0: // [ 1, 2, 3 ], michael@0: // { "undefined" : undefined, michael@0: // "null" : null, michael@0: // "true" : true, michael@0: // "1.25" : 1.25, michael@0: // "string" : "string" michael@0: // "handle" : handle, michael@0: // "array" : [ 1, 2, 3 ] michael@0: // } michael@0: // ] michael@0: // michael@0: InfallibleTArray outer; michael@0: michael@0: outer.AppendElement(void_t()); michael@0: outer.AppendElement(null_t()); michael@0: outer.AppendElement(true); michael@0: outer.AppendElement(1.25); michael@0: outer.AppendElement(String("test string")); michael@0: michael@0: outer.AppendElement(handle); michael@0: michael@0: InfallibleTArray tmp; michael@0: Array123(tmp); michael@0: outer.AppendElement(tmp); michael@0: michael@0: InfallibleTArray obj; michael@0: obj.AppendElement(KeyValue(String("undefined"), void_t())); michael@0: obj.AppendElement(KeyValue(String("null"), null_t())); michael@0: obj.AppendElement(KeyValue(String("true"), true)); michael@0: obj.AppendElement(KeyValue(String("1.25"), 1.25)); michael@0: obj.AppendElement(KeyValue(String("string"), String("value"))); michael@0: obj.AppendElement(KeyValue(String("handle"), handle)); michael@0: InfallibleTArray tmp2; michael@0: Array123(tmp2); michael@0: obj.AppendElement(KeyValue(String("array"), tmp2)); michael@0: michael@0: outer.AppendElement(obj); michael@0: michael@0: test_assert(outer == outer, "operator== is broken"); michael@0: michael@0: return JSONVariant(outer); michael@0: } michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // parent michael@0: michael@0: void michael@0: TestJSONParent::Main() michael@0: { michael@0: if (!SendStart()) michael@0: fail("sending Start"); michael@0: } michael@0: michael@0: michael@0: bool michael@0: TestJSONParent::RecvTest(const JSONVariant& i, michael@0: JSONVariant* o) michael@0: { michael@0: test_assert(i == i, "operator== is broken"); michael@0: test_assert(i == MakeTestVariant(mKid), "inparam mangled en route"); michael@0: michael@0: *o = i; michael@0: michael@0: test_assert(i == *o, "operator= is broken"); michael@0: michael@0: return true; michael@0: } michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // child michael@0: michael@0: bool michael@0: TestJSONChild::RecvStart() michael@0: { michael@0: if (!SendPTestHandleConstructor()) michael@0: fail("sending Handle ctor"); michael@0: michael@0: JSONVariant i(MakeTestVariant(mKid)); michael@0: test_assert(i == i, "operator== is broken"); michael@0: test_assert(i == MakeTestVariant(mKid), "copy ctor is broken"); michael@0: michael@0: JSONVariant o; michael@0: if (!SendTest(i, &o)) michael@0: fail("sending Test"); michael@0: michael@0: test_assert(i == o, "round-trip mangled input data"); michael@0: test_assert(o == MakeTestVariant(mKid), "outparam mangled en route"); michael@0: michael@0: Close(); michael@0: return true; michael@0: } michael@0: michael@0: michael@0: } // namespace _ipdltest michael@0: } // namespace mozilla