public void TestNestedRaiseSimpleManual() { int nestedCalls = 0; int totalInvocations = 0; var handler = EventBetter.ListenManual((TestMessage o) => { ++totalInvocations; InstanceHandle(null, null); try { ++nestedCalls; if (nestedCalls < 10) { EventBetter.Raise(new TestMessage()); } } finally { --nestedCalls; } }); try { EventBetter.Raise(new TestMessage()); Assert.AreEqual(10, totalInvocations); } finally { handler.Dispose(); } }
public IEnumerator TestCoroutineCapture() { { // if nothing is captured - works yield return(null); EventBetter.Listen(this, (TestMessage msg) => { }); Assert.IsTrue(EventBetter.UnlistenAll(this)); } { // if nothing is captured - works int count = 0; yield return(null); using (var listener = EventBetter.ListenManual((TestMessage msg) => InstanceHandle(++count, 1))) { Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(1, count); } Assert.IsFalse(EventBetter.Raise(new TestMessage())); Assert.AreEqual(1, count); } { // if local coroutine variables captured - won't int count = 0; yield return(null); EventBetter.Listen(this, (TestMessage msg) => InstanceHandle(++count, 1), once: true); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(1, count); } }
public void TestNestedRegisterSimple() { int totalInvocations = 0; EventBetter.Listen(this, (TestMessage o) => { InstanceHandle(null, null); ++totalInvocations; EventBetter.Listen(this, (TestMessage oo) => { InstanceHandle(null, null); ++totalInvocations; }); }); EventBetter.Raise(new TestMessage()); Assert.AreEqual(2, totalInvocations); EventBetter.Raise(new TestMessage()); Assert.AreEqual(5, totalInvocations); EventBetter.Raise(new TestMessage()); Assert.AreEqual(9, totalInvocations); }
public void TestNestedRegisterSimpleManual() { int totalInvocations = 0; manualHandlers.Add(EventBetter.ListenManual((TestMessage o) => { InstanceHandle(null, null); ++totalInvocations; manualHandlers.Add(EventBetter.ListenManual((TestMessage oo) => { InstanceHandle(null, null); ++totalInvocations; })); })); EventBetter.Raise(new TestMessage()); Assert.AreEqual(2, totalInvocations); EventBetter.Raise(new TestMessage()); Assert.AreEqual(5, totalInvocations); EventBetter.Raise(new TestMessage()); Assert.AreEqual(9, totalInvocations); foreach (var handler in manualHandlers) { handler.Dispose(); } }
public void TestUnregister() { Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Raise(new TestMessage())); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); Assert.AreEqual(true, EventBetter.Raise(new TestMessage())); Assert.AreEqual(true, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Raise(new TestMessage())); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); Assert.AreEqual(true, EventBetter.Raise(new TestMessage())); Assert.AreEqual(true, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Raise(new TestMessage())); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); Assert.AreEqual(true, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Unlisten <TestMessage>(this)); Assert.AreEqual(false, EventBetter.Raise(new TestMessage())); }
public void TestOnce() { { int count = 0; EventBetter.Listen(this, (TestMessage o) => ++ count); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(2, count); Assert.IsTrue(EventBetter.UnlistenAll(this)); } { int count = 0; EventBetter.Listen(this, (TestMessage o) => ++ count, once: true); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.IsFalse(EventBetter.Raise(new TestMessage())); Assert.AreEqual(1, count); Assert.IsFalse(EventBetter.UnlistenAll(this)); } { int count = 0; EventBetter.Listen(this, (TestMessage o) => ++ count, once: true); EventBetter.Listen(this, (TestMessage o) => ++ count, once: true); EventBetter.Listen(this, (TestMessage o) => ++ count, once: true); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(3, count); Assert.IsFalse(EventBetter.Raise(new TestMessage())); Assert.IsFalse(EventBetter.UnlistenAll(this)); } }
void Update() { EventBetter.Raise(new TextMessage() { text = "Hello World!" }); }
private void OnCollisionEnter(Collision collision) { EventBetter.Raise(new CollisionMessage() { reporter = GetComponent <Collider>(), collision = collision, }); }
public void TestNestedMessedUp() { int nestedCalls = 0; int totalInvocations = 0; int dummyMessage2Invocations = 0; EventBetter.Listen(this, (TestMessage2 o) => { InstanceHandle(null, null); ++dummyMessage2Invocations; EventBetter.Unlisten <TestMessage>(this); }); int dummyMessage3Invocations = 0; EventBetter.Listen(this, (TestMessage3 o) => { InstanceHandle(null, null); ++dummyMessage3Invocations; EventBetter.Unlisten <TestMessage3>(this); EventBetter.Raise(new TestMessage()); }); EventBetter.Listen(this, (TestMessage o) => { InstanceHandle(null, null); ++totalInvocations; ++nestedCalls; if (nestedCalls >= 10) { EventBetter.Raise(new TestMessage2()); EventBetter.Raise(new TestMessage3()); EventBetter.Raise(new TestMessage2()); EventBetter.Raise(new TestMessage3()); EventBetter.Raise(new TestMessage2()); EventBetter.Raise(new TestMessage3()); } EventBetter.Raise(new TestMessage()); }); EventBetter.Raise(new TestMessage()); Assert.AreEqual(10, totalInvocations); Assert.AreEqual(3, dummyMessage2Invocations); Assert.AreEqual(1, dummyMessage3Invocations); }
private IEnumerator DoCoroTest(System.Func <TestBehaviour, object> doStuff, bool someHandlersRemain = true) { var go = new GameObject("Test", typeof(TestBehaviour)); var comp = go.GetComponent <TestBehaviour>(); try { var result = doStuff(comp); if (result != null) { yield return(result); result = null; } Assert.AreEqual(someHandlersRemain, EventBetter.Raise(new TestMessage())); Collect(); Assert.AreEqual(someHandlersRemain, EventBetter.Raise(new TestMessage())); } finally { Object.DestroyImmediate(comp, true); Object.DestroyImmediate(go, true); } // after the destroy there should be no receivers Assert.IsFalse(EventBetter.Raise(new TestMessage())); { var weak = new System.WeakReference(comp); Assert.IsTrue(weak.IsAlive); go = null; comp = null; for (int i = 0; i < 10; ++i) { yield return(null); Collect(); } Assert.IsFalse(weak.IsAlive, "So we have a leak..."); } }
public void TestIfActiveAndEnabled() { int count = 0; EventBetter.Listen(this, (TestMessage o) => ++ count); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(1, count); enabled = false; Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(2, count); enabled = true; gameObject.SetActive(false); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(3, count); gameObject.SetActive(true); Assert.IsTrue(EventBetter.Unlisten <TestMessage>(this)); Assert.IsFalse(EventBetter.Raise(new TestMessage())); Assert.AreEqual(3, count); EventBetter.Listen(this, (TestMessage o) => ++ count, exculdeInactive: true); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(4, count); enabled = false; Assert.IsFalse(EventBetter.Raise(new TestMessage())); Assert.AreEqual(4, count); enabled = true; Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(5, count); gameObject.SetActive(false); Assert.IsFalse(EventBetter.Raise(new TestMessage())); Assert.AreEqual(5, count); gameObject.SetActive(true); Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.AreEqual(6, count); }
public void TestMutableLambda() { { int startValue = 100; EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue++, 100)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue++, 101)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue++, 102)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue++, 103)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue++, 104)); } { int startValue = 200; EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue, 210)); startValue += 10; EventBetter.Listen(this, (TestMessage o) => InstanceHandle(startValue, 210)); } Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.IsTrue(EventBetter.UnlistenAll(this)); }
public IEnumerator TestListenWait() { using (var listener = EventBetter.ListenWait <TestMessage>()) { Assert.IsNull(listener.Messages); Assert.IsNull(listener.First); StartCoroutine(WaitAndThen(() => { Assert.IsTrue(EventBetter.Raise(new TestMessage())); Assert.IsTrue(EventBetter.Raise(new TestMessage())); })); yield return(listener); Assert.AreEqual(2, listener.Messages.Count); Assert.IsNotNull(listener.First); Assert.AreEqual(listener.First, listener.Messages[0]); Assert.IsFalse(EventBetter.Raise(new TestMessage())); } }
public void TestNestedRaiseContexts() { int totalInvocations = 0; nestedInvocations = 0; EventBetter.Listen(this, (TestMessage o) => { InstanceHandle(null, null); ++totalInvocations; NestedDifferentContext(totalInvocations); }); EventBetter.Raise(new TestMessage()); Assert.AreEqual(2, totalInvocations + nestedInvocations); EventBetter.Raise(new TestMessage()); Assert.AreEqual(5, totalInvocations + nestedInvocations); EventBetter.Raise(new TestMessage()); Assert.AreEqual(9, totalInvocations + nestedInvocations); }
public void RegisterManual() { int someValue = 666; var disp1 = EventBetter.ListenManual((TestMessage msg) => someValue++); var disp2 = EventBetter.ListenManual((TestMessage msg) => someValue++); Assert.AreEqual(true, EventBetter.Raise(new TestMessage())); Assert.AreEqual(668, someValue); disp1.Dispose(); Assert.AreEqual(true, EventBetter.Raise(new TestMessage())); Assert.AreEqual(669, someValue); // whether double dispose breaks anything disp1.Dispose(); Assert.AreEqual(true, EventBetter.Raise(new TestMessage())); Assert.AreEqual(670, someValue); disp2.Dispose(); Assert.AreEqual(false, EventBetter.Raise(new TestMessage())); Assert.AreEqual(670, someValue); }
private void Update() { EventBetter.Raise(message); }