Example #1
0
        public void TestCtor()
        {
            var canvas = new DataSourceCanvas(TextSettings.Default);

            canvas.DataSources.Should().BeEmpty();
            canvas.DisplayMode.Should().Be(DataSourceDisplayMode.Filename);
        }
Example #2
0
        public void TestUpdateLineNumbers3()
        {
            var canvas          = new DataSourceCanvas(TextSettings.Default);
            var multiDataSource = new Mock <IMultiDataSource>();
            var dataSource0     = new Mock <IDataSource>();

            dataSource0.Setup(x => x.FullFileName).Returns(@"A:\foo\bar.txt");

            var dataSource1 = new Mock <IDataSource>();

            dataSource1.Setup(x => x.FullFileName).Returns(@"B:\a really long file name.log");

            multiDataSource.Setup(x => x.OriginalSources).Returns(new[] { dataSource0.Object, dataSource1.Object });
            var mergedLogFile = new InMemoryLogSource(Columns.SourceId);

            mergedLogFile.Add(new Dictionary <IColumnDescriptor, object>
            {
                { Columns.SourceId, new LogEntrySourceId(1) },
                { Columns.RawContent, "foo" }
            });
            mergedLogFile.Add(new Dictionary <IColumnDescriptor, object>
            {
                { Columns.SourceId, new LogEntrySourceId(0) },
                { Columns.RawContent, "bar" }
            });
            multiDataSource.Setup(x => x.FilteredLogSource).Returns(mergedLogFile);

            canvas.UpdateDataSources(multiDataSource.Object, new LogSourceSection(0, 2), 0);
            canvas.DataSources.Should().HaveCount(2);
            canvas.DataSources[0].Should().NotBeNull();
            canvas.DataSources[0].Text.Should().Be("a really long file nam");
            canvas.DataSources[1].Should().NotBeNull();
            canvas.DataSources[1].Text.Should().Be("bar.txt");
        }
Example #3
0
        public void TestUpdateLineNumbers1()
        {
            var canvas = new DataSourceCanvas(TextSettings.Default);

            canvas.UpdateDataSources(null, new LogSourceSection(0, 0), 0);
            canvas.DataSources.Should().BeEmpty();
        }
        public void TestUpdateLineNumbers4()
        {
            var canvas = new DataSourceCanvas(TextSettings.Default)
            {
                DisplayMode = DataSourceDisplayMode.CharacterCode
            };

            var multiDataSource = new Mock <IMultiDataSource>();
            var dataSource0     = new Mock <IDataSource>();

            dataSource0.Setup(x => x.CharacterCode).Returns("FB");

            var dataSource1 = new Mock <IDataSource>();

            dataSource1.Setup(x => x.CharacterCode).Returns(@"TH");

            multiDataSource.Setup(x => x.OriginalSources).Returns(new[] { dataSource0.Object, dataSource1.Object });
            var mergedLogFile = new Mock <ILogFile>();

            mergedLogFile.Setup(x => x.Count).Returns(2);
            mergedLogFile.Setup(x => x.GetSection(It.IsAny <LogFileSection>(), It.IsAny <LogLine[]>()))
            .Callback((LogFileSection section, LogLine[] lines) =>
            {
                lines[0] = new LogLine(0, 0, 0, new LogLineSourceId(1), "foo", LevelFlags.Trace, null);
                lines[1] = new LogLine(1, 1, 1, new LogLineSourceId(0), "bar", LevelFlags.Trace, null);
            });
            multiDataSource.Setup(x => x.FilteredLogFile).Returns(mergedLogFile.Object);

            canvas.UpdateDataSources(multiDataSource.Object, new LogFileSection(0, 2), 0);
            canvas.DataSources.Should().HaveCount(2);
            canvas.DataSources[0].Should().NotBeNull();
            canvas.DataSources[0].Text.Should().Be("TH");
            canvas.DataSources[1].Should().NotBeNull();
            canvas.DataSources[1].Text.Should().Be("FB");
        }
        public void TestUpdateLineNumbers3()
        {
            var canvas          = new DataSourceCanvas(TextSettings.Default);
            var multiDataSource = new Mock <IMultiDataSource>();
            var dataSource0     = new Mock <IDataSource>();

            dataSource0.Setup(x => x.FullFileName).Returns(@"A:\foo\bar.txt");

            var dataSource1 = new Mock <IDataSource>();

            dataSource1.Setup(x => x.FullFileName).Returns(@"B:\a really long file name.log");

            multiDataSource.Setup(x => x.OriginalSources).Returns(new[] { dataSource0.Object, dataSource1.Object });
            var mergedLogFile = new Mock <ILogFile>();

            mergedLogFile.Setup(x => x.Count).Returns(2);
            mergedLogFile.Setup(x => x.GetSection(It.IsAny <LogFileSection>(), It.IsAny <LogLine[]>()))
            .Callback((LogFileSection section, LogLine[] lines) =>
            {
                lines[0] = new LogLine(0, 0, 0, new LogLineSourceId(1), "foo", LevelFlags.Trace, null);
                lines[1] = new LogLine(1, 1, 1, new LogLineSourceId(0), "bar", LevelFlags.Trace, null);
            });
            multiDataSource.Setup(x => x.UnfilteredLogFile).Returns(mergedLogFile.Object);

            canvas.UpdateDataSources(multiDataSource.Object, new LogFileSection(0, 2), 0);
            canvas.DataSources.Should().HaveCount(2);
            canvas.DataSources[0].Should().NotBeNull();
            canvas.DataSources[0].Text.Should().Be("a really long file nam");
            canvas.DataSources[1].Should().NotBeNull();
            canvas.DataSources[1].Text.Should().Be("bar.txt");
        }
Example #6
0
        public void TestUpdateLineNumbers1()
        {
            var canvas = new DataSourceCanvas();

            canvas.UpdateDataSources(null, new LogFileSection(0, 0), 0);
            canvas.DataSources.Should().BeEmpty();
        }
Example #7
0
        public void TestUpdateLineNumbers2()
        {
            var canvas     = new DataSourceCanvas(TextSettings.Default);
            var dataSource = new Mock <IDataSource>();

            canvas.UpdateDataSources(dataSource.Object, new LogSourceSection(0, 0), 0);
            canvas.DataSources.Should().BeEmpty();
        }
Example #8
0
        public void TestUpdateNoSources([Values(DataSourceDisplayMode.Filename, DataSourceDisplayMode.CharacterCode)] DataSourceDisplayMode displayMode)
        {
            var canvas = new DataSourceCanvas(TextSettings.Default)
            {
                DisplayMode = displayMode
            };
            var folderDataSource = new Mock <IFolderDataSource>();

            folderDataSource.Setup(x => x.FilteredLogSource).Returns(new Mock <ILogSource>().Object);
            var dataSource = new Mock <IDataSource>();

            folderDataSource.Setup(x => x.OriginalSources).Returns(new List <IDataSource> {
                dataSource.Object
            });

            new Action(() => canvas.UpdateDataSources(folderDataSource.Object, new LogSourceSection(0, 2), 0))
            .Should().NotThrow();
        }
Example #9
0
        public void TestUpdateLineNumbers4()
        {
            var canvas = new DataSourceCanvas(TextSettings.Default)
            {
                DisplayMode = DataSourceDisplayMode.CharacterCode
            };

            var multiDataSource = new Mock <IMultiDataSource>();
            var dataSource0     = new Mock <IDataSource>();

            dataSource0.Setup(x => x.CharacterCode).Returns("FB");

            var dataSource1 = new Mock <IDataSource>();

            dataSource1.Setup(x => x.CharacterCode).Returns(@"TH");

            multiDataSource.Setup(x => x.OriginalSources).Returns(new[] { dataSource0.Object, dataSource1.Object });
            var mergedLogFile = new InMemoryLogSource(Columns.SourceId);

            mergedLogFile.Add(new Dictionary <IColumnDescriptor, object>
            {
                { Columns.SourceId, new LogEntrySourceId(1) },
                { Columns.RawContent, "foo" }
            });
            mergedLogFile.Add(new Dictionary <IColumnDescriptor, object>
            {
                { Columns.SourceId, new LogEntrySourceId(0) },
                { Columns.RawContent, "bar" }
            });
            multiDataSource.Setup(x => x.FilteredLogSource).Returns(mergedLogFile);

            canvas.UpdateDataSources(multiDataSource.Object, new LogSourceSection(0, 2), 0);
            canvas.DataSources.Should().HaveCount(2);
            canvas.DataSources[0].Should().NotBeNull();
            canvas.DataSources[0].Text.Should().Be("TH");
            canvas.DataSources[1].Should().NotBeNull();
            canvas.DataSources[1].Text.Should().Be("FB");
        }
Example #10
0
        public LogEntryListView()
        {
            var textSettings = new TextSettings();
            var textBrushes  = new TextBrushes(null);

            RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(value: 1, type: GridUnitType.Star)
            });
            RowDefinitions.Add(new RowDefinition {
                Height = new GridLength(value: 1, type: GridUnitType.Auto)
            });

            _verticalScrollBar = new FlatScrollBar
            {
                Name      = "PART_VerticalScrollBar",
                Thickness = 18
            };
            _verticalScrollBar.ValueChanged += VerticalScrollBarOnValueChanged;
            _verticalScrollBar.Scroll       += VerticalScrollBarOnScroll;
            _verticalScrollBar.SetValue(RowProperty, value: 0);
            _verticalScrollBar.SetValue(ColumnProperty, value: 6);

            _horizontalScrollBar = new FlatScrollBar
            {
                Name        = "PART_HorizontalScrollBar",
                Orientation = Orientation.Horizontal,
                Thickness   = 18
            };
            _horizontalScrollBar.SetValue(RowProperty, value: 1);
            _horizontalScrollBar.SetValue(ColumnProperty, value: 0);
            _horizontalScrollBar.SetValue(ColumnSpanProperty, value: 6);

            _columnPresenterFactories = new Dictionary <IColumnDescriptor, Func <TextSettings, AbstractLogColumnPresenter> >
            {
                { Columns.DeltaTime, settings => new DeltaTimeColumnPresenter(settings) },
                { Columns.ElapsedTime, settings => new ElapsedTimeColumnPresenter(settings) },
                { Columns.OriginalLineNumber, settings => new OriginalLineNumberColumnPresenter(settings) },
                { Columns.LogLevel, settings => new  LogLevelColumnPresenter(settings) },
                { Columns.Message, settings => new MessageColumnPresenter(settings) },
                { Columns.Timestamp, settings => new TimestampColumnPresenter(settings) }
            };
            _columnPresenters          = new Dictionary <IColumnDescriptor, AbstractLogColumnPresenter>();
            _columnDefinitionsByColumn = new Dictionary <IColumnDescriptor, ColumnDefinition>();
            _columnsByColumnDefinition = new Dictionary <ColumnDefinition, IColumnDescriptor>();

            _lineNumberColumn = (OriginalLineNumberColumnPresenter)AddColumn(Columns.OriginalLineNumber);
            _lineNumberColumn.SetValue(MarginProperty, new Thickness(left: 5, top: 0, right: 5, bottom: 0));

            _dataSourceCanvas = new DataSourceCanvas(textSettings);
            _dataSourceCanvas.SetValue(RowProperty, value: 0);
            _dataSourceCanvas.SetValue(ColumnProperty, value: 1);
            _dataSourceCanvas.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0));
            ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(value: 1, type: GridUnitType.Auto)
            });

            _deltaTimesColumn            = (DeltaTimeColumnPresenter)AddColumn(Columns.DeltaTime);
            _deltaTimesColumn.Visibility = Visibility.Collapsed;
            _deltaTimesColumn.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0));

            _elapsedTimeColumn            = (ElapsedTimeColumnPresenter)AddColumn(Columns.ElapsedTime);
            _elapsedTimeColumn.Visibility = Visibility.Collapsed;
            _elapsedTimeColumn.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0));

            _fixedColumns = _columnPresenters.Keys.ToList();

            _messageColumnDefinition = new ColumnDefinition {
                Width = new GridLength(value: 1, type: GridUnitType.Star)
            };
            ColumnDefinitions.Add(_messageColumnDefinition);
            var messageColumnIndex = ColumnDefinitions.IndexOf(_messageColumnDefinition);

            PartTextCanvas = new TextCanvas(_horizontalScrollBar, _verticalScrollBar, textSettings);
            PartTextCanvas.SetValue(RowProperty, value: 0);
            PartTextCanvas.SetValue(ColumnProperty, value: messageColumnIndex);
            PartTextCanvas.MouseWheelDown        += TextCanvasOnMouseWheelDown;
            PartTextCanvas.MouseWheelUp          += TextCanvasOnMouseWheelUp;
            PartTextCanvas.SizeChanged           += TextCanvasOnSizeChanged;
            PartTextCanvas.VisibleLinesChanged   += TextCanvasOnVisibleLinesChanged;
            PartTextCanvas.RequestBringIntoView  += TextCanvasOnRequestBringIntoView;
            PartTextCanvas.VisibleSectionChanged += TextCanvasOnVisibleSectionChanged;
            PartTextCanvas.OnSelectionChanged    += TextCanvasOnOnSelectionChanged;

            ChangeTextSettings(textSettings, textBrushes);

            var separator = new Rectangle
            {
                Fill  = new SolidColorBrush(Color.FromRgb(225, 228, 232)),
                Width = 2
            };

            separator.SetValue(RowProperty, value: 0);
            separator.SetValue(ColumnProperty, value: messageColumnIndex);
            separator.SetValue(MarginProperty, new Thickness(left: 0, top: 0, right: 5, bottom: 0));
            ColumnDefinitions.Add(new ColumnDefinition {
                Width = new GridLength(value: 1, type: GridUnitType.Auto)
            });

            Children.Add(_lineNumberColumn);
            Children.Add(_dataSourceCanvas);
            Children.Add(_deltaTimesColumn);
            Children.Add(_elapsedTimeColumn);
            Children.Add(separator);
            Children.Add(PartTextCanvas);
            Children.Add(_verticalScrollBar);
            Children.Add(_horizontalScrollBar);

            _timer = new DispatcherTimer(DispatcherPriority.Normal)
            {
                Interval = MaximumRefreshInterval,
            };
            _timer.Tick += OnTimer;
            Loaded      += OnLoaded;
            Unloaded    += OnUnloaded;
        }