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 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 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 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 void TearDown() { bool wasLeaking = EventBetter.Test_IsLeaking; EventBetter.Clear(); Assert.IsFalse(wasLeaking); }
public void TestWorker() { var worker = GameObject.Find("EventBetterWorker"); Assert.IsFalse(worker); EventBetter.Listen(this, (TestMessage o) => { }); worker = GameObject.Find("EventBetterWorker"); Assert.IsTrue(worker); Assert.AreEqual(worker, EventBetter.Test_Worker?.gameObject); worker.SetActive(false); Assert.Throws <InvalidOperationException>(() => EventBetter.Listen(this, (TestMessage o) => { })); worker.SetActive(true); EventBetter.Listen(this, (TestMessage o) => { }); worker.GetComponent <MonoBehaviour>().enabled = false; Assert.Throws <InvalidOperationException>(() => EventBetter.Listen(this, (TestMessage o) => { })); worker.GetComponent <MonoBehaviour>().enabled = true; EventBetter.Listen(this, (TestMessage o) => { }); DestroyImmediate(worker); EventBetter.Listen(this, (TestMessage o) => { }); worker = GameObject.Find("EventBetterWorker"); Assert.IsTrue(worker); Assert.AreEqual(worker, EventBetter.Test_Worker?.gameObject); }
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)); } }
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())); }
void Update() { EventBetter.Raise(new TextMessage() { text = "Hello World!" }); }
IEnumerator Coro() { var listener = EventBetter.ListenWait <TextMessage>(); yield return(listener); Debug.Log(listener.First.text, this); }
public void Dispose() { if (handler != null) { EventBetter.UnlistenHandler(typeof(MessageType), handler); handler = null; } }
private void OnCollisionEnter(Collision collision) { EventBetter.Raise(new CollisionMessage() { reporter = GetComponent <Collider>(), collision = collision, }); }
public void NestedDifferentContext(int baseValue) { EventBetter.Listen(this, (TestMessage o) => { InstanceHandle(null, null); ++nestedInvocations; }); }
public void TestSelfAdv() { var date = System.DateTime.Now.Date; var str = "TestString"; EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(date, System.DateTime.Now.Date)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(str, "TestString")); }
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); }
public void TestStructStatic() { var someStruct = new SomeStruct() { Value = 123 }; EventBetter.Listen(this, (TestMessage o) => StaticHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => StaticHandle(someStruct, new SomeStruct() { Value = 123 })); EventBetter.Listen(this, (TestMessage o) => StaticHandle(someStruct.Value, 123)); }
public void TestSomeOtherHost() { { var go = new GameObject("blah"); go.transform.SetParent(transform); EventBetter.Listen(go, (TestMessage o) => StaticHandle(go.name, "blah")); } { var go = new GameObject("blah2"); go.transform.SetParent(transform); EventBetter.Listen(go, (TestMessage o) => InstanceHandle(go.name, "blah2")); } }
public void TestClassStatic() { var someClass = new SomeClass() { Value = 456 }; EventBetter.Listen(this, (TestMessage o) => StaticHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => StaticHandle(someClass, new SomeClass() { Value = 456 })); EventBetter.Listen(this, (TestMessage o) => StaticHandle(someClass.Value, 456)); }
public void TestClass() { var someClass = new SomeClass() { Value = 456 }; // this captured implicitly EventBetter.Listen(this, (TestMessage o) => InstanceHandle(null, null)); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(someClass, new SomeClass() { Value = 456 })); EventBetter.Listen(this, (TestMessage o) => InstanceHandle(someClass.Value, 456)); }
public static async Task <MessageType> ListenAsync <MessageType>() { var tcs = new TaskCompletionSource <MessageType>(); var handler = RegisterInternal <object, MessageType>(s_entries, (msg) => tcs.SetResult(msg), HandlerFlags.DontInvokeIfAddedInAHandler); try { return(await tcs.Task); } finally { EventBetter.UnlistenHandler(typeof(MessageType), handler); } }
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); }
void Awake() { EventBetter.Listen <SimpleConsumerNoLambda, TextMessage>(this, HandlePrintMessage, once: true); }
private void Update() { EventBetter.Listen(this, handler); EventBetter.UnlistenAll(this); }
private void Awake() { EventBetter.Listen(this, (CollisionMessage msg) => LogCollision(msg.reporter, msg.collision)); }