Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions Semver.Test/SemVersionParsingTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,8 @@ public void ParseLooseValidTest(string versionString, int major, int minor, int
public void ParseLooseInvalidThrowsArgumentExceptionTest(string versionString)
{
var ex = Assert.Throws<ArgumentException>(() => SemVersion.Parse(versionString));
Assert.Equal($"Invalid version '{versionString}'.{Environment.NewLine}Parameter name: version", ex.Message);
Assert.StartsWith($"Invalid version '{versionString}'.", ex.Message);
Assert.Equal("version", ex.ParamName);
}

[Theory]
Expand All @@ -326,8 +327,8 @@ public void ParseLooseInvalidThrowsOverflowExceptionTest(string versionString)
public void ParseLooseNullTest()
{
var ex = Assert.Throws<ArgumentNullException>(() => SemVersion.Parse(null));
// TODO that is a strange error message, should be version
Assert.Equal($"Value cannot be null.{Environment.NewLine}Parameter name: input", ex.Message);
Assert.StartsWith("Value cannot be null.", ex.Message);
Assert.Equal("version", ex.ParamName);
}

[Fact]
Expand Down Expand Up @@ -373,7 +374,8 @@ public void ParseStrictInvalidExamples(string versionString)
public void ParseStrictInvalidThrowsArgumentExceptionTest(string versionString)
{
var ex = Assert.Throws<ArgumentException>(() => SemVersion.Parse(versionString, true));
Assert.Equal($"Invalid version '{versionString}'.{Environment.NewLine}Parameter name: version", ex.Message);
Assert.StartsWith($"Invalid version '{versionString}'.", ex.Message);
Assert.Equal("version", ex.ParamName);
}

[Theory]
Expand Down Expand Up @@ -406,8 +408,8 @@ public void ParseStrictInvalidThrowsInvalidOperationMissingMinorPatchTest(string
public void ParseStrictNullTest()
{
var ex = Assert.Throws<ArgumentNullException>(() => SemVersion.Parse(null, true));
// TODO that is a strange error message, should be version
Assert.Equal($"Value cannot be null.{Environment.NewLine}Parameter name: input", ex.Message);
Assert.StartsWith("Value cannot be null.", ex.Message);
Assert.Equal("version", ex.ParamName);
}

[Theory]
Expand Down Expand Up @@ -522,7 +524,8 @@ public void ImplicitConversionFromInvalidStringThrowsArgumentExceptionTest(strin
{
SemVersion _ = versionString;
});
Assert.Equal($"Invalid version '{versionString}'.{Environment.NewLine}Parameter name: version", ex.Message);
Assert.StartsWith($"Invalid version '{versionString}'.", ex.Message);
Assert.Equal("version", ex.ParamName);
}

[Theory]
Expand All @@ -544,8 +547,8 @@ public void ImplicitConversionFromNullStringTest()
// Must use default otherwise it thinks `null` is of type SemVersion
SemVersion _ = default(string);
});
// TODO that is a strange error message, should be version
Assert.Equal($"Value cannot be null.{Environment.NewLine}Parameter name: input", ex.Message);
Assert.StartsWith("Value cannot be null.", ex.Message);
Assert.Equal("version", ex.ParamName);
}

/// <summary>
Expand Down
7 changes: 2 additions & 5 deletions Semver.Test/SemVersionTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using System;
using System.Globalization;
#if !NETSTANDARD
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
#endif
using Xunit;

namespace Semver.Test
Expand Down Expand Up @@ -176,7 +174,8 @@ public void ConstructSemVersionFromNullSystemVersionTest()
{
var ex = Assert.Throws<ArgumentNullException>(() => new SemVersion(null));

Assert.Equal("Value cannot be null.\r\nParameter name: version", ex.Message);
Assert.StartsWith("Value cannot be null.", ex.Message);
Assert.Equal("version", ex.ParamName);
}
#endregion

Expand Down Expand Up @@ -288,7 +287,6 @@ public void ChangeBuildTest()
}
#endregion

#if !NETSTANDARD
[Fact]
public void SerializationTest()
{
Expand All @@ -303,6 +301,5 @@ public void SerializationTest()
}
Assert.Equal(semVer, semVerSerializedDeserialized);
}
#endif
}
}
18 changes: 2 additions & 16 deletions Semver.Test/Semver.Test.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netcoreapp2.1;net452</TargetFrameworks>
<TargetFrameworks>netcoreapp3.1;net452</TargetFrameworks>
<IsPackable>false</IsPackable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<DebugType>portable</DebugType>
Expand All @@ -28,7 +28,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.3">
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand All @@ -42,18 +42,4 @@
</PackageReference>
</ItemGroup>

<PropertyGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.1' ">
<DefineConstants>$(DefineConstants);NETSTANDARD</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition=" '$(TargetFramework)' == 'net46' ">
<DefineConstants>$(DefineConstants);NET46</DefineConstants>
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net46' ">
<Reference Include="System.Runtime" />
<Reference Include="System" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>

</Project>
1 change: 1 addition & 0 deletions Semver/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

28 changes: 28 additions & 0 deletions Semver/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
override Semver.SemVersion.Equals(object obj) -> bool
override Semver.SemVersion.GetHashCode() -> int
override Semver.SemVersion.ToString() -> string
Semver.SemVersion
Semver.SemVersion.Build.get -> string
Semver.SemVersion.Change(int? major = null, int? minor = null, int? patch = null, string prerelease = null, string build = null) -> Semver.SemVersion
Semver.SemVersion.CompareByPrecedence(Semver.SemVersion other) -> int
Semver.SemVersion.CompareTo(object obj) -> int
Semver.SemVersion.CompareTo(Semver.SemVersion other) -> int
Semver.SemVersion.GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) -> void
Semver.SemVersion.Major.get -> int
Semver.SemVersion.Minor.get -> int
Semver.SemVersion.Patch.get -> int
Semver.SemVersion.PrecedenceMatches(Semver.SemVersion other) -> bool
Semver.SemVersion.Prerelease.get -> string
Semver.SemVersion.SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "", string build = "") -> void
Semver.SemVersion.SemVersion(System.Version version) -> void
static Semver.SemVersion.Compare(Semver.SemVersion versionA, Semver.SemVersion versionB) -> int
static Semver.SemVersion.Equals(Semver.SemVersion versionA, Semver.SemVersion versionB) -> bool
static Semver.SemVersion.implicit operator Semver.SemVersion(string version) -> Semver.SemVersion
static Semver.SemVersion.operator !=(Semver.SemVersion left, Semver.SemVersion right) -> bool
static Semver.SemVersion.operator <(Semver.SemVersion left, Semver.SemVersion right) -> bool
static Semver.SemVersion.operator <=(Semver.SemVersion left, Semver.SemVersion right) -> bool
static Semver.SemVersion.operator ==(Semver.SemVersion left, Semver.SemVersion right) -> bool
static Semver.SemVersion.operator >(Semver.SemVersion left, Semver.SemVersion right) -> bool
static Semver.SemVersion.operator >=(Semver.SemVersion left, Semver.SemVersion right) -> bool
static Semver.SemVersion.Parse(string version, bool strict = false) -> Semver.SemVersion
static Semver.SemVersion.TryParse(string version, out Semver.SemVersion semver, bool strict = false) -> bool
21 changes: 12 additions & 9 deletions Semver/SemVersion.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Globalization;
using System.Text;
#if !NETSTANDARD
#if SERIALIZABLE
using System.Runtime.Serialization;
using System.Security.Permissions;
#endif
Expand All @@ -13,11 +13,11 @@ namespace Semver
/// A semantic version implementation.
/// Conforms with v2.0.0 of http://semver.org
/// </summary>
#if NETSTANDARD
public sealed class SemVersion : IComparable<SemVersion>, IComparable
#else
#if SERIALIZABLE
[Serializable]
public sealed class SemVersion : IComparable<SemVersion>, IComparable, ISerializable
#else
public sealed class SemVersion : IComparable<SemVersion>, IComparable
#endif
{
private static readonly Regex ParseEx =
Expand All @@ -26,14 +26,14 @@ public sealed class SemVersion : IComparable<SemVersion>, IComparable, ISerializ
@"(?>\.(?<patch>\d+))?" +
@"(?>\-(?<pre>[0-9A-Za-z\-\.]+))?" +
@"(?>\+(?<build>[0-9A-Za-z\-\.]+))?$",
#if NETSTANDARD
RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture,
#else
#if COMPILED_REGEX
RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.ExplicitCapture,
#else
RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture,
#endif
TimeSpan.FromSeconds(0.5));

#if !NETSTANDARD
#if SERIALIZABLE
/// <summary>
/// Deserialize a <see cref="SemVersion"/>.
/// </summary>
Expand Down Expand Up @@ -107,6 +107,9 @@ public SemVersion(Version version)
/// <exception cref="OverflowException">The Major, Minor, or Patch versions are larger than <code>int.MaxValue</code>.</exception>
public static SemVersion Parse(string version, bool strict = false)
{
if (version == null)
throw new ArgumentNullException(nameof(version));
Copy link
Copy Markdown
Author

@khellang khellang Dec 21, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The lack of this exception was the reason for the following comments in the tests 😅

// TODO that is a strange error message, should be version


var match = ParseEx.Match(version);
if (!match.Success)
throw new ArgumentException($"Invalid version '{version}'.", nameof(version));
Expand Down Expand Up @@ -474,7 +477,7 @@ public override int GetHashCode()
}
}

#if !NETSTANDARD
#if SERIALIZABLE
/// <summary>
/// Populates a <see cref="SerializationInfo"/> with the data needed to serialize the target object.
/// </summary>
Expand Down
12 changes: 4 additions & 8 deletions Semver/Semver.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<Copyright>Copyright © 2013 Max Hauser</Copyright>
<AssemblyTitle>Semantic versioning</AssemblyTitle>
<Authors>Max Hauser</Authors>
<TargetFrameworks>netstandard1.1;net452</TargetFrameworks>
<TargetFrameworks>netstandard1.1;netstandard2.0;net452</TargetFrameworks>
<NoWarn>$(NoWarn);CS1591;CA1303</NoWarn>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<DebugType>portable</DebugType>
Expand All @@ -24,16 +24,12 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
</PropertyGroup>

<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.1' ">
<DefineConstants>$(DefineConstants);NETSTANDARD;NETSTANDARD1_1</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition=" '$(TargetFramework)' == 'net452' ">
<DefineConstants>$(DefineConstants);NET45</DefineConstants>
<PropertyGroup Condition=" '$(TargetFramework)' != 'netstandard1.1' ">
<DefineConstants>$(DefineConstants);SERIALIZABLE;COMPILED_REGEX</DefineConstants>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="5.0.3">
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand Down