public void TestUnsubscribeWorks() { TargetClass target = new TargetClass(); MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>(); testInst.Add(target.TestMethod); testInst.GetDelegate()(); Assert.AreEqual(1, target.CallCount); testInst.Remove(target.TestMethod); var d = testInst.GetDelegate(); Assert.IsNull(d); }
public void TestEmptyDelegateNotFail() { MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>(); var d = testInst.GetDelegate(); Assert.IsNull(d); }
public void TestCallStrong() { int callCount = 0; MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>(); testInst.Add(() => callCount++); var d = testInst.GetDelegate(); Assert.IsNotNull(d); d(); Assert.AreEqual(1, callCount); }
public void TestWeakRef() { MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>(); Subscribe(testInst); for (int i = 0; i < 10; i++) { GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } var d = testInst.GetDelegate(); Assert.IsNull(d); }