normalize season names in SDate constructor

This commit is contained in:
Jesse Plamondon-Willard 2022-01-29 18:15:42 -05:00
parent 6dd4a8a12b
commit 3431f486a2
No known key found for this signature in database
GPG Key ID: CF8B1456B3E29F49
3 changed files with 12 additions and 5 deletions

View File

@ -5,6 +5,9 @@
* For players:
* Improved translations. Thanks to ChulkyBow (updated Ukrainian)!
* For mod authors:
* The `SDate` constructor is no longer case-sensitive for season names.
* For console commands:
* Fixed `player_add` with Journal Scraps and Secret Notes.

View File

@ -16,9 +16,12 @@ namespace SMAPI.Tests.Utilities
/*********
** Fields
*********/
/// <summary>All valid seasons.</summary>
/// <summary>The valid seasons.</summary>
private static readonly string[] ValidSeasons = { "spring", "summer", "fall", "winter" };
/// <summary>Sample user inputs for season names.</summary>
private static readonly string[] SampleSeasonValues = SDateTests.ValidSeasons.Concat(new[] { " WIntEr " }).ToArray();
/// <summary>All valid days of a month.</summary>
private static readonly int[] ValidDays = Enumerable.Range(1, 28).ToArray();
@ -55,19 +58,18 @@ namespace SMAPI.Tests.Utilities
** Constructor
****/
[Test(Description = "Assert that the constructor sets the expected values for all valid dates.")]
public void Constructor_SetsExpectedValues([ValueSource(nameof(SDateTests.ValidSeasons))] string season, [ValueSource(nameof(SDateTests.ValidDays))] int day, [Values(1, 2, 100)] int year)
public void Constructor_SetsExpectedValues([ValueSource(nameof(SDateTests.SampleSeasonValues))] string season, [ValueSource(nameof(SDateTests.ValidDays))] int day, [Values(1, 2, 100)] int year)
{
// act
SDate date = new SDate(day, season, year);
// assert
Assert.AreEqual(day, date.Day);
Assert.AreEqual(season, date.Season);
Assert.AreEqual(season.Trim().ToLowerInvariant(), date.Season);
Assert.AreEqual(year, date.Year);
}
[Test(Description = "Assert that the constructor throws an exception if the values are invalid.")]
[TestCase(01, "Spring", 1)] // seasons are case-sensitive
[TestCase(01, "springs", 1)] // invalid season name
[TestCase(-1, "spring", 1)] // day < 0
[TestCase(0, "spring", 1)] // day zero

View File

@ -250,6 +250,8 @@ namespace StardewModdingAPI.Utilities
/// <exception cref="ArgumentException">One of the arguments has an invalid value (like day 35).</exception>
private SDate(int day, string season, int year, bool allowDayZero)
{
season = season?.Trim().ToLowerInvariant();
// validate
if (season == null)
throw new ArgumentNullException(nameof(season));
@ -277,7 +279,7 @@ namespace StardewModdingAPI.Utilities
/// <param name="year">The year.</param>
private bool IsDayZero(int day, string season, int year)
{
return day == 0 && season == "spring" && year == 1;
return day == 0 && season?.Trim().ToLower() == "spring" && year == 1;
}
/// <summary>Get the day of week for a given date.</summary>