summaryrefslogtreecommitdiff
path: root/src/SMAPI.Tests/Utilities/SemanticVersionTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI.Tests/Utilities/SemanticVersionTests.cs')
-rw-r--r--src/SMAPI.Tests/Utilities/SemanticVersionTests.cs66
1 files changed, 43 insertions, 23 deletions
diff --git a/src/SMAPI.Tests/Utilities/SemanticVersionTests.cs b/src/SMAPI.Tests/Utilities/SemanticVersionTests.cs
index ac4ef39b..fedadba6 100644
--- a/src/SMAPI.Tests/Utilities/SemanticVersionTests.cs
+++ b/src/SMAPI.Tests/Utilities/SemanticVersionTests.cs
@@ -61,10 +61,10 @@ namespace SMAPI.Tests.Utilities
[TestCase("apple")]
[TestCase("-apple")]
[TestCase("-5")]
- public void Constructor_FromString_WithInvalidValues(string input)
+ public void Constructor_FromString_WithInvalidValues(string? input)
{
if (input == null)
- this.AssertAndLogException<ArgumentNullException>(() => new SemanticVersion(input));
+ this.AssertAndLogException<ArgumentNullException>(() => new SemanticVersion(input!));
else
this.AssertAndLogException<FormatException>(() => new SemanticVersion(input));
}
@@ -91,7 +91,7 @@ namespace SMAPI.Tests.Utilities
[TestCase("1.2.3.4-some-tag.4 ")]
public void Constructor_FromString_Standard_DisallowsNonStandardVersion(string input)
{
- Assert.Throws<FormatException>(() => new SemanticVersion(input));
+ Assert.Throws<FormatException>(() => _ = new SemanticVersion(input));
}
/// <summary>Assert the parsed version when constructed from standard parts.</summary>
@@ -110,7 +110,7 @@ namespace SMAPI.Tests.Utilities
[TestCase(1, 2, 3, "some-tag.4 ", null, ExpectedResult = "1.2.3-some-tag.4")]
[TestCase(1, 2, 3, "some-tag.4 ", "build.004", ExpectedResult = "1.2.3-some-tag.4+build.004")]
[TestCase(1, 2, 0, null, "3.4.5-build.004", ExpectedResult = "1.2.0+3.4.5-build.004")]
- public string Constructor_FromParts(int major, int minor, int patch, string prerelease, string build)
+ public string Constructor_FromParts(int major, int minor, int patch, string? prerelease, string? build)
{
// act
ISemanticVersion version = new SemanticVersion(major, minor, patch, prerelease, build);
@@ -217,11 +217,16 @@ namespace SMAPI.Tests.Utilities
[TestCase("1.0-beta.2", "1.0-beta.1", ExpectedResult = 1)]
[TestCase("1.0-beta.10", "1.0-beta.2", ExpectedResult = 1)]
[TestCase("1.0-beta-10", "1.0-beta-2", ExpectedResult = 1)]
- public int CompareTo(string versionStrA, string versionStrB)
+
+ // null
+ [TestCase("1.0.0", null, ExpectedResult = 1)] // null is always less than any value per CompareTo remarks
+ public int CompareTo(string versionStrA, string? versionStrB)
{
// arrange
ISemanticVersion versionA = new SemanticVersion(versionStrA);
- ISemanticVersion versionB = new SemanticVersion(versionStrB);
+ ISemanticVersion? versionB = versionStrB != null
+ ? new SemanticVersion(versionStrB)
+ : null;
// assert
return versionA.CompareTo(versionB);
@@ -260,14 +265,19 @@ namespace SMAPI.Tests.Utilities
[TestCase("1.0-beta.2", "1.0-beta.1", ExpectedResult = false)]
[TestCase("1.0-beta.10", "1.0-beta.2", ExpectedResult = false)]
[TestCase("1.0-beta-10", "1.0-beta-2", ExpectedResult = false)]
- public bool IsOlderThan(string versionStrA, string versionStrB)
+
+ // null
+ [TestCase("1.0.0", null, ExpectedResult = false)] // null is always less than any value per CompareTo remarks
+ public bool IsOlderThan(string versionStrA, string? versionStrB)
{
// arrange
ISemanticVersion versionA = new SemanticVersion(versionStrA);
- ISemanticVersion versionB = new SemanticVersion(versionStrB);
+ ISemanticVersion? versionB = versionStrB != null
+ ? new SemanticVersion(versionStrB)
+ : null;
// assert
- Assert.AreEqual(versionA.IsOlderThan(versionB), versionA.IsOlderThan(versionB.ToString()), "The two signatures returned different results.");
+ Assert.AreEqual(versionA.IsOlderThan(versionB), versionA.IsOlderThan(versionB?.ToString()), "The two signatures returned different results.");
return versionA.IsOlderThan(versionB);
}
@@ -304,14 +314,19 @@ namespace SMAPI.Tests.Utilities
[TestCase("1.0-beta.2", "1.0-beta.1", ExpectedResult = true)]
[TestCase("1.0-beta.10", "1.0-beta.2", ExpectedResult = true)]
[TestCase("1.0-beta-10", "1.0-beta-2", ExpectedResult = true)]
- public bool IsNewerThan(string versionStrA, string versionStrB)
+
+ // null
+ [TestCase("1.0.0", null, ExpectedResult = true)] // null is always less than any value per CompareTo remarks
+ public bool IsNewerThan(string versionStrA, string? versionStrB)
{
// arrange
ISemanticVersion versionA = new SemanticVersion(versionStrA);
- ISemanticVersion versionB = new SemanticVersion(versionStrB);
+ ISemanticVersion? versionB = versionStrB != null
+ ? new SemanticVersion(versionStrB)
+ : null;
// assert
- Assert.AreEqual(versionA.IsNewerThan(versionB), versionA.IsNewerThan(versionB.ToString()), "The two signatures returned different results.");
+ Assert.AreEqual(versionA.IsNewerThan(versionB), versionA.IsNewerThan(versionB?.ToString()), "The two signatures returned different results.");
return versionA.IsNewerThan(versionB);
}
@@ -322,7 +337,7 @@ namespace SMAPI.Tests.Utilities
/// <param name="versionStr">The main version.</param>
/// <param name="lowerStr">The lower version number.</param>
/// <param name="upperStr">The upper version number.</param>
- [Test(Description = "Assert that version.IsNewerThan returns the expected value.")]
+ [Test(Description = "Assert that version.IsBetween returns the expected value.")]
// is between
[TestCase("0.5.7-beta.3", "0.5.7-beta.3", "0.5.7-beta.3", ExpectedResult = true)]
[TestCase("1.0", "1.0", "1.1", ExpectedResult = true)]
@@ -330,6 +345,7 @@ namespace SMAPI.Tests.Utilities
[TestCase("1.0", "0.5", "1.1", ExpectedResult = true)]
[TestCase("1.0-beta.2", "1.0-beta.1", "1.0-beta.3", ExpectedResult = true)]
[TestCase("1.0-beta-2", "1.0-beta-1", "1.0-beta-3", ExpectedResult = true)]
+ [TestCase("1.0.0", null, "1.0.0", ExpectedResult = true)] // null is always less than any value per CompareTo remarks
// is not between
[TestCase("1.0-beta", "1.0", "1.1", ExpectedResult = false)]
@@ -337,15 +353,20 @@ namespace SMAPI.Tests.Utilities
[TestCase("1.0-beta.2", "1.1", "1.0", ExpectedResult = false)]
[TestCase("1.0-beta.2", "1.0-beta.10", "1.0-beta.3", ExpectedResult = false)]
[TestCase("1.0-beta-2", "1.0-beta-10", "1.0-beta-3", ExpectedResult = false)]
- public bool IsBetween(string versionStr, string lowerStr, string upperStr)
+ [TestCase("1.0.0", "1.0.0", null, ExpectedResult = false)] // null is always less than any value per CompareTo remarks
+ public bool IsBetween(string versionStr, string? lowerStr, string? upperStr)
{
// arrange
- ISemanticVersion lower = new SemanticVersion(lowerStr);
- ISemanticVersion upper = new SemanticVersion(upperStr);
+ ISemanticVersion? lower = lowerStr != null
+ ? new SemanticVersion(lowerStr)
+ : null;
+ ISemanticVersion? upper = upperStr != null
+ ? new SemanticVersion(upperStr)
+ : null;
ISemanticVersion version = new SemanticVersion(versionStr);
// assert
- Assert.AreEqual(version.IsBetween(lower, upper), version.IsBetween(lower.ToString(), upper.ToString()), "The two signatures returned different results.");
+ Assert.AreEqual(version.IsBetween(lower, upper), version.IsBetween(lower?.ToString(), upper?.ToString()), "The two signatures returned different results.");
return version.IsBetween(lower, upper);
}
@@ -395,7 +416,7 @@ namespace SMAPI.Tests.Utilities
public void GameVersion(string versionStr)
{
// act
- GameVersion version = new GameVersion(versionStr);
+ GameVersion version = new(versionStr);
// assert
Assert.AreEqual(versionStr, version.ToString(), "The game version did not round-trip to the same value.");
@@ -413,7 +434,7 @@ namespace SMAPI.Tests.Utilities
/// <param name="prerelease">The prerelease tag.</param>
/// <param name="build">The build metadata.</param>
/// <param name="nonStandard">Whether the version should be marked as non-standard.</param>
- private void AssertParts(ISemanticVersion version, int major, int minor, int patch, string prerelease, string build, bool nonStandard)
+ private void AssertParts(ISemanticVersion version, int major, int minor, int patch, string? prerelease, string? build, bool nonStandard)
{
Assert.AreEqual(major, version.MajorVersion, "The major version doesn't match.");
Assert.AreEqual(minor, version.MinorVersion, "The minor version doesn't match.");
@@ -426,9 +447,8 @@ namespace SMAPI.Tests.Utilities
/// <summary>Assert that the expected exception type is thrown, and log the action output and thrown exception.</summary>
/// <typeparam name="T">The expected exception type.</typeparam>
/// <param name="action">The action which may throw the exception.</param>
- /// <param name="message">The message to log if the expected exception isn't thrown.</param>
[SuppressMessage("ReSharper", "UnusedParameter.Local", Justification = "The message argument is deliberately only used in precondition checks since this is an assertion method.")]
- private void AssertAndLogException<T>(Func<object> action, string message = null)
+ private void AssertAndLogException<T>(Func<object> action)
where T : Exception
{
this.AssertAndLogException<T>(() =>
@@ -443,7 +463,7 @@ namespace SMAPI.Tests.Utilities
/// <param name="action">The action which may throw the exception.</param>
/// <param name="message">The message to log if the expected exception isn't thrown.</param>
[SuppressMessage("ReSharper", "UnusedParameter.Local", Justification = "The message argument is deliberately only used in precondition checks since this is an assertion method.")]
- private void AssertAndLogException<T>(Action action, string message = null)
+ private void AssertAndLogException<T>(Action action, string? message = null)
where T : Exception
{
try
@@ -455,7 +475,7 @@ namespace SMAPI.Tests.Utilities
TestContext.WriteLine($"Exception thrown:\n{ex}");
return;
}
- catch (Exception ex) when (!(ex is AssertionException))
+ catch (Exception ex) when (ex is not AssertionException)
{
TestContext.WriteLine($"Exception thrown:\n{ex}");
Assert.Fail(message ?? $"Didn't throw the expected exception; expected {typeof(T).FullName}, got {ex.GetType().FullName}.");