include protocol PTestActorPunningPunned;
include protocol PTestActorPunningSub;
include "mozilla/_ipdltest/IPDLUnitTestUtils.h";

using struct mozilla::_ipdltest::Bad from "mozilla/_ipdltest/IPDLUnitTestUtils.h";

namespace mozilla {
namespace _ipdltest {

protocol PTestActorPunning {
    manages PTestActorPunningPunned;
    manages PTestActorPunningSub;

child:
    async Start();

parent:
    async PTestActorPunningPunned();
    async PTestActorPunningSub();
    async Pun(PTestActorPunningSub a, Bad bad);
    async __delete__();


state PING:
    send Start goto CONSTRUCTING;

state CONSTRUCTING:
    recv PTestActorPunningPunned goto CONSTRUCTING;
    recv PTestActorPunningSub goto CONSTRUCTING;
    recv Pun goto DEAD;
    // We never make it past this transition, --> error.

state DEAD:
    recv __delete__;
};

} // namespace mozilla
} // namespace _ipdltest