michael@0: #ifndef mozilla_ipdltest_TestFailedCtor_h michael@0: #define mozilla_ipdltest_TestFailedCtor_h michael@0: michael@0: #include "mozilla/_ipdltest/IPDLUnitTests.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestFailedCtorParent.h" michael@0: #include "mozilla/_ipdltest/PTestFailedCtorChild.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestFailedCtorSubParent.h" michael@0: #include "mozilla/_ipdltest/PTestFailedCtorSubChild.h" michael@0: michael@0: #include "mozilla/_ipdltest/PTestFailedCtorSubsubParent.h" michael@0: #include "mozilla/_ipdltest/PTestFailedCtorSubsubChild.h" michael@0: michael@0: namespace mozilla { michael@0: namespace _ipdltest { michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // Top-level michael@0: // michael@0: class TestFailedCtorParent : michael@0: public PTestFailedCtorParent michael@0: { michael@0: public: michael@0: TestFailedCtorParent() { } michael@0: virtual ~TestFailedCtorParent() { } michael@0: michael@0: static bool RunTestInProcesses() { return true; } michael@0: michael@0: // FIXME/bug 703322 Disabled because child calls exit() to end michael@0: // test, not clear how to handle failed ctor in michael@0: // threaded mode. michael@0: static bool RunTestInThreads() { return false; } michael@0: michael@0: void Main(); michael@0: michael@0: protected: michael@0: virtual PTestFailedCtorSubParent* AllocPTestFailedCtorSubParent() MOZ_OVERRIDE; michael@0: virtual bool DeallocPTestFailedCtorSubParent(PTestFailedCtorSubParent* actor) MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE michael@0: { michael@0: if (AbnormalShutdown != why) michael@0: fail("unexpected destruction!"); michael@0: passed("ok"); michael@0: QuitParent(); michael@0: } michael@0: }; michael@0: michael@0: michael@0: class TestFailedCtorChild : michael@0: public PTestFailedCtorChild michael@0: { michael@0: public: michael@0: TestFailedCtorChild() { } michael@0: virtual ~TestFailedCtorChild() { } michael@0: michael@0: protected: michael@0: virtual PTestFailedCtorSubChild* AllocPTestFailedCtorSubChild() MOZ_OVERRIDE; michael@0: michael@0: virtual bool AnswerPTestFailedCtorSubConstructor(PTestFailedCtorSubChild* actor) MOZ_OVERRIDE; michael@0: michael@0: virtual bool DeallocPTestFailedCtorSubChild(PTestFailedCtorSubChild* actor) MOZ_OVERRIDE; michael@0: michael@0: virtual void ProcessingError(Result what) MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE michael@0: { michael@0: fail("should have _exit()ed"); michael@0: } michael@0: }; michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // First descendent michael@0: // michael@0: class TestFailedCtorSubsub; michael@0: michael@0: class TestFailedCtorSubParent : michael@0: public PTestFailedCtorSubParent michael@0: { michael@0: public: michael@0: TestFailedCtorSubParent() : mOne(nullptr), mTwo(nullptr), mThree(nullptr) { } michael@0: virtual ~TestFailedCtorSubParent(); michael@0: michael@0: protected: michael@0: virtual PTestFailedCtorSubsubParent* AllocPTestFailedCtorSubsubParent() MOZ_OVERRIDE; michael@0: michael@0: virtual bool DeallocPTestFailedCtorSubsubParent(PTestFailedCtorSubsubParent* actor) MOZ_OVERRIDE; michael@0: virtual bool RecvSync() MOZ_OVERRIDE { return true; } michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: michael@0: TestFailedCtorSubsub* mOne; michael@0: TestFailedCtorSubsub* mTwo; michael@0: TestFailedCtorSubsub* mThree; michael@0: }; michael@0: michael@0: michael@0: class TestFailedCtorSubChild : michael@0: public PTestFailedCtorSubChild michael@0: { michael@0: public: michael@0: TestFailedCtorSubChild() { } michael@0: virtual ~TestFailedCtorSubChild() { } michael@0: michael@0: protected: michael@0: virtual PTestFailedCtorSubsubChild* AllocPTestFailedCtorSubsubChild() MOZ_OVERRIDE; michael@0: virtual bool DeallocPTestFailedCtorSubsubChild(PTestFailedCtorSubsubChild* actor) MOZ_OVERRIDE; michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE; michael@0: }; michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: // Grand-descendent michael@0: // michael@0: class TestFailedCtorSubsub : michael@0: public PTestFailedCtorSubsubParent, michael@0: public PTestFailedCtorSubsubChild michael@0: { michael@0: public: michael@0: TestFailedCtorSubsub() : mWhy(ActorDestroyReason(-1)), mDealloced(false) {} michael@0: virtual ~TestFailedCtorSubsub() {} michael@0: michael@0: virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE { mWhy = why; } michael@0: michael@0: ActorDestroyReason mWhy; michael@0: bool mDealloced; michael@0: }; michael@0: michael@0: michael@0: } michael@0: } michael@0: michael@0: #endif // ifndef mozilla_ipdltest_TestFailedCtor_h