public void When_cell_contains_unquoted_text_before_quoted_text_it_should_fail()
        {
            // Arrange
            using DelimitedValuesReader reader = new DelimitedValuesReaderBuilder()
                                                 .WithSingleColumnHeader()
                                                 .WithoutRows()
                                                 .WithDataLine("a" + DefaultTextQualifier + "b" + DefaultTextQualifier)
                                                 .Build();

            // Act
            // ReSharper disable once AccessToDisposedClosure
            Action action = () => _ = reader.Take(1).ToArray();

            // Assert
            action.Should().ThrowExactly <DelimitedValuesParseException>().WithMessage("Text qualifier must be the first non-whitespace character of a cell.");
        }
        public void When_lines_are_broken_using_carriage_returns_followed_by_with_line_feeds_it_should_report_the_correct_starting_line_number()
        {
            // Arrange
            const string lineBreaker            = "\r\n";
            const string cellValueWithLineBreak = "Cell with" + lineBreaker + "line break";
            string       rowWithLineBreak       = DefaultTextQualifier + cellValueWithLineBreak + DefaultTextQualifier;

            using DelimitedValuesReader reader = new DelimitedValuesReaderBuilder()
                                                 .WithSingleColumnHeader()
                                                 .WithoutRows()
                                                 .WithDataLine(rowWithLineBreak)
                                                 .WithDataLine(rowWithLineBreak)
                                                 .Build();

            // Act
            _ = reader.Take(2).ToArray();

            // Assert
            reader.LineNumber.Should().Be(4);
        }
        public void When_lines_are_broken_using_carriage_returns_it_should_report_the_correct_starting_line_number()
        {
            // Arrange
            const string lineBreaker = "\r";
            const string cellValueWithLineBreak = "Cell with" + lineBreaker + "line break";
            string rowWithLineBreak = DefaultTextQualifier + cellValueWithLineBreak + DefaultTextQualifier;

            DelimitedValuesReader reader = new DelimitedValuesReaderBuilder()
                .WithSingleColumnHeader()
                .WithoutRows()
                .WithDataLine(rowWithLineBreak)
                .WithDataLine(rowWithLineBreak)
                .Build();

            // Act
            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            reader.Take(2).ToArray();

            // Assert
            reader.LineNumber.Should().Be(4);
        }
        public void When_cell_contains_unquoted_text_after_quoted_text_it_should_fail()
        {
            // Arrange
            DelimitedValuesReader reader = new DelimitedValuesReaderBuilder()
                .WithSingleColumnHeader()
                .WithoutRows()
                .WithDataLine(DefaultTextQualifier + "a" + DefaultTextQualifier + "b")
                .Build();

            // Act
            // ReSharper disable once ReturnValueOfPureMethodIsNotUsed
            Action action = () => reader.Take(1).ToArray();

            // Assert
            action.ShouldThrow<DelimitedValuesParseException>()
                .WithMessage("Text-qualified cell cannot contain non-whitespace after the closing text qualifier.");
        }