Example #1
0
        public void Action_event_handler_should_be_called_on_event()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeModel();

            SubscribeWeakly.OnGenericAction <SomeDataChangedEvent, SomeView>(
                h => model.SomeDataChanged += h,
                h => model.SomeDataChanged -= h,
                view, (v, e) => v.OnSomeDataChanged());

            // Act
            model.NotifySomeDataChanged(new SomeDataChangedEvent());

            // Assert
            view.Observer.IsSomeDataChangedHandled.Should().BeTrue();
        }
Example #2
0
        public void EventHandler_event_handler_should_be_called_on_event()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeModel();

            SubscribeWeakly.OnEventHandler(
                h => model.Updated += h,
                h => model.Updated -= h,
                view, (v, sender, e) => v.OnOtherDataChanged());

            // Act
            model.Update();

            // Assert
            view.Observer.IsOtherDataChangedHandled.Should().BeTrue();
        }
Example #3
0
        public void Action_event_subscription_can_be_safely_disposed_multiple_times()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeModel();

            var subscription = SubscribeWeakly.OnGenericAction <SomeDataChangedEvent, SomeView>(
                h => model.SomeDataChanged += h,
                h => model.SomeDataChanged -= h,
                view, (x, e) => { });

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

            // Assert
            // No exception should be raised
        }
Example #4
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();
        }
Example #5
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();
        }
Example #6
0
        public void Action_event_handler_should_not_be_called_when_subscription_is_disposed()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeModel();

            var subscription = SubscribeWeakly.OnGenericAction <SomeDataChangedEvent, SomeView>(
                h => model.SomeDataChanged += h,
                h => model.SomeDataChanged -= h,
                view,
                (x, e) => x.OnSomeDataChanged());

            // Act
            subscription.Dispose();
            model.NotifySomeDataChanged(new SomeDataChangedEvent());

            // Assert
            view.Observer.IsSomeDataChangedHandled.Should().BeFalse();
        }
Example #7
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();
        }
Example #8
0
        public void Action_event_handler_should_not_be_called_when_GC_collected_and_subscriber_is_not_used_aftrewards()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeModel();

            SubscribeWeakly.OnGenericAction <SomeDataChangedEvent, SomeView>(
                h => model.SomeDataChanged += h,
                h => model.SomeDataChanged -= h,
                view, (v, e) => v.OnSomeDataChanged());

            // Act
            var observer = view.Observer;

            // ReSharper disable RedundantAssignment
            view = null;
            // ReSharper restore RedundantAssignment
            GC.Collect();
            model.NotifySomeDataChanged(new SomeDataChangedEvent());

            // Assert
            observer.IsSomeDataChangedHandled.Should().BeFalse();
        }
Example #9
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();
        }
Example #10
0
        public void EventHandler_event_handler_should_not_be_called_when_subscriber_is_garbage_collected()
        {
            // Arrange
            var view  = new SomeView();
            var model = new SomeModel();

            SubscribeWeakly.OnEventHandler(
                h => model.Updated += h,
                h => model.Updated -= h,
                view, (v, sender, e) => v.OnOtherDataChanged());

            // Act
            var observer = view.Observer;

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

            model.Update();

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