public void TestInvalidate5()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.FromMilliseconds(100), 100);

            notifier.OnRead(1);
            notifier.OnRead(-1);
            _changes.Should().Equal(new[] { LogFileSection.Reset });
            notifier.OnRead(-1);
            _changes.Should().Equal(new[] { LogFileSection.Reset });
            notifier.OnRead(-1);
            _changes.Should().Equal(new[] { LogFileSection.Reset });
        }
        public void TestInvalidate2()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.FromSeconds(1), 10);

            notifier.OnRead(10);
            notifier.OnRead(12);
            notifier.Invalidate(0, 12);
            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 10),
                LogFileSection.Invalidate(0, 10)
            },
                                    "Because the notifier should've reported only the first 10 changes and therefore Invalidate() only had to invalidate those 10 changes"
                                    );
            notifier.LastNumberOfLines.Should().Be(0);
        }
        public void TestCurrentLineChanged4()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.FromHours(1), 1000);

            notifier.OnRead(1000);
            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 1000)
            });
            notifier.OnRead(2000);
            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 1000),
                new LogFileSection(1000, 1000)
            });
        }
        public void TestCurrentLineChanged1()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.Zero, 1);

            notifier.OnRead(1);
            notifier.OnRead(2);
            notifier.OnRead(3);
            notifier.OnRead(4);

            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 1),
                new LogFileSection(1, 1),
                new LogFileSection(2, 1),
                new LogFileSection(3, 1)
            });
        }
        public void TestCurrentLineChanged2()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.FromHours(1), 4);

            _changes.Clear();

            notifier.OnRead(1);
            _changes.Should().BeEmpty();
            notifier.OnRead(2);
            _changes.Should().BeEmpty();
            notifier.OnRead(3);
            _changes.Should().BeEmpty();

            notifier.OnRead(4);
            _changes.Should().Equal(new[]
            {
                new LogFileSection(0, 4)
            });
        }
        public void TestInvalidate1()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.Zero, 1);

            notifier.OnRead(1);
            notifier.Invalidate(0, 1);
            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 1),
                LogFileSection.Invalidate(0, 1)
            });
            notifier.LastNumberOfLines.Should().Be(0);
        }
        public void TestInvalidate4()
        {
            var notifier = new LogFileListenerNotifier(_logFile.Object, _listener.Object, TimeSpan.FromMilliseconds(100), 100);

            notifier.OnRead(9);
            Thread.Sleep(TimeSpan.FromMilliseconds(1000));
            notifier.OnRead(9);
            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 9)
            });

            notifier.OnRead(35);
            notifier.Invalidate(10, 25);
            _changes.Should().Equal(new[]
            {
                LogFileSection.Reset,
                new LogFileSection(0, 9)
            },
                                    "Because the notifier should've reported only the first 10 changes and therefore Invalidate() only had to invalidate those 10 changes"
                                    );
            notifier.LastNumberOfLines.Should().Be(9);
        }