Esempio n. 1
0
        public void ShouldHandleEventWhenBothReferencesAreAlive()
        {
            var alarm  = new Alarm();
            var sleepy = new Sleepy(alarm);

            alarm.Beep();
            alarm.Beep();

            Assert.Equal(2, sleepy.SnoozeCount);
        }
Esempio n. 2
0
        public void SubscriberShouldNotBeUnsubscribedUntilCollection()
        {
            var alarm  = new Alarm();
            var sleepy = new Sleepy(alarm);

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            alarm.Beep();
            alarm.Beep();
            Assert.Equal(2, sleepy.SnoozeCount);
        }
Esempio n. 3
0
        public void ShouldAllowSubscriberReferenceToBeCollected()
        {
            var alarm           = new Alarm();
            var sleepyReference = null as WeakReference;

            new Action(() =>
            {
                // Run this in a delegate to that the local variable gets garbage collected
                var sleepy = new Sleepy(alarm);
                alarm.Beep();
                alarm.Beep();
                Assert.Equal(2, sleepy.SnoozeCount);
                sleepyReference = new WeakReference(sleepy);
            })();

            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();

            Assert.Null(sleepyReference.Target);
        }