Skip to content

Commit

Permalink
fixed parser nullable handling
Browse files Browse the repository at this point in the history
  • Loading branch information
capjan committed Apr 19, 2022
1 parent f3236df commit 05ea640
Show file tree
Hide file tree
Showing 11 changed files with 59 additions and 25 deletions.
2 changes: 1 addition & 1 deletion Core.Test/Core.Test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<Product>CoreLib Unit Tests</Product>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Nullable>enable</Nullable>
<TargetFrameworks>net5.0;net6.0</TargetFrameworks>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
Expand Down
9 changes: 9 additions & 0 deletions Core.Test/ParserRelated/DateTimeParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,13 @@ public void BasicTest()
Assert.Equal(new DateTime(2020,06,17, 1,2,3, 123), parser.ParseOrDefault("2020-06-17 01:02:03.123456"));
Assert.Equal(new DateTime(1976,7,10), parser.ParseOrFallback("", new DateTime(1976,7,10)));
}

[Fact]
public void ParseOptionalDatetime()
{
var sut = new DateTimeParser();

var result = sut.ParseOrNull(null);
Assert.False(result.HasValue);
}
}
16 changes: 16 additions & 0 deletions Core.Test/ParserRelated/GeoCircleParserTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Core.Extensions.ParserRelated;
using Core.Parser.Special;
using Xunit;

namespace Core.Test.ParserRelated;

public class GeoCircleParserTest
{
[Fact]
public void BasicTest()
{
var sut = new GeoCircleParser();
var result = sut.ParseOrDefault(null);
Assert.Null(result);
}
}
4 changes: 2 additions & 2 deletions Core/Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

<PropertyGroup>
<Title>CoreLib</Title>
<TargetFrameworks>net5.0;net6.0</TargetFrameworks>
<TargetFrameworks>net5.0;net6.0;netstandard2.0</TargetFrameworks>
<PackageId>Cap.Core</PackageId>
<Authors>Jan Ruhlaender</Authors>
<Product>CoreLib</Product>
<Description>Intended to be used in every project to reuse as much code as possible for daily coding tasks.</Description>
<Copyright>©2022 Jan Ruhlaender</Copyright>
<GeneratePackageOnBuild Condition="'$(Configuration)'=='Release'">false</GeneratePackageOnBuild>
<Version>8.2.0</Version>
<Version>9.0.0</Version>
<LangVersion>10</LangVersion>
<PackageProjectUrl>https://github.com/capjan/CoreLib</PackageProjectUrl>
<AssemblyName>CoreLib</AssemblyName>
Expand Down
8 changes: 4 additions & 4 deletions Core/Diagnostics/ICliResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ public interface ICliResult
/// <summary>
/// Called CLI Process (The wrapped program)
/// </summary>
string FileName { get; init; }
string FileName { get; set; }

/// <summary>
/// Used Arguments for the call
/// </summary>
string Arguments { get; init; }
string Arguments { get; set; }

/// <summary>
/// Returns the concatenated FileName + Arguments
Expand All @@ -20,10 +20,10 @@ public interface ICliResult
/// <summary>
/// Exit Code
/// </summary>
int ExitCode { get; init; }
int ExitCode { get; set; }

/// <summary>
/// Console Output (Merged stdout and stderr)
/// </summary>
string ConsoleOutput { get; init; }
string ConsoleOutput { get; set; }
}
8 changes: 4 additions & 4 deletions Core/Diagnostics/Impl/CliResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ public class CliResult : ICliResult
/// <summary>
/// Called CLI Process (The wrapped program)
/// </summary>
public string FileName { get; init; } = "";
public string FileName { get; set; } = "";

/// <summary>
/// Used Arguments for the call
/// </summary>
public string Arguments { get; init; } = "";
public string Arguments { get; set; } = "";

/// <summary>
/// Returns the concatenated FileName + Arguments
Expand All @@ -20,10 +20,10 @@ public class CliResult : ICliResult
/// <summary>
/// Exit Code
/// </summary>
public int ExitCode { get; init; }
public int ExitCode { get; set; }

/// <summary>
/// Console Output (Merged stdout and stderr)
/// </summary>
public string ConsoleOutput { get; init; } = "";
public string ConsoleOutput { get; set; } = "";
}
26 changes: 18 additions & 8 deletions Core/Extensions/ParserRelated/ParserExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public static T ParseOrFallback<T>(this IParser<T> parser, string input, T fallb
}
}

public static T? ParseOptional<T>(this IParser<T> parser, string input)
public static T? ParseOrNull<T>(this IParser<T> parser, string input) where T:struct
{
if (string.IsNullOrWhiteSpace(input))
{
Expand All @@ -49,7 +49,7 @@ public static T[] ParseToArrayOrFallback<T>(
this IParser<T> parser,
string input,
T[] fallback,
string separator = ",")
char separator = ',')
{
try
{
Expand All @@ -65,7 +65,7 @@ public static T[] ParseToArrayOrFallback<T>(
public static T[] ParseToArrayOrEmpty<T>(
this IParser<T> parser,
string input,
string separator = ",")
char separator = ',')
{
return parser.ParseToArrayOrFallback(input, Array.Empty<T>(), separator);
}
Expand All @@ -87,16 +87,26 @@ public static T[] ParseToArrayOrEmpty<T>(
}
}

public static T[] ParseToArray<T>(this IParser<T> parser, string input, string separator = ",")
public static T[] ParseToArray<T>(this IParser<T> parser, string input, char separator = ',')
{

return input
.Split(separator, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
.Split(new []{separator}, StringSplitOptions.RemoveEmptyEntries)
.Select(v => v.Trim())
.Select(parser.Parse)
.ToArray();
}

public static T ParseOrDefault<T>(this IParser<T> parser, string input) where T: struct


public static T? ParseOrDefault<T>(this IParser<T> parser, string input)
{
return parser.ParseOrFallback(input, default(T));
try
{
return parser.Parse(input);
}
catch
{
return default;
}
}
}
1 change: 0 additions & 1 deletion Core/Extensions/SecurityRelated/HashAlgorithmExt.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.Unicode;
using Core.Enums;
using Core.Extensions.TextRelated;
using Core.Security.Cryptography.Security;
Expand Down
6 changes: 3 additions & 3 deletions Core/Parser/AnyParser/AnyParserExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,19 @@ public static T ParseOrDefault<T>(this IAnyParser parser, string input) where T:
return concreteParser.ParseOrDefault(input);
}

public static T[] ParseToArrayOrFallback<T>(this IAnyParser parser, string input, T[] fallback, string separator = ",")
public static T[] ParseToArrayOrFallback<T>(this IAnyParser parser, string input, T[] fallback, char separator = ',')
{
var concreteParser = parser.Create<T>();
return concreteParser.ParseToArrayOrFallback(input, fallback, separator);
}

public static T[] ParseToArrayOrEmpty<T>(this IAnyParser parser, string input, string separator = ",")
public static T[] ParseToArrayOrEmpty<T>(this IAnyParser parser, string input, char separator = ',')
{
var concreteParser = parser.Create<T>();
return concreteParser.ParseToArrayOrEmpty(input, separator);
}

public static T[] ParseToArray<T>(this IAnyParser parser, string input, string separator = ",")
public static T[] ParseToArray<T>(this IAnyParser parser, string input, char separator = ',')
{
var concreteParser = parser.Create<T>();
return concreteParser.ParseToArray(input, separator);
Expand Down
2 changes: 1 addition & 1 deletion Core/Text/Formatter/BingMapsLinkFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void Write(IGeoLocation value, TextWriter writer)
var lon = value.Longitude.ToString(CultureInfo.InvariantCulture);

writer.Write($"https://bing.com/maps/default.aspx?cp={lat}~{lon}&lvl=16&dir=0&sty=a&sp=point.{lat}_{lon}");
if (!string.IsNullOrWhiteSpace(PinName))
if (PinName != null && !string.IsNullOrWhiteSpace(PinName))
{
var urlEncodedName = new DefaultUrlEncoder().Encode(PinName);
writer.Write($"_{urlEncodedName}");
Expand Down
2 changes: 1 addition & 1 deletion Core/Text/Impl/TextPosition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public bool Equals(ITextPosition? other)

public override int GetHashCode()
{
return HashCode.Combine(LineNumber, ColumnNumber);
return new {LineNumber, ColumnNumber}.GetHashCode();
}

public bool Equals(TextPosition? other)
Expand Down

0 comments on commit 05ea640

Please sign in to comment.