예제 #1
0
    public void SubCallTest()
    {
        EventCall root  = new EventCall();
        EventCall call1 = root.SubCall();
        EventCall call2 = root.SubCall();
        EventCall call3 = root.SubCall();
        EventCall call4 = call1.SubCall();
        EventCall call5 = call4.SubCall();
        int       ret   = 0;
        var       path1 = call1.Subscribe(TestEvent.Event1, () => ret = 1);

        call2.Subscribe(TestEvent.Event1, () => ret = 2);
        call3.Subscribe(TestEvent.Event1, () => ret = 3);
        call4.Subscribe(TestEvent.Event1, () => ret = 4);
        call5.Subscribe(TestEvent.Event1, () => ret = 5);

        //メッセージが伝播してcall1優先される
        Assert.IsTrue(root.Message(TestEvent.Event1));
        Assert.AreEqual(ret, 1);

        //メッセージが優先される
        Assert.IsTrue(call2.Message(TestEvent.Event1));
        Assert.AreEqual(ret, 2);
        Assert.IsTrue(call3.Message(TestEvent.Event1));
        Assert.AreEqual(ret, 3);

        //パスがなくなったので、サブコールのイベントが呼ばれる
        path1.Dispose();
        Assert.IsTrue(root.Message(TestEvent.Event1));
        Assert.AreEqual(ret, 4);

        //子のサブコールも解放される
        call1.Dispose();
        Assert.IsFalse(call5.Message(TestEvent.Event1));
        Assert.AreEqual(ret, 4);

        Assert.IsTrue(root.Message(TestEvent.Event1));
        Assert.AreEqual(ret, 2);
    }