michael@0: #include "TestFailedCtor.h" michael@0: michael@0: #include "IPDLUnitTests.h" // fail etc. michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // parent michael@0: void michael@0: TestFailedCtorParent::Main() michael@0: { michael@0: PTestFailedCtorSubParent* p = CallPTestFailedCtorSubConstructor(); michael@0: if (p) michael@0: fail("expected ctor to fail"); michael@0: michael@0: Close(); michael@0: } michael@0: michael@0: PTestFailedCtorSubParent* michael@0: TestFailedCtorParent::AllocPTestFailedCtorSubParent() michael@0: { michael@0: return new TestFailedCtorSubParent(); michael@0: } michael@0: bool michael@0: TestFailedCtorParent::DeallocPTestFailedCtorSubParent(PTestFailedCtorSubParent* actor) michael@0: { michael@0: delete actor; michael@0: return true; michael@0: } michael@0: michael@0: PTestFailedCtorSubsubParent* michael@0: TestFailedCtorSubParent::AllocPTestFailedCtorSubsubParent() michael@0: { michael@0: TestFailedCtorSubsub* a = new TestFailedCtorSubsub(); michael@0: if (!mOne) { michael@0: return mOne = a; michael@0: } else if (!mTwo) { michael@0: return mTwo = a; michael@0: } else if (!mThree) { michael@0: return mThree = a; michael@0: } else { michael@0: fail("unexpected Alloc()"); michael@0: return nullptr; michael@0: } michael@0: } michael@0: bool michael@0: TestFailedCtorSubParent::DeallocPTestFailedCtorSubsubParent(PTestFailedCtorSubsubParent* actor) michael@0: { michael@0: static_cast(actor)->mDealloced = true; michael@0: return true; michael@0: } michael@0: michael@0: void michael@0: TestFailedCtorSubParent::ActorDestroy(ActorDestroyReason why) michael@0: { michael@0: michael@0: if (mOne->mWhy != Deletion) michael@0: fail("Subsub one got wrong ActorDestroyReason"); michael@0: if (mTwo->mWhy != AncestorDeletion) michael@0: fail("Subsub two got wrong ActorDestroyReason"); michael@0: if (mThree->mWhy != AncestorDeletion) michael@0: fail("Subsub three got wrong ActorDestroyReason"); michael@0: michael@0: if (FailedConstructor != why) michael@0: fail("unexpected destruction!"); michael@0: } michael@0: michael@0: TestFailedCtorSubParent::~TestFailedCtorSubParent() michael@0: { michael@0: if (!(mOne->mDealloced && mTwo->mDealloced && mThree->mDealloced)) michael@0: fail("Not all subsubs were Dealloc'd"); michael@0: delete mOne; michael@0: delete mTwo; michael@0: delete mThree; michael@0: } michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // child michael@0: michael@0: PTestFailedCtorSubChild* michael@0: TestFailedCtorChild::AllocPTestFailedCtorSubChild() michael@0: { michael@0: return new TestFailedCtorSubChild(); michael@0: } michael@0: michael@0: bool michael@0: TestFailedCtorChild::AnswerPTestFailedCtorSubConstructor(PTestFailedCtorSubChild* actor) michael@0: { michael@0: PTestFailedCtorSubsubChild* c1 = actor->SendPTestFailedCtorSubsubConstructor(); michael@0: PTestFailedCtorSubsubChild::Send__delete__(c1); michael@0: michael@0: if (!actor->SendPTestFailedCtorSubsubConstructor() || michael@0: !actor->SendPTestFailedCtorSubsubConstructor() || michael@0: !actor->SendSync()) michael@0: fail("setting up test"); michael@0: michael@0: // This causes our process to die michael@0: return false; michael@0: } michael@0: michael@0: bool michael@0: TestFailedCtorChild::DeallocPTestFailedCtorSubChild(PTestFailedCtorSubChild* actor) michael@0: { michael@0: delete actor; michael@0: return true; michael@0: } michael@0: michael@0: void michael@0: TestFailedCtorChild::ProcessingError(Result what) michael@0: { michael@0: if (OtherProcess() != 0) // thread-mode michael@0: _exit(0); michael@0: } michael@0: michael@0: PTestFailedCtorSubsubChild* michael@0: TestFailedCtorSubChild::AllocPTestFailedCtorSubsubChild() michael@0: { michael@0: return new TestFailedCtorSubsub(); michael@0: } michael@0: michael@0: bool michael@0: TestFailedCtorSubChild::DeallocPTestFailedCtorSubsubChild(PTestFailedCtorSubsubChild* actor) michael@0: { michael@0: delete actor; michael@0: return true; michael@0: } michael@0: michael@0: void michael@0: TestFailedCtorSubChild::ActorDestroy(ActorDestroyReason why) michael@0: { michael@0: } michael@0: michael@0: michael@0: } // namespace _ipdltest michael@0: } // namespace mozilla