public void RemoveRegisteredDelegates()
        {
            MockDelegateTarget mockDelegateTarget1 = new MockDelegateTarget();
            MockDelegateTarget mockDelegateTarget2 = new MockDelegateTarget();

            var weakMulticastDelegate = new WeakMulticastDelegate <Action <object> >();

            weakMulticastDelegate.Add(mockDelegateTarget1.DelegateMethod);
            weakMulticastDelegate.Add(mockDelegateTarget2.DelegateMethod);
            weakMulticastDelegate.Add(mockDelegateTarget1.DelegateMethod2);
            weakMulticastDelegate.Add(mockDelegateTarget2.DelegateMethod2);
            weakMulticastDelegate.Add(MockStaticDelegateTarget.DelegateMethod);

            weakMulticastDelegate.Remove(mockDelegateTarget1.DelegateMethod);
            weakMulticastDelegate.Remove(mockDelegateTarget1.DelegateMethod); // Remove twice
            weakMulticastDelegate.Remove(mockDelegateTarget2.DelegateMethod);
            weakMulticastDelegate.Remove(mockDelegateTarget2.DelegateMethod2);
            weakMulticastDelegate.Remove(MockStaticDelegateTarget.DelegateMethod);

            MockStaticDelegateTarget.Clear();
            object parameter = new object();

            weakMulticastDelegate.Invoke(parameter);

            Assert.IsFalse(mockDelegateTarget1.DelegateCalled);
            Assert.IsFalse(mockDelegateTarget2.DelegateCalled);
            Assert.IsTrue(mockDelegateTarget1.DelegateCalled2);
            Assert.IsFalse(mockDelegateTarget2.DelegateCalled2);
            Assert.IsFalse(MockStaticDelegateTarget.DelegateCalled);
            Assert.AreSame(parameter, mockDelegateTarget1.DelegateParameter2);
        }
Esempio n. 2
0
        public void RetrieveDelegateOfStaticMethod()
        {
            var weakDelegate = new WeakDelegate <Action <object> >(MockStaticDelegateTarget.DelegateMethod);

            MockStaticDelegateTarget.Clear();
            object   dummyParameter = new object();
            Delegate d = weakDelegate.Delegate;

            d.DynamicInvoke(dummyParameter);
            Assert.IsTrue(MockStaticDelegateTarget.DelegateCalled);
            Assert.AreSame(dummyParameter, MockStaticDelegateTarget.DelegateParameter);
        }
Esempio n. 3
0
        public void IsAlwaysValidForStaticMethods()
        {
            var weakDelegate = new WeakDelegate <Action <object> >(MockStaticDelegateTarget.DelegateMethod);

            GC.Collect();
            Assert.IsTrue(weakDelegate.IsAlive);

            MockStaticDelegateTarget.Clear();
            object dummyParameter = new object();

            weakDelegate.Invoke(dummyParameter);
            Assert.IsTrue(MockStaticDelegateTarget.DelegateCalled);
            Assert.AreSame(dummyParameter, MockStaticDelegateTarget.DelegateParameter);
        }