public void BindTest() { EventHolder holder = new EventHolder(); EventCall call = new EventCall(); var handle1 = call.Bind(holder); //イベント Assert.IsTrue(call.Message(TestEvent.Event1)); Assert.AreEqual(holder.value, "event1"); //型が違う Assert.IsFalse(call.Message(TestEvent.Event1, "test")); Assert.AreNotEqual(holder.value, "test"); //イベントを発火 Assert.IsTrue(call.Message(TestEvent.Event2, "event2")); Assert.AreEqual(holder.value, "event2"); //再びバインドするため二回イベント呼ばれる call.Bind(holder); holder.value = ""; Assert.IsTrue(call.Broadcast(TestEvent.Event3, 123)); Assert.AreEqual(holder.value, "123123"); //一つ目のバインドを解除するので一回だけ呼ばれる handle1.Dispose(); holder.value = ""; Assert.IsTrue(call.Broadcast(TestEvent.Event3, 123)); Assert.AreEqual(holder.value, "123"); }
public void MessageTest5() { //実行中に登録したイベントは発火されない EventCall call = new EventCall(); System.Action action = null; action = () => { call.Subscribe("Test", action); }; action(); call.Broadcast("Test"); call.Broadcast("Test"); call.Broadcast("Test"); }
public void MessageTest3() { EventCall call = new EventCall(); int count1 = 0; int count2 = 0; int count3 = 0; var path1 = call.Subscribe(TestEvent.Event1, () => count1++); var path2 = call.Subscribe(TestEvent.Event1, () => count2++); var path3 = call.Subscribe(TestEvent.Event1, () => count3++); //メッセージは一番最初に登録された物が優先される for (int i = 0; i < 5; i++) { Assert.IsTrue(call.Message(TestEvent.Event1)); Assert.AreEqual(count1, 1 + i); Assert.AreEqual(count2, 0); Assert.AreEqual(count3, 0); } //一つ解除する path1.Dispose(); //ブロードキャストは全ての登録イベントに発火する for (int i = 0; i < 5; i++) { Assert.IsTrue(call.Broadcast(TestEvent.Event1)); Assert.AreEqual(count1, 5); Assert.AreEqual(count2, 1 + i); Assert.AreEqual(count3, 1 + i); } path2.Dispose(); path3.Dispose(); //全て解除すると発火されない for (int i = 0; i < 5; i++) { Assert.IsFalse(call.Broadcast(TestEvent.Event1)); Assert.AreEqual(count1, 5); Assert.AreEqual(count2, 5); Assert.AreEqual(count3, 5); } }