コード例 #1
0
        public void Can_safely_raise_event_even_when_no_subsriptions_were_made()
        {
            // Arrange
            var viewModel = new SomeViewModel();

            // Act
            Assert.DoesNotThrow(() =>
                                viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some")));
        }
コード例 #2
0
        public void Can_safely_raise_event_even_when_no_subsriptions_were_made()
        {
            // Arrange
            var viewModel = new SomeViewModel();

            // Act
               Assert.DoesNotThrow(() =>
               viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some")));
        }
コード例 #3
0
        public void When_event_raised_the_Lambda_handler_should_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var handled = false;
            viewModel.PropertyChanged += (sender, args) => handled = true;

            // Act
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            handled.Should().BeTrue();
        }
コード例 #4
0
        public void When_event_raised_the_Method_handler_should_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var view = new SomeView();
            viewModel.PropertyChanged += view.OnPropertyChanged;

            // Act
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #5
0
        public void With_no_subscriptions_should_unsibscribe_without_exception()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            PropertyChangedEventHandler propertyChanged = (sender, args) => { };

            // Act
            viewModel.PropertyChanged -= propertyChanged;
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            // No exceptions expected
        }
コード例 #6
0
        public void When_event_raised_and_GC_collected_and_despite_that_subscriber_is_still_used_then_the_Method_handler_should_not_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var view = new SomeView();
            viewModel.PropertyChanged += view.OnPropertyChanged;

            // Act
            GC.Collect();
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #7
0
        public void When_event_raised_the_Lambda_handler_should_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var handled   = false;

            viewModel.PropertyChanged += (sender, args) => handled = true;

            // Act
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            handled.Should().BeTrue();
        }
コード例 #8
0
        public void When_event_raised_the_Method_handler_should_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var view      = new SomeView();

            viewModel.PropertyChanged += view.OnPropertyChanged;

            // Act
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #9
0
        internal TimeSpan NotifyMethodsWithReflection(int times)
        {
            var view = new SomeView();
            var viewModel = new SomeViewModel();

            viewModel.SubscribeWeakly(x => x.Flag, view.OnFlagChanged);

            var stopwatch = Stopwatch.StartNew();

            for (var i = 0; i < times; i++)
                viewModel.NotifyPropertyChanged();

            stopwatch.Stop();
            return stopwatch.Elapsed;
        }
コード例 #10
0
        public void PropertyChanged_event_handler_should_be_called_when_GC_collected_and_subscriber_is_used_aftrewards()
        {
            // Arrange
            var view      = new SomeView();
            var viewModel = new SomeViewModel();

            viewModel.SubscribeWeakly(view, (x, _, e) => x.OnPropertyChanged());

            // Act
            GC.Collect();
            viewModel.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #11
0
        public void When_event_raised_and_GC_collected_and_despite_that_subscriber_is_still_used_then_the_Method_handler_should_not_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var view      = new SomeView();

            viewModel.PropertyChanged += view.OnPropertyChanged;

            // Act
            GC.Collect();
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #12
0
        public void When_Lambda_handler_is_unsubscribed_and_event_raised_then_the_handler_should_not_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var handled   = false;
            PropertyChangedEventHandler onPropertyChanged = (sender, args) => handled = true;

            viewModel.PropertyChanged += onPropertyChanged;

            // Act
            viewModel.PropertyChanged -= onPropertyChanged;
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            handled.Should().BeFalse();
        }
コード例 #13
0
        internal TimeSpan NotifyAsUsual(int times)
        {
            var someView = new SomeView();
            var someViewModel = new SomeViewModel();
            someViewModel.PropertyChanged += someView.OnPropertyChanged;

            var stopwatch = Stopwatch.StartNew();

            for (var i = 0; i < times; i++)
            {
                someViewModel.NotifyPropertyChanged();
            }

            stopwatch.Stop();
            return stopwatch.Elapsed;
        }
コード例 #14
0
        internal TimeSpan NotifyMethodsWithReflection(int times)
        {
            var view      = new SomeView();
            var viewModel = new SomeViewModel();

            viewModel.SubscribeWeakly(x => x.Flag, view.OnFlagChanged);

            var stopwatch = Stopwatch.StartNew();

            for (var i = 0; i < times; i++)
            {
                viewModel.NotifyPropertyChanged();
            }

            stopwatch.Stop();
            return(stopwatch.Elapsed);
        }
コード例 #15
0
        internal TimeSpan NotifyAsUsual(int times)
        {
            var someView      = new SomeView();
            var someViewModel = new SomeViewModel();

            someViewModel.PropertyChanged += someView.OnPropertyChanged;

            var stopwatch = Stopwatch.StartNew();

            for (var i = 0; i < times; i++)
            {
                someViewModel.NotifyPropertyChanged();
            }

            stopwatch.Stop();
            return(stopwatch.Elapsed);
        }
コード例 #16
0
        public void Delegate_event_handler_should_be_called_when_subscriber_not_GC_collected()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeViewModel();

            SubscribeWeakly.OnCustomDelegate <PropertyChangedEventHandler, PropertyChangedEventArgs, SomeView>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view, (v, sender, args) => v.OnPropertyChanged());

            // Act
            model.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #17
0
        public void Delegate_event_method_handler_should_be_called_when_GC_collected_and_subscriber_is_used_aftrewards()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeViewModel();

            SubscribeWeakly.OnCustomDelegate <PropertyChangedEventHandler, PropertyChangedEventArgs>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view.OnPropertyChanged);

            // Act
            GC.Collect();
            model.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #18
0
        public void Delegate_event_method_handler_should_not_be_called_when_subscription_disposed()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeViewModel();

            var subscription = SubscribeWeakly.OnCustomDelegate <PropertyChangedEventHandler, PropertyChangedEventArgs>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view.OnPropertyChanged);

            // Act
            subscription.Dispose();
            model.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #19
0
        public void PropertyChanged_event_handler_should_not_be_called_when_GC_collected_and_subscriber_is_not_used_aftrewards()
        {
            // Arrange
            var view      = new SomeView();
            var viewModel = new SomeViewModel();

            viewModel.SubscribeWeakly(view, (x, _, e) => x.OnPropertyChanged());

            // Act
            var observer = view.Observer;

            // ReSharper disable RedundantAssignment
            view = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            viewModel.NotifyPropertyChanged();

            // Assert
            observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #20
0
        public void Delegate_event_method_handler_should_not_be_called_when_GC_collected_and_subscriber_is_not_used_aftrewards()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeViewModel();

            SubscribeWeakly.OnCustomDelegate <PropertyChangedEventHandler, PropertyChangedEventArgs>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view.OnPropertyChanged);

            // Act
            var observer = view.Observer;

            // ReSharper disable RedundantAssignment
            view = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            model.NotifyPropertyChanged();

            // Assert
            observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #21
0
        public void Delegate_event_handler_should_be_called_when_subscriber_not_GC_collected()
        {
            // Arrange
            var view = new SomeView();
            var model = new SomeViewModel();

            SubscribeWeakly.OnCustomDelegate<PropertyChangedEventHandler, PropertyChangedEventArgs, SomeView>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view, (v, sender, args) => v.OnPropertyChanged());

            // Act
            model.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #22
0
        public void Delegate_event_method_handler_should_be_called_when_GC_collected_and_subscriber_is_used_aftrewards()
        {
            // Arrange
            var view = new SomeView();
            var model = new SomeViewModel();

            SubscribeWeakly.OnCustomDelegate<PropertyChangedEventHandler, PropertyChangedEventArgs>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view.OnPropertyChanged);

            // Act
            GC.Collect();
            model.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #23
0
        public void Delegate_event_method_handler_should_not_be_called_when_GC_collected_and_subscriber_is_not_used_aftrewards()
        {
            // Arrange
            var view = new SomeView();
            var model = new SomeViewModel();

            SubscribeWeakly.OnCustomDelegate<PropertyChangedEventHandler, PropertyChangedEventArgs>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view.OnPropertyChanged);

            // Act
            var observer = view.Observer;
            // ReSharper disable RedundantAssignment
            view = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            model.NotifyPropertyChanged();

            // Assert
            observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #24
0
        public void Delegate_event_method_handler_should_not_be_called_when_subscription_disposed()
        {
            // Arrange
            var view = new SomeView();
            var model = new SomeViewModel();

            var subscription = SubscribeWeakly.OnCustomDelegate<PropertyChangedEventHandler, PropertyChangedEventArgs>(
                a => a.Invoke,
                h => model.PropertyChanged += h,
                h => model.PropertyChanged -= h,
                view.OnPropertyChanged);

            // Act
            subscription.Dispose();
            model.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeFalse();
        }
コード例 #25
0
        public void PropertyChanged_event_handler_should_be_called_when_GC_collected_and_subscriber_is_used_aftrewards()
        {
            // Arrange
            var view = new SomeView();
            var viewModel = new SomeViewModel();

            viewModel.SubscribeWeakly(view, (x, _, e) => x.OnPropertyChanged());

            // Act
            GC.Collect();
            viewModel.NotifyPropertyChanged();

            // Assert
            view.Observer.IsPropertyChangedHandled.Should().BeTrue();
        }
コード例 #26
0
        public void With_no_subscriptions_should_unsibscribe_without_exception()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            PropertyChangedEventHandler propertyChanged = (sender, args) => { };

            // Act
            viewModel.PropertyChanged -= propertyChanged;
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            // No exceptions expected
        }
コード例 #27
0
        public void When_Lambda_handler_is_unsubscribed_and_event_raised_then_the_handler_should_not_be_called()
        {
            // Arrange
            var viewModel = new SomeViewModel();
            var handled = false;
            PropertyChangedEventHandler onPropertyChanged = (sender, args) => handled = true;
            viewModel.PropertyChanged += onPropertyChanged;

            // Act
            viewModel.PropertyChanged -= onPropertyChanged;
            viewModel.NotifyPropertyChanged(new PropertyChangedEventArgs("some"));

            // Assert
            handled.Should().BeFalse();
        }
コード例 #28
0
        public void PropertyChanged_event_handler_should_not_be_called_when_GC_collected_and_subscriber_is_not_used_aftrewards()
        {
            // Arrange
            var view = new SomeView();
            var viewModel = new SomeViewModel();

            viewModel.SubscribeWeakly(view, (x, _, e) => x.OnPropertyChanged());

            // Act
            var observer = view.Observer;
            // ReSharper disable RedundantAssignment
            view = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            viewModel.NotifyPropertyChanged();

            // Assert
            observer.IsPropertyChangedHandled.Should().BeFalse();
        }