diff options
Diffstat (limited to 'tests/Cepis.Tests/CsvTests.cs')
| -rw-r--r-- | tests/Cepis.Tests/CsvTests.cs | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/Cepis.Tests/CsvTests.cs b/tests/Cepis.Tests/CsvTests.cs new file mode 100644 index 0000000..97a353f --- /dev/null +++ b/tests/Cepis.Tests/CsvTests.cs @@ -0,0 +1,79 @@ +namespace Cepis.Tests; + +/// <summary>The CSV reader behind the batch endpoint.</summary> +public sealed class CsvTests +{ + [Fact] + public void ReadsTheHeaderAndOneRecord() + { + var rows = Csv.Parse("a,b,c\n1,2,3\n"); + + var row = Assert.Single(rows); + Assert.Equal("1", row["a"]); + Assert.Equal("2", row["b"]); + Assert.Equal("3", row["c"]); + } + + [Fact] + public void AQuotedValueMayContainACommaAndANewline() + { + var rows = Csv.Parse("a,b\n\"Praça da Sé, lado ímpar\",\"two\nlines\"\n"); + + var row = Assert.Single(rows); + Assert.Equal("Praça da Sé, lado ímpar", row["a"]); + Assert.Equal("two\nlines", row["b"]); + } + + [Fact] + public void DoubledQuotesAreOneQuote() + { + var rows = Csv.Parse("a\n\"say \"\"hi\"\"\"\n"); + + Assert.Equal("say \"hi\"", Assert.Single(rows)["a"]); + } + + [Theory] + [InlineData("a,b\n1,2\n")] + [InlineData("a,b\r\n1,2\r\n")] + [InlineData("a,b\r1,2\r")] + [InlineData("a,b\n1,2")] + public void EveryLineEndingWorks(string text) + { + var rows = Csv.Parse(text); + + Assert.Equal("1", Assert.Single(rows)["a"]); + } + + [Fact] + public void ALeadingByteOrderMarkIsDropped() + { + var rows = Csv.Parse("\uFEFFa,b\n1,2\n"); + + Assert.Equal("1", Assert.Single(rows)["a"]); + } + + [Fact] + public void AnEmptyValueStaysEmpty() + { + var rows = Csv.Parse("a,b,c\n1,,3\n"); + + Assert.Equal("", Assert.Single(rows)["b"]); + } + + [Fact] + public void AShortRecordIsFilledOut() + { + var rows = Csv.Parse("a,b,c\n1\n"); + + var row = Assert.Single(rows); + Assert.Equal("1", row["a"]); + Assert.Equal("", row["b"]); + Assert.Equal("", row["c"]); + } + + [Fact] + public void AHeaderAloneYieldsNoRecords() => Assert.Empty(Csv.Parse("a,b,c\n")); + + [Fact] + public void AnEmptyDocumentYieldsNoRecords() => Assert.Empty(Csv.Parse("")); +} |