public void InjectRemove() { var refs = InjectRemove_Core(); EnqueueLastCallback(() => { MemoryLeaksHelper.CollectOptional(refs); MemoryLeaksHelper.EnsureCollected(refs); }); }
public void ViewModelClosingEvent() { var refs = ViewModelClosingEvent_Core(); EnqueueLastCallback(() => { MemoryLeaksHelper.CollectOptional(refs); MemoryLeaksHelper.EnsureCollected(refs); }); }
public void NavigatedEvent_NavigatedAwayEvent() { var refs = NavigatedEvent_NavigatedAwayEvent_Core(); EnqueueLastCallback(() => { MemoryLeaksHelper.CollectOptional(refs); MemoryLeaksHelper.EnsureCollected(refs); }); }
public void KeepTargetReference() { WeakReference t1; var vm = ViewModel.Create1(x => CreateCommand(x), out t1); MemoryLeaksHelper.CollectOptional(t1); Execute(vm.Command, null); Assert.AreEqual(1, ViewModel.ExecuteCount); WeakReference t2; vm = ViewModel.Create2(x => CreateCommand(x), out t2); MemoryLeaksHelper.CollectOptional(t2); Execute(vm.Command, null); Assert.AreEqual(1, ViewModel.ExecuteCount); }
public void PersistentMode_InjectRemove() { object vm = new object(); Func <object> vmFactory = () => vm; WeakReference refVM = new WeakReference(vm); var refs = PersistentMode_InjectRemove_Core(vmFactory, vm); vm = null; vmFactory = null; EnqueueLastCallback(() => { Window.Content = null; MemoryLeaksHelper.CollectOptional(refs); MemoryLeaksHelper.EnsureCollected(refs); MemoryLeaksHelper.CollectOptional(refVM); MemoryLeaksHelper.EnsureCollected(refVM); }); }
void SubscribeUnsubsribeCore(bool passSender, Action <EventOwner, EventArgs> raiseMyEvent1, Action <EventOwner, object, EventArgs> raiseMyEvent2, Action <Subscriber, EventOwner> subscribe, Action <Subscriber, EventOwner> subscribeTwice, Action <Subscriber, EventOwner> unsubscribe) { var e = new EventOwner(); var sender = passSender ? new object() : e; var args = new PropertyChangedEventArgs("Test"); Action raise = () => { if (passSender) { raiseMyEvent2(e, sender, args); } else { raiseMyEvent1(e, args); } }; WeakReference sRef = SubscribeUnsubsribeCoreAlloc(e, sender, args, raise, raiseMyEvent1, raiseMyEvent2, subscribe, subscribeTwice, unsubscribe); MemoryLeaksHelper.CollectOptional(sRef); MemoryLeaksHelper.EnsureCollected(sRef); raise(); }
void SubscribeUnsubsribeCore(bool passSender, Action <EventOwner, EventArgs> raiseMyEvent1, Action <EventOwner, object, EventArgs> raiseMyEvent2, Action <Subscriber, EventOwner> subscribe, Action <Subscriber, EventOwner> subscribeTwice, Action <Subscriber, EventOwner> unsubscribe) { var e = new EventOwner(); var s = new Subscriber(); var sender = passSender ? new object() : e; var args = new PropertyChangedEventArgs("Test"); Action raise = () => { if (passSender) { raiseMyEvent2(e, sender, args); } else { raiseMyEvent1(e, args); } }; subscribe(s, e); raise(); Assert.AreEqual(sender, s.Sender); Assert.AreEqual(args, s.E); Assert.AreEqual(1, s.Count); raise(); Assert.AreEqual(sender, s.Sender); Assert.AreEqual(args, s.E); Assert.AreEqual(2, s.Count); s.Clear(); subscribe(s, e); raise(); Assert.AreEqual(sender, s.Sender); Assert.AreEqual(args, s.E); Assert.AreEqual(2, s.Count); s.Clear(); unsubscribe(s, e); raise(); Assert.AreEqual(sender, s.Sender); Assert.AreEqual(args, s.E); Assert.AreEqual(1, s.Count); s.Clear(); unsubscribe(s, e); raise(); Assert.AreEqual(null, s.Sender); Assert.AreEqual(null, s.E); Assert.AreEqual(0, s.Count); s.Clear(); subscribeTwice(s, e); raise(); Assert.AreEqual(sender, s.Sender); Assert.AreEqual(args, s.E); Assert.AreEqual(2, s.Count); unsubscribe(s, e); unsubscribe(s, e); unsubscribe(s, e); subscribe(s, e); WeakReference sRef = new WeakReference(s); s = null; MemoryLeaksHelper.CollectOptional(sRef); MemoryLeaksHelper.EnsureCollected(sRef); raise(); }