From 151525c6058df8a33cb696073150e98af6364082 Mon Sep 17 00:00:00 2001 From: nietras Date: Sun, 26 Jan 2025 14:06:50 +0100 Subject: [PATCH] Add AsyncContinueOnCapturedContext to SepSpec (#240) --- README.md | 3 ++- src/Sep.Test/SepReaderColTest.cs | 4 ++-- src/Sep.Test/SepSpecTest.cs | 19 ++++++++++++++++++- src/Sep.Test/SepWriterColTest.cs | 2 +- src/Sep/SepReader.cs | 2 +- src/Sep/SepReaderExtensions.cs | 6 +++++- src/Sep/SepSpec.cs | 7 ++++++- src/Sep/SepWriter.cs | 2 +- src/Sep/SepWriterExtensions.cs | 6 +++++- 9 files changed, 41 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 45c6c682..63ec6e8f 100644 --- a/README.md +++ b/README.md @@ -2187,7 +2187,8 @@ namespace nietras.SeparatedValues public readonly struct SepSpec : System.IEquatable { public SepSpec() { } - public SepSpec(nietras.SeparatedValues.Sep sep, System.Globalization.CultureInfo? cultureInfo) { } + public SepSpec(nietras.SeparatedValues.Sep sep, System.Globalization.CultureInfo? cultureInfo, bool asyncContinueOnCapturedContext) { } + public bool AsyncContinueOnCapturedContext { get; init; } public System.Globalization.CultureInfo? CultureInfo { get; init; } public nietras.SeparatedValues.Sep Sep { get; init; } } diff --git a/src/Sep.Test/SepReaderColTest.cs b/src/Sep.Test/SepReaderColTest.cs index 265d4ef1..6e7568b6 100644 --- a/src/Sep.Test/SepReaderColTest.cs +++ b/src/Sep.Test/SepReaderColTest.cs @@ -295,11 +295,11 @@ static void Run(SepReader.ColAction action, string colValue = ColText, Func Sep.Reader(useConfigure).FromText(text), () => Sep.Default.Reader(useConfigure).FromText(text), () => ((Sep?)null).Reader(useConfigure).FromText(text), - () => new SepSpec(Sep.Default, null).Reader(useConfigure).FromText(text), + () => new SepSpec(Sep.Default, null, false).Reader(useConfigure).FromText(text), }; if (configure is null) { - createReaders.Add(() => new SepSpec(Sep.Default, null).Reader().FromText(text)); + createReaders.Add(() => new SepSpec(Sep.Default, null, false).Reader().FromText(text)); } foreach (var createReader in createReaders) diff --git a/src/Sep.Test/SepSpecTest.cs b/src/Sep.Test/SepSpecTest.cs index 48f680f9..c68d72db 100644 --- a/src/Sep.Test/SepSpecTest.cs +++ b/src/Sep.Test/SepSpecTest.cs @@ -13,14 +13,31 @@ public void SepSpecTest_Defaults() Assert.AreEqual(Sep.Default, sut.Sep); Assert.AreSame(SepDefaults.CultureInfo, sut.CultureInfo); + Assert.IsFalse(sut.AsyncContinueOnCapturedContext); + } + + [TestMethod] + public void SepSpecTest_Ctor_2() + { + var sut = new SepSpec(new(';'), CultureInfo.CurrentCulture); + + Assert.AreEqual(new Sep(';'), sut.Sep); + Assert.AreSame(CultureInfo.CurrentCulture, sut.CultureInfo); + Assert.IsFalse(sut.AsyncContinueOnCapturedContext); } [TestMethod] public void SepSpecTest_With() { - var sut = new SepSpec() with { Sep = new(';'), CultureInfo = CultureInfo.CurrentCulture }; + var sut = new SepSpec() with + { + Sep = new(';'), + CultureInfo = CultureInfo.CurrentCulture, + AsyncContinueOnCapturedContext = true, + }; Assert.AreEqual(new Sep(';'), sut.Sep); Assert.AreSame(CultureInfo.CurrentCulture, sut.CultureInfo); + Assert.IsTrue(sut.AsyncContinueOnCapturedContext); } } diff --git a/src/Sep.Test/SepWriterColTest.cs b/src/Sep.Test/SepWriterColTest.cs index 81686211..93834699 100644 --- a/src/Sep.Test/SepWriterColTest.cs +++ b/src/Sep.Test/SepWriterColTest.cs @@ -205,7 +205,7 @@ static async ValueTask Run(SepWriter.ColAction action, string? expectedColValue [ () => Sep.Writer(o => o with { CultureInfo = cultureInfo ?? SepDefaults.CultureInfo }).ToText(), () => Sep.Default.Writer(o => o with { CultureInfo = cultureInfo ?? SepDefaults.CultureInfo }).ToText(), - () => new SepSpec(Sep.Default, cultureInfo ?? SepDefaults.CultureInfo).Writer(o => o with { }).ToText(), + () => new SepSpec(Sep.Default, cultureInfo ?? SepDefaults.CultureInfo, false).Writer(o => o with { }).ToText(), ]; foreach (var createWriter in createWriters) { diff --git a/src/Sep/SepReader.cs b/src/Sep/SepReader.cs index 8e0549e2..5f8b4968 100644 --- a/src/Sep/SepReader.cs +++ b/src/Sep/SepReader.cs @@ -90,7 +90,7 @@ internal SepReader(Info info, in SepReaderOptions options, TextReader reader) } public bool IsEmpty { get; private set; } - public SepSpec Spec => new(new(_separator), _cultureInfo); + public SepSpec Spec => new(new(_separator), _cultureInfo, _continueOnCapturedContext); public bool HasHeader { get => _hasHeader; private set => _hasHeader = value; } public bool HasRows { get; private set; } public SepReaderHeader Header => _header; diff --git a/src/Sep/SepReaderExtensions.cs b/src/Sep/SepReaderExtensions.cs index f77fcc52..2aeb88b1 100644 --- a/src/Sep/SepReaderExtensions.cs +++ b/src/Sep/SepReaderExtensions.cs @@ -17,7 +17,11 @@ public static partial class SepReaderExtensions public static SepReaderOptions Reader(this Sep sep) => new(sep); public static SepReaderOptions Reader(this Sep? sep) => new(sep); public static SepReaderOptions Reader(this SepSpec spec) => - new SepReaderOptions(spec.Sep) with { CultureInfo = spec.CultureInfo }; + new SepReaderOptions(spec.Sep) with + { + CultureInfo = spec.CultureInfo, + AsyncContinueOnCapturedContext = spec.AsyncContinueOnCapturedContext + }; public static SepReaderOptions Reader(this Sep sep, Func configure) { diff --git a/src/Sep/SepSpec.cs b/src/Sep/SepSpec.cs index a75c1d24..82b3bd30 100644 --- a/src/Sep/SepSpec.cs +++ b/src/Sep/SepSpec.cs @@ -4,14 +4,19 @@ namespace nietras.SeparatedValues; public readonly record struct SepSpec { - public SepSpec() : this(Sep.Default, SepDefaults.CultureInfo) { } + public SepSpec() : this(Sep.Default, SepDefaults.CultureInfo, false) { } public SepSpec(Sep sep, CultureInfo? cultureInfo) + : this(sep, cultureInfo, false) { } + + public SepSpec(Sep sep, CultureInfo? cultureInfo, bool asyncContinueOnCapturedContext) { Sep = sep; CultureInfo = cultureInfo; + AsyncContinueOnCapturedContext = asyncContinueOnCapturedContext; } public Sep Sep { get; init; } public CultureInfo? CultureInfo { get; init; } + public bool AsyncContinueOnCapturedContext { get; init; } = false; } diff --git a/src/Sep/SepWriter.cs b/src/Sep/SepWriter.cs index 51146044..b912d7c7 100644 --- a/src/Sep/SepWriter.cs +++ b/src/Sep/SepWriter.cs @@ -53,7 +53,7 @@ internal SepWriter(SepWriterOptions options, TextWriter writer, ISepTextWriterDi Header = new(this); } - public SepSpec Spec => new(_sep, _cultureInfo); + public SepSpec Spec => new(_sep, _cultureInfo, _continueOnCapturedContext); public SepWriterHeader Header { get; } public Row NewRow() diff --git a/src/Sep/SepWriterExtensions.cs b/src/Sep/SepWriterExtensions.cs index 68f4035b..705e5eaf 100644 --- a/src/Sep/SepWriterExtensions.cs +++ b/src/Sep/SepWriterExtensions.cs @@ -16,7 +16,11 @@ public static partial class SepWriterExtensions public static SepWriterOptions Writer(this Sep sep) => new(sep); public static SepWriterOptions Writer(this SepSpec spec) => - new SepWriterOptions(spec.Sep) with { CultureInfo = spec.CultureInfo }; + new SepWriterOptions(spec.Sep) with + { + CultureInfo = spec.CultureInfo, + AsyncContinueOnCapturedContext = spec.AsyncContinueOnCapturedContext + }; public static SepWriterOptions Writer(this Sep sep, Func configure) {