Skip to content

Commit

Permalink
Update argon (#1145)
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonCropp committed Feb 14, 2024
1 parent 8a239dd commit 40aac19
Show file tree
Hide file tree
Showing 12 changed files with 90 additions and 42 deletions.
2 changes: 1 addition & 1 deletion src/FSharpTests/FSharpTests.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
</PropertyGroup>
<ItemGroup>
<Compile Include="Tests.fs" />
<PackageReference Include="Argon.FSharp" Version="0.15.0" />
<PackageReference Include="Argon.FSharp" Version="0.17.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
<PackageReference Include="xunit" Version="2.6.6" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6" PrivateAssets="all" />
Expand Down
4 changes: 3 additions & 1 deletion src/Verify/Serialization/Converters/DateConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ public override void Write(VerifyJsonWriter writer, Date value)
return;
}

writer.WriteRawValueWithScrubbers(value.ToString("yyyy-MM-dd", Culture.InvariantCulture));
Span<char> buffer = stackalloc char[10];
value.TryFormat(buffer, out _, "yyyy-MM-dd".AsSpan(), Culture.InvariantCulture);
writer.WriteRawValueWithScrubbers(buffer);
}
}
#endif
4 changes: 3 additions & 1 deletion src/Verify/Serialization/Converters/TimeConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ public override void Write(VerifyJsonWriter writer, Time value)
return;
}

writer.WriteRawValueWithScrubbers(value.ToString("h:mm tt", Culture.InvariantCulture));
Span<char> buffer = stackalloc char[8];
value.TryFormat(buffer, out var charsWritten, "h:mm tt".AsSpan(), Culture.InvariantCulture);
writer.WriteRawValueWithScrubbers(buffer[..charsWritten]);
}
}
#endif
2 changes: 1 addition & 1 deletion src/Verify/Serialization/CustomContractResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ string ResolveDictionaryKey(JsonDictionaryContract contract, string name, object

if (original is string stringValue)
{
if (settings.TryParseConvert(counter, stringValue, out var result))
if (settings.TryParseConvert(counter, stringValue.AsSpan(), out var result))
{
return result;
}
Expand Down
7 changes: 4 additions & 3 deletions src/Verify/Serialization/Scrubbers/ApplyScrubbers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,10 @@ public static void ApplyForExtension(string extension, StringBuilder target, Ver
target.FixNewlines();
}

public static string ApplyForPropertyValue(string value, VerifySettings settings, Counter counter)
public static CharSpan ApplyForPropertyValue(CharSpan value, VerifySettings settings, Counter counter)
{
var builder = new StringBuilder(value);
var builder = new StringBuilder(value.Length);
builder.Append(value);
foreach (var scrubber in settings.InstanceScrubbers)
{
scrubber(builder, counter);
Expand All @@ -161,7 +162,7 @@ public static string ApplyForPropertyValue(string value, VerifySettings settings
}

builder.FixNewlines();
return builder.ToString();
return builder.AsSpan();
}

static string CleanPath(string directory) =>
Expand Down
2 changes: 1 addition & 1 deletion src/Verify/Serialization/Scrubbers/SharedScrubber.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
partial class SerializationSettings
{
internal bool TryConvertString(Counter counter, string value, [NotNullWhen(true)] out string? result)
internal bool TryConvertString(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (TryParseConvertGuid(counter, value, out result))
{
Expand Down
45 changes: 27 additions & 18 deletions src/Verify/Serialization/Scrubbers/SharedScrubber_Dates.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ internal bool TryConvert(Counter counter, DateTime value, [NotNullWhen(true)] ou
}

#if NET6_0_OR_GREATER
internal bool TryParseConvertDate(Counter counter, string value, [NotNullWhen(true)] out string? result)
internal bool TryParseConvertDate(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (scrubDateTimes)
{
Expand Down Expand Up @@ -63,7 +63,7 @@ internal static string Convert(Counter counter, Date date)
return counter.NextString(date);
}

internal bool TryParseConvertTime(Counter counter, string value, [NotNullWhen(true)] out string? result)
internal bool TryParseConvertTime(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (scrubDateTimes)
{
Expand All @@ -83,14 +83,14 @@ internal bool TryParseConvertTime(Counter counter, string value, [NotNullWhen(tr

internal bool TryConvert(Counter counter, Time value, [NotNullWhen(true)] out string? result)
{
if (!scrubDateTimes)
if (scrubDateTimes)
{
result = null;
return false;
result = Convert(counter, value);
return true;
}

result = Convert(counter, value);
return true;
result = null;
return false;
}

static string Convert(Counter counter, Time time)
Expand Down Expand Up @@ -152,19 +152,19 @@ internal static string Convert(Counter counter, DateTimeOffset date)
return counter.NextString(date);
}

internal bool TryParseConvertDateTime(Counter counter, string value, [NotNullWhen(true)] out string? result)
internal bool TryParseConvertDateTime(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (scrubDateTimes)
{
if (TryParse("yyyy-MM-ddTHH:mm:ss.FFFFFFFK", out var dateTime))
if (TryParseDateTime(value, "yyyy-MM-ddTHH:mm:ss.FFFFFFFK", out var dateTime))
{
result = Convert(counter, dateTime);
return true;
}

foreach (var format in datetimeFormats)
{
if (TryParse(format, out dateTime))
if (TryParseDateTime(value, format, out dateTime))
{
result = Convert(counter, dateTime);
return true;
Expand All @@ -174,24 +174,28 @@ internal bool TryParseConvertDateTime(Counter counter, string value, [NotNullWhe

result = null;
return false;

bool TryParse(string format, out DateTime dateTime) =>
DateTime.TryParseExact(value, format, null, DateTimeStyles.None, out dateTime);
}

internal bool TryParseConvertDateTimeOffset(Counter counter, string value, [NotNullWhen(true)] out string? result)
static bool TryParseDateTime(CharSpan value, string format, out DateTime dateTime) =>
#if NET47_OR_GREATER
DateTime.TryParseExact(value.ToString(), format, null, DateTimeStyles.None, out dateTime);
#else
DateTime.TryParseExact(value, format.AsSpan(), null, DateTimeStyles.None, out dateTime);
#endif

internal bool TryParseConvertDateTimeOffset(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (scrubDateTimes)
{
if (TryParse("yyyy-MM-ddTHH:mm:ss.FFFFFFFK", out var dateTimeOffset))
if (TryParseDateTimeOffset(value, "yyyy-MM-ddTHH:mm:ss.FFFFFFFK", out var dateTimeOffset))
{
result = Convert(counter, dateTimeOffset);
return true;
}

foreach (var format in datetimeOffsetFormats)
{
if (TryParse(format, out dateTimeOffset))
if (TryParseDateTimeOffset(value, format, out dateTimeOffset))
{
result = Convert(counter, dateTimeOffset);
return true;
Expand All @@ -202,7 +206,12 @@ internal bool TryParseConvertDateTimeOffset(Counter counter, string value, [NotN
result = null;
return false;

bool TryParse(string format, out DateTimeOffset dateTimeOffset) =>
DateTimeOffset.TryParseExact(value, format, null, DateTimeStyles.None, out dateTimeOffset);
}

static bool TryParseDateTimeOffset(CharSpan value, string format, out DateTimeOffset dateTimeOffset) =>
#if NET47_OR_GREATER
DateTimeOffset.TryParseExact(value.ToString(), format, null, DateTimeStyles.None, out dateTimeOffset);
#else
DateTimeOffset.TryParseExact(value, format, null, DateTimeStyles.None, out dateTimeOffset);
#endif
}
8 changes: 6 additions & 2 deletions src/Verify/Serialization/Scrubbers/SharedScrubber_Guids.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ internal static string Convert(Counter counter, Guid guid)
return counter.NextString(guid);
}

internal bool TryParseConvertGuid(Counter counter, string value, [NotNullWhen(true)] out string? result)
internal bool TryParseConvertGuid(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (scrubGuids)
{
#if NET47_OR_GREATER
if (Guid.TryParse(value.ToString(), out var guid))
#else
if (Guid.TryParse(value, out var guid))
#endif
{
result = Convert(counter, guid);
return true;
Expand All @@ -37,7 +41,7 @@ internal bool TryParseConvertGuid(Counter counter, string value, [NotNullWhen(tr
return false;
}

internal bool TryParseConvert(Counter counter, string value, [NotNullWhen(true)] out string? result)
internal bool TryParseConvert(Counter counter, CharSpan value, [NotNullWhen(true)] out string? result)
{
if (TryParseConvertGuid(counter, value, out result))
{
Expand Down
49 changes: 39 additions & 10 deletions src/Verify/Serialization/VerifyJsonWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ public class VerifyJsonWriter :
}
}

public void WriteRawValueIfNoStrict(string value)
public void WriteRawValueIfNoStrict(string value) =>
WriteRawValueIfNoStrict(value.AsSpan());

public void WriteRawValueIfNoStrict(CharSpan value)
{
if (VerifierSettings.StrictJson)
{
Expand All @@ -40,9 +43,12 @@ public void WriteRawValueIfNoStrict(string value)
base.WriteRawValue(value);
}

public void WriteRawValueWithScrubbers(string value)
public void WriteRawValueWithScrubbers(string value) =>
WriteRawValueWithScrubbers(value.AsSpan());

public void WriteRawValueWithScrubbers(CharSpan value)
{
if (value is "")
if (value.Length == 0)
{
WriteRawValueIfNoStrict(value);
return;
Expand All @@ -52,6 +58,16 @@ public void WriteRawValueWithScrubbers(string value)
WriteRawValueIfNoStrict(value);
}

public override void WritePropertyName(CharSpan name, bool escape)
{
if (VerifierSettings.StrictJson)
{
escape = false;
}

base.WritePropertyName(name, escape);
}

public override void WritePropertyName(string name, bool escape)
{
if (VerifierSettings.StrictJson)
Expand All @@ -70,6 +86,15 @@ public override void WriteValue(string? value)
return;
}

WriteValue(value.AsSpan());
}

public override void WriteValue(StringBuilder? value) =>
// TODO:
WriteValue(value?.ToString());

public override void WriteValue(CharSpan value)
{
if (value is "")
{
WriteRawValueIfNoStrict(value);
Expand All @@ -93,12 +118,15 @@ public override void WriteValue(string? value)
{
base.Flush();
var builderLength = builder.Length;
if (!value.StartsWith('\n'))
if (value[0] != '\n')
{
value = $"\n{value}";
//todo: avoid alloc
WriteRawValue($"\n{value.ToString()}");
}
else
{
WriteRawValue(value);
}

WriteRawValue(value);
base.Flush();
builder.Remove(builderLength, 1);
return;
Expand Down Expand Up @@ -151,7 +179,9 @@ public override void WriteValue(Guid value)
return;
}

WriteRawValueWithScrubbers(value.ToString("D", Culture.InvariantCulture));
Span<char> buffer = stackalloc char[36];
value.TryFormat(buffer, out _);
WriteRawValueWithScrubbers(buffer);
}

/// <summary>
Expand Down Expand Up @@ -224,8 +254,7 @@ void WriteOrSerialize(object converted)
{
WriteValue(convertedString);
}
else if (converted.GetType()
.IsPrimitive)
else if (converted.GetType().IsPrimitive)
{
WriteValue(converted);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Verify/Verifier/InnerVerifier_Json.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public async Task<VerifyResult> VerifyJson(Stream? target)

using var reader = new StreamReader(target);
using var textReader = new JsonTextReader(reader);
var token = await JToken.LoadAsync(textReader);
var token = JToken.Load(textReader);
return await VerifyJson(token);
}

Expand Down
5 changes: 3 additions & 2 deletions src/Verify/Verifier/InnerVerifier_Xml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,12 @@ Task<VerifyResult> VerifyXml(XContainer? target)

string ConvertValue(SerializationSettings serialization, string value)
{
if (serialization.TryConvertString(counter, value, out var result))
var span = value.AsSpan();
if (serialization.TryConvertString(counter, span, out var result))
{
return result;
}

return ApplyScrubbers.ApplyForPropertyValue(value, settings, counter);
return ApplyScrubbers.ApplyForPropertyValue(span, settings, counter).ToString();
}
}
2 changes: 1 addition & 1 deletion src/Verify/Verify.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<PackageReference Include="DiffEngine" Version="15.2.0" />
<PackageReference Include="EmptyFiles" Version="8.1.0" PrivateAssets="None" />
<PackageReference Include="SimpleInfoName" Version="2.2.0" />
<PackageReference Include="Argon" Version="0.15.0" />
<PackageReference Include="Argon" Version="0.17.0" />
<PackageReference Include="ProjectDefaults" Version="1.0.109" PrivateAssets="all" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" Condition="$(TargetFramework.StartsWith('net46'))" />
<None Include="buildTransitive\Verify.props" Pack="true" PackagePath="buildTransitive\Verify.props" />
Expand Down

0 comments on commit 40aac19

Please sign in to comment.