DateTimeTests.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Globalization;
  3. namespace DesktopClock.Tests;
  4. public class DateTimeTests
  5. {
  6. [Theory]
  7. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T12:30:45.456Z", true)] // Different millisecond
  8. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T12:30:46.123Z", false)] // Different second
  9. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T12:31:45.123Z", false)] // Different minute
  10. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-18T13:30:45.123Z", false)] // Different hour
  11. [InlineData("2024-07-18T12:30:45.123Z", "2024-07-19T12:30:45.123Z", false)] // Different day
  12. [InlineData("2024-07-18T12:30:45.123Z", "2024-08-18T12:30:45.123Z", false)] // Different month
  13. [InlineData("2024-07-18T12:30:45.123Z", "2025-07-18T12:30:45.123Z", false)] // Different year
  14. public void EqualExcludingMilliseconds(string dt1String, string dt2String, bool expected)
  15. {
  16. // Arrange
  17. var dt1 = DateTime.Parse(dt1String);
  18. var dt2 = DateTime.Parse(dt2String);
  19. // Act
  20. var result = dt1.EqualExcludingMillisecond(dt2);
  21. // Assert
  22. Assert.Equal(expected, result);
  23. }
  24. [Theory]
  25. [InlineData("2024-07-18 12:30:00", "2024-07-18 12:30:00", 30, true)] // Countdown reached, on interval
  26. [InlineData("2024-07-18 12:30:01", "2024-07-18 12:30:01", 30, true)] // Countdown reached, not on interval
  27. [InlineData("2024-07-18 12:29:00", "2024-07-18 12:30:00", 30, true)] // Not yet reached, on interval
  28. [InlineData("2024-07-18 12:29:01", "2024-07-18 12:30:01", 30, true)] // Not yet reached, on interval
  29. [InlineData("2024-07-18 12:29:02", "2024-07-18 12:30:01", 30, false)] // Not yet reached, not on interval
  30. [InlineData("2024-07-18 12:31:00", "2024-07-18 12:30:00", 30, true)] // Past countdown, on interval
  31. [InlineData("2024-07-18 12:31:02", "2024-07-18 12:30:01", 30, false)] // Past countdown, not on interval
  32. public void IsOnInterval(string nowString, string countdownString, int intervalSeconds, bool expected)
  33. {
  34. // Arrange
  35. var dateTime = DateTime.Parse(nowString);
  36. var countdownTo = DateTime.Parse(countdownString);
  37. var interval = TimeSpan.FromSeconds(intervalSeconds);
  38. // Act
  39. var result = DateTimeUtil.IsNowOrCountdownOnInterval(dateTime, countdownTo, interval);
  40. // Assert
  41. Assert.Equal(expected, result);
  42. }
  43. [Theory]
  44. [InlineData("dddd, MMMM dd", "Monday, January 01")]
  45. [InlineData("yyyy-MM-dd", "2024-01-01")]
  46. [InlineData("HH:mm:ss", "00:00:00")]
  47. [InlineData("MMMM dd, yyyy", "January 01, 2024")]
  48. public void FromFormat_CreatesCorrectExample(string format, string expected)
  49. {
  50. // Arrange
  51. var dateTimeOffset = new DateTime(2024, 01, 01);
  52. // Act
  53. var dateFormatExample = DateFormatExample.FromFormat(format, dateTimeOffset, CultureInfo.InvariantCulture);
  54. // Assert
  55. Assert.Equal(format, dateFormatExample.Format);
  56. Assert.Equal(expected, dateFormatExample.Example);
  57. }
  58. }