From 57a5583b4a0a90907ea411c02442eb53f726bab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20L=2E=20Charlier?= Date: Sun, 12 Jan 2025 00:11:31 +0100 Subject: [PATCH] fix: apply sequences to numeric fields (#94) --- .../Configuration/SchemaDescriptionBuilderTest.cs | 14 ++++++++++++++ .../Configuration/NumericFieldDescriptorBuilder.cs | 11 ++++++++++- PocketCsvReader/NumericFieldDescriptor.cs | 3 ++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/PocketCsvReader.Testing/Configuration/SchemaDescriptionBuilderTest.cs b/PocketCsvReader.Testing/Configuration/SchemaDescriptionBuilderTest.cs index 5502bb9..22049b8 100644 --- a/PocketCsvReader.Testing/Configuration/SchemaDescriptionBuilderTest.cs +++ b/PocketCsvReader.Testing/Configuration/SchemaDescriptionBuilderTest.cs @@ -145,4 +145,18 @@ public void EmptyNames_ShouldThrow() var ex = Assert.Throws(() => descriptor.Build()); Assert.That(ex!.Message.ToLower(), Does.Contain("empty or null")); } + + [Test] + public void IndexedWithSequences_ShouldSetSequences() + { + var descriptor = new SchemaDescriptorBuilder() + .Indexed() + .WithNumericField((f) => f.WithSequence("NaN", "0")) + .WithField((f) => f.WithSequence("", "Unknown")) + .Build(); + Assert.That(descriptor, Is.Not.Null); + Assert.That(descriptor!.Fields, Has.Length.EqualTo(2)); + Assert.That(descriptor.Fields[0].Sequences?.Count(), Is.EqualTo(1)); + Assert.That(descriptor.Fields[1].Sequences?.Count(), Is.EqualTo(1)); + } } diff --git a/PocketCsvReader/Configuration/NumericFieldDescriptorBuilder.cs b/PocketCsvReader/Configuration/NumericFieldDescriptorBuilder.cs index 3d3d2fe..87d1fa5 100644 --- a/PocketCsvReader/Configuration/NumericFieldDescriptorBuilder.cs +++ b/PocketCsvReader/Configuration/NumericFieldDescriptorBuilder.cs @@ -32,6 +32,15 @@ public NumericFieldDescriptorBuilder WithoutGroupChar() return this; } + public new NumericFieldDescriptorBuilder WithName(string value) + => (NumericFieldDescriptorBuilder)base.WithName(value); + + public new NumericFieldDescriptorBuilder WithFormat(string value) + => (NumericFieldDescriptorBuilder)base.WithFormat(value); + + public new NumericFieldDescriptorBuilder WithSequence(string pattern, string? value) + => (NumericFieldDescriptorBuilder)base.WithSequence(pattern, value); + public override FieldDescriptor Build() - => new NumericFieldDescriptor(_runtimeType, _name, _format, _decimalChar, _groupChar); + => new NumericFieldDescriptor(_runtimeType, _name, _format, _sequences?.ToImmutable(), _decimalChar, _groupChar); } diff --git a/PocketCsvReader/NumericFieldDescriptor.cs b/PocketCsvReader/NumericFieldDescriptor.cs index e8fa970..9ea0799 100644 --- a/PocketCsvReader/NumericFieldDescriptor.cs +++ b/PocketCsvReader/NumericFieldDescriptor.cs @@ -11,7 +11,8 @@ public record NumericFieldDescriptor Type RuntimeType , string? Name = null , string? Format = null + , ImmutableSequenceCollection? Sequences = null , char ? DecimalChar = null , char ? GroupChar = null -) : FieldDescriptor(RuntimeType, Name, Format) +) : FieldDescriptor(RuntimeType, Name, Format, Sequences) { }