示例#1
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();
            }
        }
示例#2
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);
        }
示例#3
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);
            }
        }
示例#4
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();
            }
        }
示例#5
0
    public void TearDown()
    {
        bool wasLeaking = EventBetter.Test_IsLeaking;

        EventBetter.Clear();
        Assert.IsFalse(wasLeaking);
    }
示例#6
0
        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);
        }
示例#7
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));
     }
 }
示例#8
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()));
        }
示例#9
0
 void Update()
 {
     EventBetter.Raise(new TextMessage()
     {
         text = "Hello World!"
     });
 }
示例#10
0
    IEnumerator Coro()
    {
        var listener = EventBetter.ListenWait <TextMessage>();

        yield return(listener);

        Debug.Log(listener.First.text, this);
    }
示例#11
0
 public void Dispose()
 {
     if (handler != null)
     {
         EventBetter.UnlistenHandler(typeof(MessageType), handler);
         handler = null;
     }
 }
示例#12
0
 private void OnCollisionEnter(Collision collision)
 {
     EventBetter.Raise(new CollisionMessage()
     {
         reporter  = GetComponent <Collider>(),
         collision = collision,
     });
 }
示例#13
0
 public void NestedDifferentContext(int baseValue)
 {
     EventBetter.Listen(this, (TestMessage o) =>
     {
         InstanceHandle(null, null);
         ++nestedInvocations;
     });
 }
示例#14
0
        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"));
        }
示例#15
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);
        }
示例#16
0
        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));
        }
示例#17
0
        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"));
            }
        }
示例#18
0
        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));
        }
示例#19
0
        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));
        }
示例#20
0
    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);
        }
    }
示例#21
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...");
        }
    }
示例#22
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);
        }
示例#23
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));
        }
示例#24
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()));
            }
        }
示例#25
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);
        }
示例#26
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);
    }
示例#27
0
 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);
 }
示例#30
0
 private void Awake()
 {
     EventBetter.Listen(this, (CollisionMessage msg) => LogCollision(msg.reporter, msg.collision));
 }