public void TestUpdateOnewNewSource()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.Settings).Returns(new DataSource());

            var sources         = new List <ISingleDataSource>();
            var childDataSource = new Mock <ISingleDataSource>();

            childDataSource.Setup(x => x.Settings).Returns(new DataSource());
            sources.Add(childDataSource.Object);
            dataSource.Setup(x => x.OriginalSources).Returns(sources);
            dataSource.Setup(x => x.FilteredFileCount).Returns(() => sources.Count);
            dataSource.Setup(x => x.UnfilteredFileCount).Returns(() => sources.Count);
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.Observable.Should().BeEmpty();

            viewModel.Update();

            viewModel.Observable.Should().HaveCount(1);
            var childViewModel = viewModel.Observable.First();

            childViewModel.Should().NotBeNull();
            childViewModel.Parent.Should().BeSameAs(viewModel);

            viewModel.FileReport.Should().Be("Monitoring 1 file");
        }
Пример #2
0
        public void TestDisplayRelativePathWithFolderParent()
        {
            var single = new Mock <ISingleDataSource>();

            single.Setup(x => x.Settings).Returns(new DataSource());
            single.Setup(x => x.FullFileName).Returns(@"C:\Users\Simon\AppData\Local\Tailviewer\Installation.log");
            var singleViewModel = new SingleDataSourceViewModel(single.Object, _actionCenter.Object);

            using (var monitor = singleViewModel.Monitor())
            {
                singleViewModel.DisplayName.Should().Be("Installation.log");
                singleViewModel.Folder.Should().Be(@"C:\Users\Simon\AppData\Local\Tailviewer\");

                var folder = new Mock <IFolderDataSource>();
                folder.Setup(x => x.OriginalSources).Returns(new List <IDataSource>());
                folder.Setup(x => x.LogFileFolderPath).Returns(@"C:\Users\Simon\AppData\Local\");
                var folderViewModel = new FolderDataSourceViewModel(folder.Object, _actionCenter.Object);

                singleViewModel.Parent = folderViewModel;
                singleViewModel.DisplayName.Should().Be("Installation.log");
                singleViewModel.Folder.Should().Be(@"<root>\Tailviewer\");
                monitor.Should().RaisePropertyChangeFor(x => x.Folder);
                monitor.Clear();

                singleViewModel.Parent = null;
                singleViewModel.DisplayName.Should().Be("Installation.log");
                singleViewModel.Folder.Should().Be(@"C:\Users\Simon\AppData\Local\Tailviewer\");
                monitor.Should().RaisePropertyChangeFor(x => x.Folder);
            }
        }
        public void TestUpdateTwoSources()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.Settings).Returns(new DataSource());

            var sources = new List <ISingleDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(sources);
            dataSource.Setup(x => x.FilteredFileCount).Returns(() => sources.Count);
            dataSource.Setup(x => x.UnfilteredFileCount).Returns(() => sources.Count);
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.Observable.Should().BeEmpty();

            var child1 = new Mock <ISingleDataSource>();

            child1.Setup(x => x.Settings).Returns(new DataSource());
            sources.Add(child1.Object);

            var child2 = new Mock <ISingleDataSource>();

            child2.Setup(x => x.Settings).Returns(new DataSource());
            sources.Add(child2.Object);

            viewModel.Update();
            viewModel.FileReport.Should().Be("Monitoring 2 files");
        }
Пример #4
0
        public void TestCannotBeRemovedAsPartOfFolder()
        {
            var actionCenter = new Mock <IActionCenter>();
            var dataSource   = new Mock <ISingleDataSource>();

            dataSource.Setup(x => x.Settings).Returns(new DataSource());
            var model = new SingleDataSourceViewModel(dataSource.Object, actionCenter.Object);

            using (var monitor = model.Monitor())
            {
                model.CanBeRemoved.Should().BeTrue();

                var folderDataSource = new Mock <IFolderDataSource>();
                folderDataSource.Setup(x => x.Settings).Returns(new DataSource());
                var folder = new FolderDataSourceViewModel(folderDataSource.Object, actionCenter.Object);
                model.Parent = folder;
                model.CanBeRemoved.Should().BeFalse();
                monitor.Should().RaisePropertyChangeFor(x => x.CanBeRemoved);

                monitor.Clear();
                model.Parent = null;
                model.CanBeRemoved.Should().BeTrue();
                monitor.Should().RaisePropertyChangeFor(x => x.CanBeRemoved);
            }
        }
        public void TestChangeRecursive([Values(true, false)] bool recursive)
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            var actionCenter = new Mock <IActionCenter>();
            var viewModel    = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.IsEditing = true;
            viewModel.Recursive = recursive;
            dataSource.Verify(x => x.Change(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>()), Times.Never);

            viewModel.IsEditing = false;
            dataSource.Verify(x => x.Change(It.IsAny <string>(), It.IsAny <string>(), recursive), Times.Once);
        }
        public void TestChangeSearchPattern()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            var actionCenter = new Mock <IActionCenter>();
            var viewModel    = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.IsEditing     = true;
            viewModel.SearchPattern = "*.txt;*.log";
            dataSource.Verify(x => x.Change(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <bool>()), Times.Never);

            viewModel.IsEditing = false;
            dataSource.Verify(x => x.Change(It.IsAny <string>(), "*.txt;*.log", It.IsAny <bool>()), Times.Once);
        }
        public void TestUpdateEmpty()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.LogFileFolderPath).Returns(@"F:\logs\today");
            dataSource.Setup(x => x.Settings).Returns(new DataSource());
            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            dataSource.Setup(x => x.FilteredFileCount).Returns(0);
            dataSource.Setup(x => x.UnfilteredFileCount).Returns(0);
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.Update();
            viewModel.FileReport.Should().Be("Monitoring 0 files");
        }
        public void TestFolderPathIsDirty()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            dataSource.Setup(x => x.LogFileFolderPath).Returns(@"F:\logs");

            var actionCenter = new Mock <IActionCenter>();
            var viewModel    = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.IsEditing  = true;
            viewModel.FolderPath = @"E:\logs";
            viewModel.IsDirty.Should().BeTrue();

            viewModel.FolderPath = @"F:\logs";
            viewModel.IsDirty.Should().BeFalse();
        }
        public void TestSearchPatternIsDirty()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            dataSource.Setup(x => x.LogFileSearchPattern).Returns("*.bin");

            var actionCenter = new Mock <IActionCenter>();
            var viewModel    = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.IsEditing     = true;
            viewModel.SearchPattern = "*.txt";
            viewModel.IsDirty.Should().BeTrue();

            viewModel.SearchPattern = "*.bin";
            viewModel.IsDirty.Should().BeFalse();
        }
        public void TestRecursiveIsDirty([Values(true, false)] bool recursive)
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            dataSource.Setup(x => x.Recursive).Returns(recursive);

            var actionCenter = new Mock <IActionCenter>();
            var viewModel    = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.IsEditing = true;
            viewModel.Recursive = !recursive;
            viewModel.IsDirty.Should().BeTrue();

            viewModel.Recursive = recursive;
            viewModel.IsDirty.Should().BeFalse();
        }
Пример #11
0
        public void TestOpenInExplorer()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            dataSource.Setup(x => x.LogFileFolderPath).Returns(@"C:\foo\bar\logs");

            var actionCenter = new Mock <IActionCenter>();
            var viewModel    = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            actionCenter.Verify(x => x.Add(It.Is <INotification>(y => y is OpenFolderAction)), Times.Never);

            viewModel.OpenInExplorerCommand.Should().NotBeNull();
            viewModel.OpenInExplorerCommand.CanExecute(null).Should().BeTrue();
            viewModel.OpenInExplorerCommand.Execute(null);

            actionCenter.Verify(x => x.Add(It.Is <INotification>(y => y is OpenFolderAction)), Times.Once);
        }
Пример #12
0
        private IDataSourceViewModel CreateViewModel(IDataSource dataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }

            IDataSourceViewModel viewModel;
            var single = dataSource as ISingleDataSource;

            if (single != null)
            {
                viewModel = new SingleDataSourceViewModel(single, _actionCenter);
            }
            else
            {
                var merged = dataSource as IMergedDataSource;
                if (merged != null)
                {
                    viewModel = new MergedDataSourceViewModel(merged, _actionCenter);
                }
                else
                {
                    var folder = dataSource as IFolderDataSource;
                    if (folder != null)
                    {
                        viewModel = new FolderDataSourceViewModel(folder, _actionCenter);
                    }
                    else
                    {
                        throw new ArgumentException(string.Format("Unknown data source: {0} ({1})", dataSource, dataSource.GetType()));
                    }
                }
            }
            viewModel.Remove += OnRemove;
            _allDataSourceViewModels.Add(viewModel);

            if (_settings.DataSources.SelectedItem == viewModel.DataSource.Id)
            {
                SelectedItem = viewModel;
            }

            return(viewModel);
        }
Пример #13
0
        public void TestDataSourceNoFiles()
        {
            var dataSource = new Mock <IFolderDataSource>();
            var logFile    = new Mock <ILogFile>();

            dataSource.Setup(x => x.UnfilteredLogFile).Returns(logFile.Object);
            dataSource.Setup(x => x.FilteredLogFile).Returns(logFile.Object);
            dataSource.Setup(x => x.UnfilteredFileCount).Returns(0);
            dataSource.Setup(x => x.FilteredFileCount).Returns(0);
            dataSource.Setup(x => x.OriginalSources).Returns(new List <IDataSource>());
            dataSource.Setup(x => x.FullFileName).Returns(@"F:\logs\today");

            var dataSourceModel = new FolderDataSourceViewModel(dataSource.Object, _actionCenter.Object);
            var model           = new LogViewerViewModel(dataSourceModel, _actionCenter.Object, _settings.Object, TimeSpan.Zero);

            model.LogEntryCount.Should().Be(0);
            model.NoEntriesExplanation.Should().Be("The folder \"today\" does not contain any file");
            model.NoEntriesSubtext.Should().Be(@"F:\logs\today");
        }
        public void TestUpdateFiltered3Files()
        {
            var dataSource = new Mock <IFolderDataSource>();
            var sources    = new List <ISingleDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(sources);
            var child1 = new Mock <ISingleDataSource>();

            child1.Setup(x => x.Settings).Returns(new DataSource());
            sources.Add(child1.Object);

            dataSource.Setup(x => x.FilteredFileCount).Returns(1);
            dataSource.Setup(x => x.UnfilteredFileCount).Returns(4);
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.FileReport.Should().Be("Monitoring 1 file (3 not matching filter)");
        }
        public void TestUpdateFilterAndSkippedFilesDueToLimitation()
        {
            var dataSource = new Mock <IFolderDataSource>();
            var sources    = new List <ISingleDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(sources);
            for (int i = 0; i < 256; ++i)
            {
                var child = new Mock <ISingleDataSource>();
                child.Setup(x => x.Settings).Returns(new DataSource());
                sources.Add(child.Object);
            }

            dataSource.Setup(x => x.FilteredFileCount).Returns(260);
            dataSource.Setup(x => x.UnfilteredFileCount).Returns(300);
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.FileReport.Should().Be("Monitoring 256 files (40 not matching filter)\r\nSkipping 4 files (due to internal limitation)");
        }
Пример #16
0
        private IDataSourceViewModel CreateViewModel(IDataSource dataSource)
        {
            if (dataSource == null)
            {
                throw new ArgumentNullException(nameof(dataSource));
            }

            IDataSourceViewModel viewModel;

            if (dataSource is IFileDataSource single)
            {
                viewModel = new FileDataSourceViewModel(single, _actionCenter, _settings);
            }
            else if (dataSource is IMergedDataSource merged)
            {
                viewModel = new MergedDataSourceViewModel(merged, _actionCenter, _settings);
            }
            else if (dataSource is IFolderDataSource folder)
            {
                viewModel = new FolderDataSourceViewModel(folder, _actionCenter, _settings);
            }
            else if (dataSource is ICustomDataSource custom)
            {
                viewModel = new CustomDataSourceViewModel(custom, _actionCenter, _settings);
            }
            else
            {
                throw new ArgumentException(string.Format("Unknown data source: {0} ({1})", dataSource, dataSource.GetType()));
            }

            viewModel.Remove += OnRemove;
            _allDataSourceViewModels.Add(viewModel);

            if (_settings.DataSources.SelectedItem == viewModel.DataSource.Id)
            {
                SelectedItem = viewModel;
            }

            return(viewModel);
        }
        public void TestOpenInExplorer()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            dataSource.Setup(x => x.LogFileFolderPath).Returns(@"C:\foo\bar\logs");

            var actionCenter        = new Mock <IActionCenter>();
            var applicationSettings = new Mock <IApplicationSettings>();
            var viewModel           = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object, applicationSettings.Object);

            actionCenter.Verify(x => x.Add(It.Is <INotification>(y => y is OpenFolderAction)), Times.Never);

            var openInExplorerItem    = viewModel.FileMenuItems.First(x => x.Header != null && x.Header == "Open Containing Folder");
            var openInExplorerCommand = openInExplorerItem.Command;

            openInExplorerCommand.Should().NotBeNull();
            openInExplorerCommand.CanExecute(null).Should().BeTrue();
            openInExplorerCommand.Execute(null);

            actionCenter.Verify(x => x.Add(It.Is <INotification>(y => y is OpenFolderAction)), Times.Once);
        }
        public void TestConstruction1([Values(true, false)] bool recursive)
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.LogFileFolderPath).Returns(@"F:\logs\today");
            dataSource.Setup(x => x.LogFileSearchPattern).Returns("*.txt");
            dataSource.Setup(x => x.Recursive).Returns(recursive);
            dataSource.Setup(x => x.Settings).Returns(new DataSource());
            dataSource.Setup(x => x.OriginalSources).Returns(new List <ISingleDataSource>());
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.CanBeRenamed.Should().BeFalse();
            viewModel.DisplayName.Should().Be("today");
            viewModel.DataSourceOrigin.Should().Be(@"F:\logs\today");
            viewModel.FileReport.Should().Be("Monitoring 0 files");

            viewModel.FolderPath.Should().Be(@"F:\logs\today");
            viewModel.SearchPattern.Should().Be("*.txt");
            viewModel.Recursive.Should().Be(recursive);
        }
        public void TestUpdateNoMoreSources()
        {
            var dataSource = new Mock <IFolderDataSource>();

            dataSource.Setup(x => x.Settings).Returns(new DataSource());

            var sources         = new List <ISingleDataSource>();
            var childDataSource = new Mock <ISingleDataSource>();

            childDataSource.Setup(x => x.Settings).Returns(new DataSource());
            sources.Add(childDataSource.Object);
            dataSource.Setup(x => x.OriginalSources).Returns(sources);
            var actionCenter = new Mock <IActionCenter>();

            var viewModel = new FolderDataSourceViewModel(dataSource.Object, actionCenter.Object);

            viewModel.Update();
            viewModel.Observable.Should().HaveCount(1);

            sources.Clear();
            viewModel.Update();
            viewModel.Observable.Should().BeEmpty();
        }