diff --git a/PocketCsvReader.Testing/CsvDataReaderTest.cs b/PocketCsvReader.Testing/CsvDataReaderTest.cs index fb0efa6..d4d5f1c 100644 --- a/PocketCsvReader.Testing/CsvDataReaderTest.cs +++ b/PocketCsvReader.Testing/CsvDataReaderTest.cs @@ -405,6 +405,36 @@ public void GetFieldValue_WithoutSchema_CorrectParsing(string record) Assert.That(dataReader.GetFieldValue(1), Is.EqualTo(108m)); } + [Test] + [TestCase("foo\r\nd3c7f3e0-4b3a-4a95-a6b9-81a519e4a8c1")] + public void GetGuid_ValidGuid_CorrectParsing(string record) + { + var guid = new Guid("d3c7f3e0-4b3a-4a95-a6b9-81a519e4a8c1"); + var buffer = new MemoryStream(Encoding.UTF8.GetBytes(record)); + + var builder = new CsvReaderBuilder() + .WithDialect( + (dialect) => dialect + .WithDelimiter(';') + .WithHeader(true)) + .WithSchema( + (schema) => schema + .Named() + .WithField("foo") + ); + using var dataReader = builder.Build().ToDataReader(buffer); + dataReader.Read(); + Assert.That(dataReader.FieldCount, Is.EqualTo(1)); + Assert.That(dataReader.GetName(0), Is.EqualTo("foo")); + Assert.That(dataReader.GetFieldType(0), Is.EqualTo(typeof(Guid))); + Assert.That(dataReader.GetValue(0), Is.TypeOf()); + Assert.That(dataReader.GetFieldValue(0), Is.EqualTo(guid)); + Assert.That(dataReader.GetValue(0), Is.EqualTo(guid)); + Assert.That(dataReader[0], Is.EqualTo(guid)); + Assert.That(dataReader["foo"], Is.EqualTo(guid)); + Assert.That(dataReader.GetGuid(0), Is.EqualTo(guid)); + } + [Test] [TestCase("Ansi")] [TestCase("Utf16-BE")] diff --git a/PocketCsvReader/CsvDataReader.cs b/PocketCsvReader/CsvDataReader.cs index 8f0d18d..b59ec1b 100644 --- a/PocketCsvReader/CsvDataReader.cs +++ b/PocketCsvReader/CsvDataReader.cs @@ -276,7 +276,7 @@ protected bool TryGetFieldDescriptor(int i, [NotNullWhen(true)] out FieldDescrip } public float GetFloat(int i) => float.Parse(GetValueOrThrow(i), CultureInfo.InvariantCulture); - public Guid GetGuid(int i) => throw new NotImplementedException(); + public Guid GetGuid(int i) => Guid.Parse(GetValueOrThrow(i), CultureInfo.InvariantCulture); public short GetInt16(int i) => short.Parse(GetValueOrThrow(i), CultureInfo.InvariantCulture); public int GetInt32(int i) => int.Parse(GetValueOrThrow(i), CultureInfo.InvariantCulture); public long GetInt64(int i) => long.Parse(GetValueOrThrow(i), CultureInfo.InvariantCulture);