Example #1
0
        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();
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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();
            }
        }
Example #5
0
        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()));
        }
Example #6
0
 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));
     }
 }
Example #7
0
 void Update()
 {
     EventBetter.Raise(new TextMessage()
     {
         text = "Hello World!"
     });
 }
 private void OnCollisionEnter(Collision collision)
 {
     EventBetter.Raise(new CollisionMessage()
     {
         reporter  = GetComponent <Collider>(),
         collision = collision,
     });
 }
Example #9
0
        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);
        }
Example #10
0
    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...");
        }
    }
Example #11
0
        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);
        }
Example #12
0
        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));
        }
Example #13
0
        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()));
            }
        }
Example #14
0
        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);
        }
Example #15
0
    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);
    }
Example #16
0
 private void Update()
 {
     EventBetter.Raise(message);
 }