41 lines
1.7 KiB
C#
41 lines
1.7 KiB
C#
using DeepDrftPublic.Client.Helpers;
|
|
|
|
namespace DeepDrftTests;
|
|
|
|
/// <summary>
|
|
/// Unit tests for the home-stat-row runtime formatter (<see cref="RuntimeFormat.ToHoursMinutes"/>):
|
|
/// the hh:mm shape, hour rollover past 60 minutes, multi-hour totals, and the clamp on non-positive /
|
|
/// non-finite input.
|
|
/// </summary>
|
|
[TestFixture]
|
|
public class RuntimeFormatTests
|
|
{
|
|
// 12h34m -> "12:34": the brief's worked example, hours not zero-padded, minutes two digits.
|
|
[Test]
|
|
public void ToHoursMinutes_TwelveHoursThirtyFour_FormatsHhMm()
|
|
=> Assert.That(RuntimeFormat.ToHoursMinutes((12 * 3600) + (34 * 60)), Is.EqualTo("12:34"));
|
|
|
|
// 90 minutes rolls into 1 hour 30 minutes — minutes never exceed 59.
|
|
[Test]
|
|
public void ToHoursMinutes_NinetyMinutes_RollsIntoHours()
|
|
=> Assert.That(RuntimeFormat.ToHoursMinutes(90 * 60), Is.EqualTo("1:30"));
|
|
|
|
// Sub-hour totals show 0 hours with zero-padded minutes.
|
|
[Test]
|
|
public void ToHoursMinutes_UnderOneHour_ShowsZeroHours()
|
|
=> Assert.That(RuntimeFormat.ToHoursMinutes(5 * 60), Is.EqualTo("0:05"));
|
|
|
|
// Totals beyond 99h are not truncated — hours simply take more than two digits (mixes are few).
|
|
[Test]
|
|
public void ToHoursMinutes_BeyondNinetyNineHours_DoesNotTruncate()
|
|
=> Assert.That(RuntimeFormat.ToHoursMinutes((123 * 3600) + (45 * 60)), Is.EqualTo("123:45"));
|
|
|
|
// Zero / negative / non-finite inputs clamp to "0:00" rather than producing a negative or NaN render.
|
|
[TestCase(0d)]
|
|
[TestCase(-10d)]
|
|
[TestCase(double.NaN)]
|
|
[TestCase(double.PositiveInfinity)]
|
|
public void ToHoursMinutes_NonPositiveOrNonFinite_ClampsToZero(double seconds)
|
|
=> Assert.That(RuntimeFormat.ToHoursMinutes(seconds), Is.EqualTo("0:00"));
|
|
}
|