public void TestEmptyDelegateNotFail() { MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>(); var d = testInst.GetDelegate(); Assert.IsNull(d); }
public void TestDoubleSubscribeRemove() { TargetClass target = new TargetClass(); MulticastWeakDelegate <Action> testInst = new MulticastWeakDelegate <Action>(); testInst.Add(target.TestMethod); testInst.Add(target.TestMethod); testInst.Remove(target.TestMethod); testInst.GetDelegate()(); Assert.AreEqual(1, target.CallCount); }
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); }
private void Subscribe(MulticastWeakDelegate <Action> weakDeleg) { TargetClass target = new TargetClass(); weakDeleg.Add(new Action(target.TestMethod)); }