public void IsVisibleChangedShouldBeDispatched()
        {
            // Arrange
            var localizationProvider = Substitute.For <ILocalizationProvider>();
            var option    = Substitute.For <IOption>();
            var viewModel = Substitute.For <IViewModel>();
            var sut       = new PluginOptionViewModelImplementation(option, localizationProvider, viewModel);

            // Act
            option.IsVisibleChanged += Raise.Event();

            // Assert
            sut.ViewModel.Received(1).OnPropertyChanged(nameof(OptionViewModelBase.IsVisible));
        }
        public void ValueChangedShouldBeDispatched()
        {
            // Arrange
            var localizationProvider = Substitute.For <ILocalizationProvider>();
            var option    = Substitute.For <ValueOption <int> >(0, string.Empty, string.Empty);
            var viewModel = Substitute.For <IViewModel>();
            var sut       = new PluginOptionViewModelImplementation <int>(option, localizationProvider, viewModel);

            // Act
            option.ValueChanged += Raise.EventWith(EventArgs.Empty);

            // Assert
            sut.ViewModel.Received(1).OnPropertyChanged(nameof(OptionViewModelBase <int> .Value));
        }
        public void DisplayNameShouldBeLocalized()
        {
            // Arrange
            var localizationProvider = Substitute.For <ILocalizationProvider>();

            localizationProvider.Localize("name").Returns("loc_name");
            var option = Substitute.For <IOption>();

            option.NameTextId.Returns("name");
            var viewModel = Substitute.For <IViewModel>();
            var sut       = new PluginOptionViewModelImplementation(option, localizationProvider, viewModel);

            // Act
            var actual = sut.DisplayName;

            // Assert
            Assert.Equal("loc_name", actual);
        }