summaryrefslogtreecommitdiffstats
path: root/ipc/ipdl/test/cxx/TestFailedCtor.h
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/ipdl/test/cxx/TestFailedCtor.h')
-rw-r--r--ipc/ipdl/test/cxx/TestFailedCtor.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/ipc/ipdl/test/cxx/TestFailedCtor.h b/ipc/ipdl/test/cxx/TestFailedCtor.h
new file mode 100644
index 0000000000..6fac4eb278
--- /dev/null
+++ b/ipc/ipdl/test/cxx/TestFailedCtor.h
@@ -0,0 +1,127 @@
+#ifndef mozilla_ipdltest_TestFailedCtor_h
+#define mozilla_ipdltest_TestFailedCtor_h
+
+#include "mozilla/_ipdltest/IPDLUnitTests.h"
+
+#include "mozilla/_ipdltest/PTestFailedCtorParent.h"
+#include "mozilla/_ipdltest/PTestFailedCtorChild.h"
+
+#include "mozilla/_ipdltest/PTestFailedCtorSubParent.h"
+#include "mozilla/_ipdltest/PTestFailedCtorSubChild.h"
+
+#include "mozilla/_ipdltest/PTestFailedCtorSubsubParent.h"
+#include "mozilla/_ipdltest/PTestFailedCtorSubsubChild.h"
+
+namespace mozilla {
+namespace _ipdltest {
+
+//-----------------------------------------------------------------------------
+// Top-level
+//
+class TestFailedCtorParent : public PTestFailedCtorParent {
+ friend class PTestFailedCtorParent;
+
+ public:
+ TestFailedCtorParent() {}
+ virtual ~TestFailedCtorParent() {}
+
+ static bool RunTestInProcesses() { return true; }
+
+ // FIXME/bug 703322 Disabled because child calls exit() to end
+ // test, not clear how to handle failed ctor in
+ // threaded mode.
+ static bool RunTestInThreads() { return false; }
+
+ void Main();
+
+ protected:
+ PTestFailedCtorSubParent* AllocPTestFailedCtorSubParent();
+ bool DeallocPTestFailedCtorSubParent(PTestFailedCtorSubParent* actor);
+
+ virtual void ActorDestroy(ActorDestroyReason why) override {
+ if (AbnormalShutdown != why) fail("unexpected destruction!");
+ passed("ok");
+ QuitParent();
+ }
+};
+
+class TestFailedCtorChild : public PTestFailedCtorChild {
+ friend class PTestFailedCtorChild;
+
+ public:
+ TestFailedCtorChild() {}
+ virtual ~TestFailedCtorChild() {}
+
+ protected:
+ PTestFailedCtorSubChild* AllocPTestFailedCtorSubChild();
+
+ mozilla::ipc::IPCResult AnswerPTestFailedCtorSubConstructor(
+ PTestFailedCtorSubChild* actor) override;
+
+ bool DeallocPTestFailedCtorSubChild(PTestFailedCtorSubChild* actor);
+
+ virtual void ProcessingError(Result aCode, const char* aReason) override;
+
+ virtual void ActorDestroy(ActorDestroyReason why) override {
+ fail("should have _exit()ed");
+ }
+};
+
+//-----------------------------------------------------------------------------
+// First descendent
+//
+class TestFailedCtorSubsub;
+
+class TestFailedCtorSubParent : public PTestFailedCtorSubParent {
+ friend class PTestFailedCtorSubParent;
+
+ public:
+ TestFailedCtorSubParent() : mOne(nullptr), mTwo(nullptr), mThree(nullptr) {}
+ virtual ~TestFailedCtorSubParent();
+
+ protected:
+ PTestFailedCtorSubsubParent* AllocPTestFailedCtorSubsubParent();
+
+ bool DeallocPTestFailedCtorSubsubParent(PTestFailedCtorSubsubParent* actor);
+ mozilla::ipc::IPCResult RecvSync() { return IPC_OK(); }
+
+ virtual void ActorDestroy(ActorDestroyReason why) override;
+
+ TestFailedCtorSubsub* mOne;
+ TestFailedCtorSubsub* mTwo;
+ TestFailedCtorSubsub* mThree;
+};
+
+class TestFailedCtorSubChild : public PTestFailedCtorSubChild {
+ friend class PTestFailedCtorSubChild;
+
+ public:
+ TestFailedCtorSubChild() {}
+ virtual ~TestFailedCtorSubChild() {}
+
+ protected:
+ PTestFailedCtorSubsubChild* AllocPTestFailedCtorSubsubChild();
+ bool DeallocPTestFailedCtorSubsubChild(PTestFailedCtorSubsubChild* actor);
+
+ virtual void ActorDestroy(ActorDestroyReason why) override;
+};
+
+//-----------------------------------------------------------------------------
+// Grand-descendent
+//
+class TestFailedCtorSubsub : public PTestFailedCtorSubsubParent,
+ public PTestFailedCtorSubsubChild {
+ public:
+ TestFailedCtorSubsub() : mWhy(ActorDestroyReason(-1)), mDealloced(false) {}
+ virtual ~TestFailedCtorSubsub() {}
+
+ virtual void ActorDestroy(ActorDestroyReason why) override { mWhy = why; }
+
+ ActorDestroyReason mWhy;
+ bool mDealloced;
+};
+
+} // namespace _ipdltest
+} // namespace mozilla
+
+#endif // ifndef mozilla_ipdltest_TestFailedCtor_h