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); }
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); }
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); }