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.
        }
Beispiel #2
0
        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);
        }
Beispiel #5
0
        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.
        }
Beispiel #7
0
        public void RetrieveDelegateOfGarbageCollectedObject()
        {
            MockDelegateTarget mockDelegateTarget = new MockDelegateTarget();
              var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod);

              mockDelegateTarget = null;
              GC.Collect();

              Assert.IsNull(weakDelegate.Delegate);
        }
Beispiel #8
0
        public void IsInvalidWhenTargetIsCollected()
        {
            MockDelegateTarget mockDelegateTarget = new MockDelegateTarget();
              var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod);

              mockDelegateTarget = null;
              GC.Collect();

              Assert.IsFalse(weakDelegate.IsAlive);
        }
Beispiel #9
0
        public void RetrieveDelegateOfGarbageCollectedObject()
        {
            MockDelegateTarget mockDelegateTarget = new MockDelegateTarget();
            var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod);

            mockDelegateTarget = null;
            GC.Collect();

            Assert.IsNull(weakDelegate.Delegate);
        }
Beispiel #10
0
        public void IsInvalidWhenTargetIsCollected()
        {
            MockDelegateTarget mockDelegateTarget = new MockDelegateTarget();
            var weakDelegate = new WeakDelegate <Action <object> >(mockDelegateTarget.DelegateMethod);

            mockDelegateTarget = null;
            GC.Collect();

            Assert.IsFalse(weakDelegate.IsAlive);
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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));
        }
Beispiel #17
0
        public void RetrieveDelegateTypeOfObjectMethod()
        {
            MockDelegateTarget mockDelegateTarget = new MockDelegateTarget();
              var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod);

              Assert.AreEqual(typeof(Action<object>), weakDelegate.DelegateType);
        }
Beispiel #18
0
        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);
        }
Beispiel #19
0
 public void MethodInfo()
 {
     MockDelegateTarget mockDelegateTarget = new MockDelegateTarget();
       var weakDelegate = new WeakDelegate<Action<object>>(mockDelegateTarget.DelegateMethod);
       Assert.AreEqual("DelegateMethod", weakDelegate.MethodInfo.Name);
 }
Beispiel #20
0
 internal MockTarget(MockDelegateTarget mockDelegateTarget, MethodCallExpression methodCallExpression)
 {
     this.mockDelegateTarget   = mockDelegateTarget;
     this.methodCallExpression = methodCallExpression;
 }