1+ using System ;
2+ using NUnit . Framework ;
3+
4+ namespace DateTimeExtensions . Tests
5+ {
6+ [ TestFixture ]
7+ public class GeneralDateTimeExtensionsTests
8+ {
9+ [ Test ]
10+ public void SetTime_Preserves_Utc_Kind ( )
11+ {
12+ // Arrange
13+ DateTime utcDate = new ( 2026 , 7 , 7 , 14 , 0 , 0 , DateTimeKind . Utc ) ;
14+
15+ // Act
16+ DateTime result = utcDate . SetTime ( 15 ) ;
17+ Assert . Multiple ( ( ) =>
18+ {
19+
20+ // Assert
21+ Assert . That ( result . Kind , Is . EqualTo ( DateTimeKind . Utc ) ) ;
22+ Assert . That ( result . Hour , Is . EqualTo ( 15 ) ) ;
23+ Assert . That ( result . Minute , Is . EqualTo ( 0 ) ) ;
24+ Assert . That ( result . Second , Is . EqualTo ( 0 ) ) ;
25+ Assert . That ( result . Millisecond , Is . EqualTo ( 0 ) ) ;
26+ } ) ;
27+ }
28+
29+ [ Test ]
30+ public void SetTime_Preserves_Local_Kind ( )
31+ {
32+ // Arrange
33+ DateTime localDate = new ( 2026 , 7 , 7 , 14 , 0 , 0 , DateTimeKind . Local ) ;
34+
35+ // Act
36+ DateTime result = localDate . SetTime ( 15 , 30 ) ;
37+ Assert . Multiple ( ( ) =>
38+ {
39+
40+ // Assert
41+ Assert . That ( result . Kind , Is . EqualTo ( DateTimeKind . Local ) ) ;
42+ Assert . That ( result . Hour , Is . EqualTo ( 15 ) ) ;
43+ Assert . That ( result . Minute , Is . EqualTo ( 30 ) ) ;
44+ } ) ;
45+ }
46+
47+ [ Test ]
48+ public void SetTime_Preserves_Unspecified_Kind ( )
49+ {
50+ // Arrange
51+ DateTime unspecifiedDate = new ( 2026 , 7 , 7 , 14 , 0 , 0 , DateTimeKind . Unspecified ) ;
52+
53+ // Act
54+ DateTime result = unspecifiedDate . SetTime ( 15 , 30 , 45 ) ;
55+ Assert . Multiple ( ( ) =>
56+ {
57+
58+ // Assert
59+ Assert . That ( result . Kind , Is . EqualTo ( DateTimeKind . Unspecified ) ) ;
60+ Assert . That ( result . Hour , Is . EqualTo ( 15 ) ) ;
61+ Assert . That ( result . Minute , Is . EqualTo ( 30 ) ) ;
62+ Assert . That ( result . Second , Is . EqualTo ( 45 ) ) ;
63+ } ) ;
64+ }
65+
66+ [ Test ]
67+ public void SetTime_With_Milliseconds_Preserves_Kind ( )
68+ {
69+ // Arrange
70+ DateTime utcDate = new ( 2026 , 7 , 7 , 14 , 0 , 0 , DateTimeKind . Utc ) ;
71+
72+ // Act
73+ DateTime result = utcDate . SetTime ( 15 , 30 , 45 , 500 ) ;
74+ Assert . Multiple ( ( ) =>
75+ {
76+
77+ // Assert
78+ Assert . That ( result . Kind , Is . EqualTo ( DateTimeKind . Utc ) ) ;
79+ Assert . That ( result . Hour , Is . EqualTo ( 15 ) ) ;
80+ Assert . That ( result . Minute , Is . EqualTo ( 30 ) ) ;
81+ Assert . That ( result . Second , Is . EqualTo ( 45 ) ) ;
82+ Assert . That ( result . Millisecond , Is . EqualTo ( 500 ) ) ;
83+ } ) ;
84+ }
85+
86+ [ Test ]
87+ [ TestCase ( DateTimeKind . Utc ) ]
88+ [ TestCase ( DateTimeKind . Local ) ]
89+ [ TestCase ( DateTimeKind . Unspecified ) ]
90+ public void SetTime_All_Overloads_Preserve_Kind ( DateTimeKind kind )
91+ {
92+ // Arrange
93+ DateTime originalDate = new ( 2026 , 7 , 7 , 14 , 0 , 0 , kind ) ;
94+ Assert . Multiple ( ( ) =>
95+ {
96+
97+ // Act & Assert - Test all overloads
98+ Assert . That ( originalDate . SetTime ( 15 ) . Kind , Is . EqualTo ( kind ) ) ;
99+ Assert . That ( originalDate . SetTime ( 15 , 30 ) . Kind , Is . EqualTo ( kind ) ) ;
100+ Assert . That ( originalDate . SetTime ( 15 , 30 , 45 ) . Kind , Is . EqualTo ( kind ) ) ;
101+ Assert . That ( originalDate . SetTime ( 15 , 30 , 45 , 500 ) . Kind , Is . EqualTo ( kind ) ) ;
102+ } ) ;
103+ }
104+ }
105+ }
0 commit comments