-
Notifications
You must be signed in to change notification settings - Fork 4.9k
/
Copy pathDateTimeFormatInfoShortTimePattern.cs
108 lines (98 loc) · 4.18 KB
/
DateTimeFormatInfoShortTimePattern.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections.Generic;
using Xunit;
namespace System.Globalization.Tests
{
public class DateTimeFormatInfoShortTimePattern
{
[Fact]
public void ShortTimePattern_GetInvariantInfo_ReturnsExpected()
{
Assert.Equal("HH:mm", DateTimeFormatInfo.InvariantInfo.ShortTimePattern);
}
public static IEnumerable<object[]> ShortTimePattern_Set_TestData()
{
yield return new object[] { string.Empty };
yield return new object[] { "garbage" };
yield return new object[] { "dddd, dd MMMM yyyy HH:mm:ss" };
yield return new object[] { "HH:mm" };
yield return new object[] { "t" };
}
[Theory]
[MemberData(nameof(ShortTimePattern_Set_TestData))]
public void ShortTimePattern_Set_GetReturnsExpected(string value)
{
var format = new DateTimeFormatInfo();
format.ShortTimePattern = value;
Assert.Equal(value, format.ShortTimePattern);
}
[Fact]
public void ShortTimePattern_Set_InvalidatesDerivedPattern()
{
const string Pattern = "#$";
var format = new DateTimeFormatInfo();
var d = DateTimeOffset.Now;
d.ToString("g", format); // GeneralShortTimePattern
format.ShortTimePattern = Pattern;
Assert.Contains(Pattern, d.ToString("g", format));
}
[Fact]
public void ShortTimePattern_SetNull_ThrowsArgumentNullException()
{
var format = new DateTimeFormatInfo();
AssertExtensions.Throws<ArgumentNullException>("value", () => format.ShortTimePattern = null);
}
[Fact]
public void ShortTimePattern_SetReadOnly_ThrowsInvalidOperationException()
{
Assert.Throws<InvalidOperationException>(() => DateTimeFormatInfo.InvariantInfo.ShortTimePattern = "HH:mm");
}
[Fact]
public void ShortTimePattern_VerifyTimePatterns()
{
Assert.All(CultureInfo.GetCultures(CultureTypes.AllCultures), culture => {
if (DateTimeFormatInfoData.HasBadIcuTimePatterns(culture))
{
return;
}
var pattern = culture.DateTimeFormat.ShortTimePattern;
bool use24Hour = false;
bool use12Hour = false;
bool useAMPM = false;
for (var i = 0; i < pattern.Length; i++)
{
switch (pattern[i])
{
case 'H': use24Hour = true; break;
case 'h': use12Hour = true; break;
case 't': useAMPM = true; break;
case '\\': i++; break;
case '\'':
i++;
for (; i < pattern.Length; i++)
{
var c = pattern[i];
if (c == '\'') break;
if (c == '\\') i++;
}
break;
}
}
Assert.True((use24Hour || useAMPM) && (use12Hour ^ use24Hour), $"Bad short time pattern for culture {culture.Name}: '{pattern}'");
});
}
[Fact]
public void ShortTimePattern_CheckTimeFormatWithSpaces()
{
var date = DateTime.Today + TimeSpan.FromHours(15) + TimeSpan.FromMinutes(15);
var culture = new CultureInfo("en-US");
string formattedDate = date.ToString("t", culture);
bool containsSpace = formattedDate.Contains(' ');
bool containsNoBreakSpace = formattedDate.Contains('\u00A0');
bool containsNarrowNoBreakSpace = formattedDate.Contains('\u202F');
Assert.True(containsSpace || containsNoBreakSpace || containsNarrowNoBreakSpace,
$"Formatted date string '{formattedDate}' does not contain any of the specified spaces.");
}
}
}