public async Task Should_dispose_of_reader_when_finished()
        {
            // Given
            var lines         = new [] { "One", "Two", "Three" };
            var reader        = new FakeLineReader(lines);
            var processor     = new FakeLineProcessor();
            var fileProcessor = new FileProcessor(reader, processor);

            // When
            var result = (await fileProcessor.Process()).ToArray();

            // Then
            reader.Disposed.ShouldBeTrue();
        }
        public async Task Should_pass_each_line_to_processor()
        {
            // Given
            var lines         = new [] { "One", "Two", "Three" };
            var reader        = new FakeLineReader(lines);
            var processor     = new FakeLineProcessor();
            var fileProcessor = new FileProcessor(reader, processor);

            // When
            var result = (await fileProcessor.Process()).ToArray();

            // Then
            processor.PassedLines.Count.ShouldEqual(3);
            processor.PassedLines[0].ShouldEqual("One");
            processor.PassedLines[1].ShouldEqual("Two");
            processor.PassedLines[2].ShouldEqual("Three");
        }
        public async Task Should_skip_lines_if_set()
        {
            // Given
            var lines         = new [] { "Nope", "Nope2", "One", "Two", "Three" };
            var reader        = new FakeLineReader(lines);
            var processor     = new FakeLineProcessor();
            var fileProcessor = new FileProcessor(reader, processor)
            {
                Skip = 2
            };

            // When
            var result = (await fileProcessor.Process()).ToArray();

            // Then
            processor.PassedLines.Count.ShouldEqual(3);
            processor.PassedLines[0].ShouldEqual("One");
            processor.PassedLines[1].ShouldEqual("Two");
            processor.PassedLines[2].ShouldEqual("Three");
        }