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.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/ipc/ipdl/test/cxx/TestFailedCtor.h b/ipc/ipdl/test/cxx/TestFailedCtor.h
new file mode 100644
index 000000000..97f9013cc
--- /dev/null
+++ b/ipc/ipdl/test/cxx/TestFailedCtor.h
@@ -0,0 +1,136 @@
+#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
+{
+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:
+ virtual PTestFailedCtorSubParent* AllocPTestFailedCtorSubParent() override;
+ virtual bool DeallocPTestFailedCtorSubParent(PTestFailedCtorSubParent* actor) override;
+
+ virtual void ActorDestroy(ActorDestroyReason why) override
+ {
+ if (AbnormalShutdown != why)
+ fail("unexpected destruction!");
+ passed("ok");
+ QuitParent();
+ }
+};
+
+
+class TestFailedCtorChild :
+ public PTestFailedCtorChild
+{
+public:
+ TestFailedCtorChild() { }
+ virtual ~TestFailedCtorChild() { }
+
+protected:
+ virtual PTestFailedCtorSubChild* AllocPTestFailedCtorSubChild() override;
+
+ virtual bool AnswerPTestFailedCtorSubConstructor(PTestFailedCtorSubChild* actor) override;
+
+ virtual bool DeallocPTestFailedCtorSubChild(PTestFailedCtorSubChild* actor) override;
+
+ 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
+{
+public:
+ TestFailedCtorSubParent() : mOne(nullptr), mTwo(nullptr), mThree(nullptr) { }
+ virtual ~TestFailedCtorSubParent();
+
+protected:
+ virtual PTestFailedCtorSubsubParent* AllocPTestFailedCtorSubsubParent() override;
+
+ virtual bool DeallocPTestFailedCtorSubsubParent(PTestFailedCtorSubsubParent* actor) override;
+ virtual bool RecvSync() override { return true; }
+
+ virtual void ActorDestroy(ActorDestroyReason why) override;
+
+ TestFailedCtorSubsub* mOne;
+ TestFailedCtorSubsub* mTwo;
+ TestFailedCtorSubsub* mThree;
+};
+
+
+class TestFailedCtorSubChild :
+ public PTestFailedCtorSubChild
+{
+public:
+ TestFailedCtorSubChild() { }
+ virtual ~TestFailedCtorSubChild() { }
+
+protected:
+ virtual PTestFailedCtorSubsubChild* AllocPTestFailedCtorSubsubChild() override;
+ virtual bool DeallocPTestFailedCtorSubsubChild(PTestFailedCtorSubsubChild* actor) override;
+
+ 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;
+};
+
+
+}
+}
+
+#endif // ifndef mozilla_ipdltest_TestFailedCtor_h