public void GCRemovesDelegates() { 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); Assert.AreEqual(4, weakMulticastDelegate.Count); mockDelegateTarget2 = null; GC.Collect(); object parameter = new object(); weakMulticastDelegate.Invoke(parameter); Assert.AreEqual(2, weakMulticastDelegate.Count); Assert.IsTrue(mockDelegateTarget1.DelegateCalled); Assert.IsTrue(mockDelegateTarget1.DelegateCalled2); Assert.AreSame(parameter, mockDelegateTarget1.DelegateParameter); Assert.AreSame(parameter, mockDelegateTarget1.DelegateParameter2); mockDelegateTarget1 = null; GC.Collect(); weakMulticastDelegate.Remove(null); Assert.AreEqual(0, weakMulticastDelegate.Count); weakMulticastDelegate.Invoke(parameter); // Dummy invoke on empty WeakDelegateManager. }
public void MethodInfo() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); Assert.AreEqual("DelegateMethod", weakDelegate.MethodInfo.Name); }
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 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 RetrieveDelegateTypeOfObjectMethod() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); Assert.AreEqual(typeof(Action <object>), weakDelegate.DelegateType); }
public void GCRemovesDelegates() { 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); Assert.AreEqual(4, weakMulticastDelegate.Count); mockDelegateTarget2 = null; GC.Collect(); object parameter = new object(); weakMulticastDelegate.Invoke(parameter); Assert.AreEqual(2, weakMulticastDelegate.Count); Assert.IsTrue(mockDelegateTarget1.DelegateCalled); Assert.IsTrue(mockDelegateTarget1.DelegateCalled2); Assert.AreSame(parameter, mockDelegateTarget1.DelegateParameter); Assert.AreSame(parameter, mockDelegateTarget1.DelegateParameter2); mockDelegateTarget1 = null; GC.Collect(); weakMulticastDelegate.Remove(null); Assert.AreEqual(0, weakMulticastDelegate.Count); weakMulticastDelegate.Invoke(parameter); // Dummy invoke on empty WeakDelegateManager. }
public void RetrieveDelegateOfGarbageCollectedObject() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); mockDelegateTarget = null; GC.Collect(); Assert.IsNull(weakDelegate.Delegate); }
public void IsInvalidWhenTargetIsCollected() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); mockDelegateTarget = null; GC.Collect(); Assert.IsFalse(weakDelegate.IsAlive); }
public void RetrieveDelegateOfGarbageCollectedObject() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); mockDelegateTarget = null; GC.Collect(); Assert.IsNull(weakDelegate.Delegate); }
public void IsInvalidWhenTargetIsCollected() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); mockDelegateTarget = null; GC.Collect(); Assert.IsFalse(weakDelegate.IsAlive); }
public void TargetReference() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); Assert.AreEqual(mockDelegateTarget, weakDelegate.TargetReference.Target); mockDelegateTarget = null; GC.Collect(); Assert.IsNull(weakDelegate.TargetReference.Target); }
public void RetrieveDelegateOfObjectMethod() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); object dummyParameter = new object(); Delegate d = weakDelegate.Delegate; d.DynamicInvoke(dummyParameter); Assert.IsTrue(mockDelegateTarget.DelegateCalled); Assert.AreSame(dummyParameter, mockDelegateTarget.DelegateParameter); }
public void RetrieveDelegateOfObjectMethod() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); object dummyParameter = new object(); Delegate d = weakDelegate.Delegate; d.DynamicInvoke(dummyParameter); Assert.IsTrue(mockDelegateTarget.DelegateCalled); Assert.AreSame(dummyParameter, mockDelegateTarget.DelegateParameter); }
public void IsValidAsLongAsTargetIsAlive() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); GC.Collect(); Assert.IsTrue(weakDelegate.IsAlive); object dummyParameter = new object(); weakDelegate.Invoke(dummyParameter); Assert.IsTrue(mockDelegateTarget.DelegateCalled); Assert.AreSame(dummyParameter, mockDelegateTarget.DelegateParameter); }
public void IsValidAsLongAsTargetIsAlive() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod); GC.Collect(); Assert.IsTrue(weakDelegate.IsAlive); object dummyParameter = new object(); weakDelegate.Invoke(dummyParameter); Assert.IsTrue(mockDelegateTarget.DelegateCalled); Assert.AreSame(dummyParameter, mockDelegateTarget.DelegateParameter); }
public static MockTarget Setup(this StaticMock staticMock, Expression <Action> target) { var methodCallExpression = (MethodCallExpression)target.Body; var method = methodCallExpression.Method; var mockDelegate = staticMock.GetMockDelegate(method); MockDelegateTarget mockDelegateTarget; if (!mockDelegate.IsMocked) { mockDelegateTarget = new MockDelegateTarget(method); mockDelegate.Delegate = mockDelegateTarget.CreateDelegateFor(mockDelegate.DelegateType); } else { mockDelegateTarget = (MockDelegateTarget)mockDelegate.Delegate.Target; } return(new MockTarget(mockDelegateTarget, methodCallExpression)); }
public void RetrieveDelegateTypeOfObjectMethod() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); Assert.AreEqual(typeof(Action<object>), weakDelegate.DelegateType); }
public void TargetReference() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); Assert.AreEqual(mockDelegateTarget, weakDelegate.TargetReference.Target); mockDelegateTarget = null; GC.Collect(); Assert.IsNull(weakDelegate.TargetReference.Target); }
public void MethodInfo() { MockDelegateTarget mockDelegateTarget = new MockDelegateTarget(); var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod); Assert.AreEqual("DelegateMethod", weakDelegate.MethodInfo.Name); }
internal MockTarget(MockDelegateTarget mockDelegateTarget, MethodCallExpression methodCallExpression) { this.mockDelegateTarget = mockDelegateTarget; this.methodCallExpression = methodCallExpression; }