public void CommandItemMemoryLeaksTest()
        {
            var command = new MockCommand(1);
            var commandItemReference = CreateCommandItemReference(command);

            MemoryLeaksHelper.EnsureCollected(new[] { commandItemReference });
        }
示例#2
0
        public void InjectRemove()
        {
            var refs = InjectRemove_Core();

            EnqueueLastCallback(() => {
                MemoryLeaksHelper.CollectOptional(refs);
                MemoryLeaksHelper.EnsureCollected(refs);
            });
        }
示例#3
0
        public void ViewModelClosingEvent()
        {
            var refs = ViewModelClosingEvent_Core();

            EnqueueLastCallback(() => {
                MemoryLeaksHelper.CollectOptional(refs);
                MemoryLeaksHelper.EnsureCollected(refs);
            });
        }
示例#4
0
        public void NavigatedEvent_NavigatedAwayEvent()
        {
            var refs = NavigatedEvent_NavigatedAwayEvent_Core();

            EnqueueLastCallback(() => {
                MemoryLeaksHelper.CollectOptional(refs);
                MemoryLeaksHelper.EnsureCollected(refs);
            });
        }
示例#5
0
        public void ReleaseTarget_CanExecutePrivate()
        {
            MemoryViewModel commandContainer = new MemoryViewModel();
            WeakReference   reference        = new WeakReference(commandContainer);

            commandContainer.CreatePrivateCommand((x1, x2) => CreateCommand(x1, x2));
            commandContainer.CreateInternalCommand((x1, x2) => CreateCommand(x1, x2));
            Assert.IsTrue(reference.IsAlive);
            commandContainer = null;
            MemoryLeaksHelper.EnsureCollected(reference);
        }
示例#6
0
        public void CommandConsumerMemoryLeakTest()
        {
            Func <ICommand, WeakReference> createButton = x => {
                return(new WeakReference(new Button()
                {
                    Command = x
                }));
            };
            CommandBase <object> command  = CreateCommand <object>(null, x => true);
            WeakReference        wrButton = createButton(command);

            MemoryLeaksHelper.EnsureCollected(wrButton);
        }
示例#7
0
        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);
        }
示例#8
0
        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);
            });
        }
示例#9
0
        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();
        }
        public void ReleaseTarget_CanExecutePrivate()
        {
            WeakReference reference = ReleaseTarget_CanExecutePrivateCore();

            MemoryLeaksHelper.EnsureCollected(reference);
        }
        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();
        }