1+ using System ;
2+ using System . Diagnostics . CodeAnalysis ;
3+
4+ using NUnit . Framework ;
5+
6+ namespace CodeJam . Dates
7+ {
8+ [ TestFixture ( Category = "Assertions" ) ]
9+ [ SuppressMessage ( "ReSharper" , "NotResolvedInText" ) ]
10+ public class DateTimeCodeTests
11+ {
12+ [ Test ]
13+ public void TestDateOnlyAssertion ( )
14+ {
15+ var dateTimeNow = DateTime . Now ;
16+ var dateTimeOffsetNow = DateTimeOffset . Now ;
17+
18+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . DateOnly ( dateTimeNow , "arg00" ) ) ;
19+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
20+ Assert . That ( ex . Message , Does . Contain ( "argument should be a date without time component" ) ) ;
21+
22+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . DateOnly ( dateTimeOffsetNow , "arg00" ) ) ;
23+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
24+ Assert . That ( ex . Message , Does . Contain ( "argument should be a date without time component" ) ) ;
25+
26+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeNow . Date , "arg00" ) ) ;
27+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeOffsetNow . Date , "arg00" ) ) ;
28+ }
29+
30+ [ Test ]
31+ public void TestDebugDateOnlyAssertion ( )
32+ {
33+ var dateTimeNow = DateTime . Now ;
34+ var dateTimeOffsetNow = DateTimeOffset . Now ;
35+ #if DEBUG
36+ var ex = Assert . Throws < ArgumentException > ( ( ) => DebugDateTimeCode . DateOnly ( dateTimeNow , "arg00" ) ) ;
37+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
38+ Assert . That ( ex . Message , Does . Contain ( "argument should be a date without time component" ) ) ;
39+
40+ ex = Assert . Throws < ArgumentException > ( ( ) => DebugDateTimeCode . DateOnly ( dateTimeOffsetNow , "arg00" ) ) ;
41+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
42+ Assert . That ( ex . Message , Does . Contain ( "argument should be a date without time component" ) ) ;
43+ #else
44+ // ReSharper disable once InvocationIsSkipped
45+ Assert . DoesNotThrow ( ( ) => DebugDateTimeCode . DateOnly ( dateTimeNow , "arg00" ) ) ;
46+ Assert . DoesNotThrow ( ( ) => DebugDateTimeCode . DateOnly ( dateTimeOffsetNow , "arg00" ) ) ;
47+ #endif
48+
49+ // ReSharper disable once InvocationIsSkipped
50+ Assert . DoesNotThrow ( ( ) => DebugDateTimeCode . DateOnly ( dateTimeNow . Date , "arg00" ) ) ;
51+ }
52+
53+
54+ [ Test ]
55+ public void TestIsUtcAssertion ( )
56+ {
57+ var dateTimeNow = DateTime . Now ;
58+ var dateTimeOffsetNow = DateTimeOffset . Now . ToOffset ( TimeSpan . FromHours ( 1 ) ) ;
59+
60+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . IsUtc ( dateTimeNow , "arg00" ) ) ;
61+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
62+ Assert . That ( ex . Message , Does . Contain ( "argument should be in UTC" ) ) ;
63+
64+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . IsUtc ( dateTimeOffsetNow , "arg00" ) ) ;
65+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
66+ Assert . That ( ex . Message , Does . Contain ( "argument should be in UTC" ) ) ;
67+
68+ Assert . DoesNotThrow ( ( ) => DateTimeCode . IsUtc ( dateTimeNow . ToUniversalTime ( ) , "arg00" ) ) ;
69+ Assert . DoesNotThrow ( ( ) => DateTimeCode . IsUtc ( dateTimeOffsetNow . ToUniversalTime ( ) , "arg00" ) ) ;
70+ }
71+
72+ [ Test ]
73+ public void TestIsUtcAndDateOnlyAssertion ( )
74+ {
75+ var dateTimeNow = DateTime . Now ;
76+ var dateTimeOffsetNow = DateTimeOffset . Now . ToOffset ( TimeSpan . FromHours ( 1 ) ) ;
77+
78+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . IsUtcAndDateOnly ( dateTimeNow , "arg00" ) ) ;
79+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
80+ Assert . That ( ex . Message , Does . Contain ( "argument should be in UTC" ) ) ;
81+
82+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . IsUtcAndDateOnly ( dateTimeOffsetNow , "arg00" ) ) ;
83+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
84+ Assert . That ( ex . Message , Does . Contain ( "argument should be in UTC" ) ) ;
85+
86+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . IsUtcAndDateOnly ( dateTimeNow . ToUniversalTime ( ) , "arg00" ) ) ;
87+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
88+ Assert . That ( ex . Message , Does . Contain ( "argument should be a date without time component" ) ) ;
89+
90+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . IsUtcAndDateOnly ( dateTimeOffsetNow . ToUniversalTime ( ) , "arg00" ) ) ;
91+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
92+ Assert . That ( ex . Message , Does . Contain ( "argument should be a date without time component" ) ) ;
93+
94+ Assert . DoesNotThrow ( ( ) => DateTimeCode . IsUtcAndDateOnly ( dateTimeNow . ToUniversalTime ( ) . Date , "arg00" ) ) ;
95+ Assert . DoesNotThrow ( ( ) => DateTimeCode . IsUtcAndDateOnly ( dateTimeOffsetNow . ToUniversalTime ( ) . TruncateTime ( ) , "arg00" ) ) ;
96+ }
97+
98+ [ Test ]
99+ public void TestFirstDayOfMonth ( )
100+ {
101+ var dateTimeNow = DateTime . Now ;
102+ var dateTimeOffsetNow = DateTimeOffset . Now ;
103+
104+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . FirstDayOfMonth ( dateTimeNow , "arg00" ) ) ;
105+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
106+ Assert . That ( ex . Message , Does . Contain ( "argument should be a first day of month" ) ) ;
107+
108+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . FirstDayOfMonth ( dateTimeOffsetNow , "arg00" ) ) ;
109+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
110+ Assert . That ( ex . Message , Does . Contain ( "argument should be a first day of month" ) ) ;
111+
112+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeNow . Date . FirstDayOfMonth ( ) , "arg00" ) ) ;
113+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeOffsetNow . Date . FirstDayOfMonth ( ) , "arg00" ) ) ;
114+ }
115+
116+ [ Test ]
117+ public void TestFirstDayOfYear ( )
118+ {
119+ var dateTimeNow = DateTime . Now ;
120+ var dateTimeOffsetNow = DateTimeOffset . Now ;
121+
122+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . FirstDayOfYear ( dateTimeNow , "arg00" ) ) ;
123+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
124+ Assert . That ( ex . Message , Does . Contain ( "argument should be a first day of year" ) ) ;
125+
126+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . FirstDayOfYear ( dateTimeOffsetNow , "arg00" ) ) ;
127+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
128+ Assert . That ( ex . Message , Does . Contain ( "argument should be a first day of year" ) ) ;
129+
130+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeNow . Date . FirstDayOfYear ( ) , "arg00" ) ) ;
131+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeOffsetNow . Date . FirstDayOfYear ( ) , "arg00" ) ) ;
132+ }
133+
134+ [ Test ]
135+ public void TestLastDayOfMonth ( )
136+ {
137+ var dateTimeNow = DateTime . Now ;
138+ var dateTimeOffsetNow = DateTimeOffset . Now ;
139+
140+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . LastDayOfMonth ( dateTimeNow , "arg00" ) ) ;
141+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
142+ Assert . That ( ex . Message , Does . Contain ( "argument should be a last day of month" ) ) ;
143+
144+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . LastDayOfMonth ( dateTimeOffsetNow , "arg00" ) ) ;
145+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
146+ Assert . That ( ex . Message , Does . Contain ( "argument should be a last day of month" ) ) ;
147+
148+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeNow . Date . LastDayOfMonth ( ) , "arg00" ) ) ;
149+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeOffsetNow . Date . LastDayOfMonth ( ) , "arg00" ) ) ;
150+ }
151+
152+ [ Test ]
153+ public void TestLastDayOfYear ( )
154+ {
155+ var dateTimeNow = DateTime . Now ;
156+ var dateTimeOffsetNow = DateTimeOffset . Now ;
157+
158+ var ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . LastDayOfYear ( dateTimeNow , "arg00" ) ) ;
159+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
160+ Assert . That ( ex . Message , Does . Contain ( "argument should be a last day of year" ) ) ;
161+
162+ ex = Assert . Throws < ArgumentException > ( ( ) => DateTimeCode . LastDayOfYear ( dateTimeOffsetNow , "arg00" ) ) ;
163+ Assert . That ( ex . Message , Does . Contain ( "arg00" ) ) ;
164+ Assert . That ( ex . Message , Does . Contain ( "argument should be a last day of year" ) ) ;
165+
166+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeNow . Date . LastDayOfYear ( ) , "arg00" ) ) ;
167+ Assert . DoesNotThrow ( ( ) => DateTimeCode . DateOnly ( dateTimeOffsetNow . Date . LastDayOfYear ( ) , "arg00" ) ) ;
168+ }
169+ }
170+ }
0 commit comments