| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- using System;
- using System.Globalization;
- namespace DesktopClock.Tests;
- public class TokenizerTests
- {
- [Fact]
- public void FormatWithTokenizer()
- {
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "{dddd}, {MMM dd}, {HH:mm:ss}";
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- Assert.Equal("Sunday, Sep 24, 12:13:14", result);
- }
- [Fact]
- public void FormatWithFallback()
- {
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "dddd, MMM dd, HH:mm:ss";
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- Assert.Equal("Sunday, Sep 24, 12:13:14", result);
- }
- [Theory]
- [InlineData(null)]
- [InlineData("")]
- [InlineData(" ")]
- public void FormatWithTokenizer_NullOrWhitespace_ShouldReturnDefaultToString(string format)
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal(dateTime.ToString(), result);
- }
- [Fact]
- public void FormatWithTokenizer_SingleToken_ShouldFormat()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "{yyyy}";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("2023", result);
- }
- [Fact]
- public void FormatWithTokenizer_MixedTextAndTokens_ShouldFormat()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "Today is {dddd}!";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("Today is Sunday!", result);
- }
- [Fact]
- public void FormatWithTokenizer_MultipleTokens_ShouldFormatAll()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "{HH}:{mm}:{ss}";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("12:13:14", result);
- }
- [Fact]
- public void FormatWithTokenizer_12HourFormat_ShouldWork()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 14, 30, 45);
- var format = "{h:mm tt}";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("2:30 PM", result);
- }
- [Fact]
- public void FormatWithTokenizer_DateTimeOffset_ShouldWork()
- {
- // Arrange
- var dateTimeOffset = new DateTimeOffset(2023, 09, 24, 12, 13, 14, TimeSpan.FromHours(2));
- var format = "{dddd}, {MMM dd}";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTimeOffset, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("Sunday, Sep 24", result);
- }
- [Fact]
- public void FormatWithTokenizer_StandardFormat_WithoutBraces_ShouldWork()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "D"; // Long date pattern
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("Sunday, 24 September 2023", result);
- }
- [Fact]
- public void FormatWithTokenizer_TimeSpan_ShouldWork()
- {
- // Arrange
- var timeSpan = new TimeSpan(1, 23, 45, 30);
- var format = @"{d\.hh\:mm\:ss}";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(timeSpan, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal("1.23:45:30", result);
- }
- [Fact]
- public void FormatWithTokenizer_InvalidFormat_ShouldNotThrow()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "{invalid-format-string-xyz}";
- // Act - should not throw, may produce unexpected output but should handle gracefully
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert - just verify it returns something and doesn't throw
- Assert.NotNull(result);
- }
- [Fact]
- public void FormatWithTokenizer_EmptyTokens_ShouldHandleGracefully()
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24, 12, 13, 14);
- var format = "{}";
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- // Empty braces should be handled
- Assert.NotNull(result);
- }
- [Theory]
- [InlineData("{yyyy}-{MM}-{dd}", "2023-09-24")]
- [InlineData("{yyyy}/{MM}/{dd}", "2023/09/24")]
- [InlineData("{dd}.{MM}.{yyyy}", "24.09.2023")]
- public void FormatWithTokenizer_VariousDateFormats_ShouldWork(string format, string expected)
- {
- // Arrange
- var dateTime = new DateTime(2023, 09, 24);
- // Act
- var result = Tokenizer.FormatWithTokenizerOrFallBack(dateTime, format, CultureInfo.InvariantCulture);
- // Assert
- Assert.Equal(expected, result);
- }
- }
|