Exemplo n.º 1
0
        public void TestToggle()
        {
            var configuration = new SearchViewModelConfiguration();

            var regexServiceMock     = new Mock <IRegexService>();
            var resourceProviderMock = new Mock <IResourceProvider>();

            var viewModel = new SearchViewModel(regexServiceMock.Object, resourceProviderMock.Object, configuration);

            Assert.False(viewModel.IsSearchEnabled);

            viewModel.SearchText = SearchText;
            viewModel.ToggleSearch();
            Assert.True(viewModel.IsSearchEnabled);
            Assert.Equal(string.Empty, viewModel.SearchText);

            viewModel.SearchText = SearchText;
            viewModel.ToggleSearch();
            Assert.False(viewModel.IsSearchEnabled);
            Assert.Equal(string.Empty, viewModel.SearchText);

            viewModel.SearchText = SearchText;
            viewModel.ToggleSearch();
            Assert.True(viewModel.IsSearchEnabled);
            Assert.Equal(string.Empty, viewModel.SearchText);
        }
Exemplo n.º 2
0
        public SearchViewModel(
            IRegexService regexService,
            IResourceProvider resourceProvider,
            IApplicationDispatcher applicationDispatcher,
            SearchViewModelConfiguration searchViewModelConfiguration)
        {
            _regexService          = regexService;
            _applicationDispatcher = applicationDispatcher;

            ToggleSearchCommand = ReactiveCommand.Create(ToggleSearch);

            Reset();

            this.ValidationRule(
                vm => vm.SearchText,
                this.WhenAnyValue(x => x.IsRegexSearchEnabled, x => x.SearchText),
                v => !HasText || IsValid,
                _ => resourceProvider.GetResourceByName(searchViewModelConfiguration.InvalidRegexResourceName)
                );
            this.WhenAnyValue(
                x => x.SearchText,
                x => x.IsSearchEnabled,
                x => x.IsRegexSearchEnabled,
                x => x.IsSearchCaseSensitive,
                x => x.IsRecursiveSearchEnabled)
            .Throttle(TimeSpan.FromMilliseconds(searchViewModelConfiguration.TimeoutMs))
            .Subscribe(_ => FireSettingsChangedEvent());
        }
Exemplo n.º 3
0
        public async Task TestRegexChanged(bool isRegexValid)
        {
            var taskCompletionSource = new TaskCompletionSource <bool>();

            var regexServiceMock = new Mock <IRegexService>();

            regexServiceMock
            .Setup(m => m.ValidateRegex(SearchText))
            .Returns(isRegexValid);
            var resourceProviderMock = new Mock <IResourceProvider>();
            var configuration        = new SearchViewModelConfiguration
            {
                TimeoutMs = 10
            };
            var viewModel = new SearchViewModel(regexServiceMock.Object, resourceProviderMock.Object, configuration);

            viewModel.SearchSettingsChanged += (sender, args) => taskCompletionSource.SetResult(true);

            viewModel.SearchText           = SearchText;
            viewModel.IsRegexSearchEnabled = true;

            var task = await Task.WhenAny(Task.Delay(1000), taskCompletionSource.Task);

            Assert.Equal(isRegexValid, taskCompletionSource.Task == task);
        }
Exemplo n.º 4
0
    private static void RegisterSearchViewModelConfiguration(IMutableDependencyResolver services,
                                                             IConfiguration configuration)
    {
        var config = new SearchViewModelConfiguration();

        configuration.GetSection("SearchPanel").Bind(config);
        config.InvalidRegexResourceName = nameof(Resources.InvalidRegex);
        services.RegisterConstant(config);
    }
Exemplo n.º 5
0
        public void TestDefaults()
        {
            var configuration = new SearchViewModelConfiguration();
            var viewModel     = new SearchViewModel(configuration);

            Assert.False(viewModel.IsSearchEnabled);
            Assert.False(viewModel.IsRegexSearchEnabled);
            Assert.False(viewModel.IsSearchCaseSensitive);
            Assert.Equal(string.Empty, viewModel.SearchText);
        }
Exemplo n.º 6
0
        public void TestDefaults()
        {
            var regexServiceMock     = new Mock <IRegexService>();
            var resourceProviderMock = new Mock <IResourceProvider>();
            var configuration        = new SearchViewModelConfiguration();
            var viewModel            = new SearchViewModel(regexServiceMock.Object, resourceProviderMock.Object, configuration);

            Assert.False(viewModel.IsSearchEnabled);
            Assert.False(viewModel.IsRegexSearchEnabled);
            Assert.False(viewModel.IsSearchCaseSensitive);
            Assert.Equal(string.Empty, viewModel.SearchText);
        }
Exemplo n.º 7
0
        public void TestSpecification(bool isSearchEnabled, bool isRegexSearchEnabled,
                                      Type specificationType)
        {
            var configuration = new SearchViewModelConfiguration();
            var viewModel     = new SearchViewModel(configuration)
            {
                IsSearchEnabled      = isSearchEnabled,
                IsRegexSearchEnabled = isRegexSearchEnabled
            };

            var specification = viewModel.GetSpecification();

            Assert.IsType(specificationType, specification);
        }
Exemplo n.º 8
0
        private static void RegisterConfiguration(IMutableDependencyResolver services)
        {
            var configuration = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();

            var aboutDialogConfiguration = new AboutDialogConfiguration();

            configuration.GetSection("About").Bind(aboutDialogConfiguration);
            services.RegisterConstant(aboutDialogConfiguration);

            var databaseName          = configuration["DataAccess:DatabaseName"];
            var connectionString      = configuration["DataAccess:ConnectionString"];
            var assemblyLocation      = Assembly.GetEntryAssembly()?.Location;
            var assemblyDirectory     = Path.GetDirectoryName(assemblyLocation);
            var databaseConfiguration = new DatabaseConfiguration
            {
                ConnectionString = string.Format(connectionString, Path.Combine(assemblyDirectory, databaseName))
            };

            services.RegisterConstant(databaseConfiguration);

            var fileSystemWatcherConfiguration = new FileSystemWatcherConfiguration();

            configuration.GetSection("FileSystemWatcher").Bind(fileSystemWatcherConfiguration);
            services.RegisterConstant(fileSystemWatcherConfiguration);

            var imagePreviewConfiguration = new ImagePreviewConfiguration();

            configuration.GetSection("ImagePreview").Bind(imagePreviewConfiguration);
            services.RegisterConstant(imagePreviewConfiguration);

            var filePanelConfiguration = new FilePanelConfiguration();

            configuration.GetSection("FilePanel").Bind(filePanelConfiguration);
            services.RegisterConstant(filePanelConfiguration);

            var searchViewModelConfiguration = new SearchViewModelConfiguration();

            configuration.GetSection("SearchPanel").Bind(searchViewModelConfiguration);
            searchViewModelConfiguration.InvalidRegexResourceName = nameof(Resources.InvalidRegex);
            services.RegisterConstant(searchViewModelConfiguration);

            var driveServiceConfiguration = new DriveServiceConfiguration();

            configuration.GetSection("Drives").Bind(driveServiceConfiguration);
            services.RegisterConstant(driveServiceConfiguration);
        }
Exemplo n.º 9
0
        public SearchViewModel(
            IRegexService regexService,
            IResourceProvider resourceProvider,
            SearchViewModelConfiguration searchViewModelConfiguration)
        {
            _regexService = regexService;
            Reset();

            this.ValidationRule(vm => vm.SearchText,
                                vm =>
                                this.WhenAnyValue(x => x.IsRegexSearchEnabled, x => x.SearchText).Select(_ => IsValid),
                                (vm, r) => resourceProvider.GetResourceByName(searchViewModelConfiguration.InvalidRegexResourceName));
            this.WhenAnyValue(x => x.SearchText, x => x.IsSearchEnabled,
                              x => x.IsRegexSearchEnabled, x => x.IsSearchCaseSensitive)
            .Throttle(TimeSpan.FromMilliseconds(searchViewModelConfiguration.TimeoutMs))
            .Subscribe(_ => FireSettingsChangedEvent());
        }
Exemplo n.º 10
0
        public async Task TestSearchCaseChanged()
        {
            var taskCompletionSource = new TaskCompletionSource <bool>();
            var configuration        = new SearchViewModelConfiguration
            {
                TimeoutMs = 10
            };
            var viewModel = new SearchViewModel(configuration);

            viewModel.SearchSettingsChanged += (sender, args) => taskCompletionSource.SetResult(true);

            viewModel.IsSearchCaseSensitive = true;

            var task = await Task.WhenAny(Task.Delay(1000), taskCompletionSource.Task);

            Assert.Equal(taskCompletionSource.Task, task);
        }
Exemplo n.º 11
0
        public async Task TestTextChangedChanged()
        {
            var taskCompletionSource = new TaskCompletionSource <bool>();

            var regexServiceMock     = new Mock <IRegexService>();
            var resourceProviderMock = new Mock <IResourceProvider>();
            var configuration        = new SearchViewModelConfiguration
            {
                TimeoutMs = 10
            };
            var viewModel = new SearchViewModel(regexServiceMock.Object, resourceProviderMock.Object, configuration);

            viewModel.SearchSettingsChanged += (sender, args) => taskCompletionSource.SetResult(true);

            viewModel.SearchText = "test";

            var task = await Task.WhenAny(Task.Delay(1000), taskCompletionSource.Task);

            Assert.Equal(taskCompletionSource.Task, task);
        }
Exemplo n.º 12
0
        public void TestSpecification(bool isSearchEnabled, bool isRegexSearchEnabled,
                                      Type specificationType, bool isRegexValid)
        {
            var regexServiceMock = new Mock <IRegexService>();

            regexServiceMock
            .Setup(m => m.ValidateRegex(It.IsAny <string>()))
            .Returns(isRegexValid);
            var resourceProviderMock = new Mock <IResourceProvider>();
            var configuration        = new SearchViewModelConfiguration();
            var viewModel            = new SearchViewModel(regexServiceMock.Object, resourceProviderMock.Object, configuration)
            {
                IsSearchEnabled      = isSearchEnabled,
                IsRegexSearchEnabled = isRegexSearchEnabled
            };

            var specification = viewModel.GetSpecification();

            Assert.IsType(specificationType, specification);
        }
Exemplo n.º 13
0
        public void TestToggle()
        {
            const string searchText    = "text";
            var          configuration = new SearchViewModelConfiguration();

            var viewModel = new SearchViewModel(configuration);

            Assert.False(viewModel.IsSearchEnabled);

            viewModel.SearchText = searchText;
            viewModel.ToggleSearch();
            Assert.True(viewModel.IsSearchEnabled);
            Assert.Equal(string.Empty, viewModel.SearchText);

            viewModel.SearchText = searchText;
            viewModel.ToggleSearch();
            Assert.False(viewModel.IsSearchEnabled);
            Assert.Equal(string.Empty, viewModel.SearchText);

            viewModel.SearchText = searchText;
            viewModel.ToggleSearch();
            Assert.True(viewModel.IsSearchEnabled);
            Assert.Equal(string.Empty, viewModel.SearchText);
        }