@@ -110,4 +110,150 @@ public function testValidateDateIso8601AllFormats(): void
110110 self ::assertFalse (ValidateDate::validateDateIso8601 ($ v ), "Aceitou inválido: $ v " );
111111 }
112112 }
113+
114+ public function testValidateDateBrazilWithInvalidFormats (): void
115+ {
116+ self ::assertFalse (ValidateDate::validateDateBrazil ('' ));
117+ self ::assertFalse (ValidateDate::validateDateBrazil ('29-04-2021 ' ));
118+ self ::assertFalse (ValidateDate::validateDateBrazil ('2021/04/29 ' ));
119+ self ::assertFalse (ValidateDate::validateDateBrazil ('29/04 ' ));
120+ self ::assertFalse (ValidateDate::validateDateBrazil ('29/04/21 ' ));
121+ }
122+
123+ public function testValidateDateBrazilLeapYear (): void
124+ {
125+ self ::assertTrue (ValidateDate::validateDateBrazil ('29/02/2024 ' ));
126+ self ::assertFalse (ValidateDate::validateDateBrazil ('29/02/2023 ' ));
127+ }
128+
129+ public function testValidateDateBrazilEdgeDays (): void
130+ {
131+ self ::assertTrue (ValidateDate::validateDateBrazil ('01/01/2021 ' ));
132+ self ::assertTrue (ValidateDate::validateDateBrazil ('31/12/2021 ' ));
133+ self ::assertTrue (ValidateDate::validateDateBrazil ('31/01/2021 ' ));
134+ self ::assertFalse (ValidateDate::validateDateBrazil ('32/01/2021 ' ));
135+ self ::assertFalse (ValidateDate::validateDateBrazil ('00/01/2021 ' ));
136+ }
137+
138+ public function testValidateDateAmericanWithInvalidFormats (): void
139+ {
140+ self ::assertFalse (ValidateDate::validateDateAmerican ('' ));
141+ self ::assertFalse (ValidateDate::validateDateAmerican ('2021/04/29 ' ));
142+ self ::assertFalse (ValidateDate::validateDateAmerican ('29-04-2021 ' ));
143+ self ::assertFalse (ValidateDate::validateDateAmerican ('2021-04 ' ));
144+ self ::assertFalse (ValidateDate::validateDateAmerican ('21-04-29 ' ));
145+ }
146+
147+ public function testValidateDateAmericanLeapYear (): void
148+ {
149+ self ::assertTrue (ValidateDate::validateDateAmerican ('2024-02-29 ' ));
150+ self ::assertFalse (ValidateDate::validateDateAmerican ('2023-02-29 ' ));
151+ }
152+
153+ public function testValidateDateAmericanEdgeDays (): void
154+ {
155+ self ::assertTrue (ValidateDate::validateDateAmerican ('2021-01-01 ' ));
156+ self ::assertTrue (ValidateDate::validateDateAmerican ('2021-12-31 ' ));
157+ self ::assertFalse (ValidateDate::validateDateAmerican ('2021-01-32 ' ));
158+ self ::assertFalse (ValidateDate::validateDateAmerican ('2021-00-15 ' ));
159+ self ::assertFalse (ValidateDate::validateDateAmerican ('2021-13-15 ' ));
160+ }
161+
162+ public function testValidateTimeStampWithInvalidFormats (): void
163+ {
164+ self ::assertFalse (ValidateDate::validateTimeStamp ('' ));
165+ self ::assertFalse (ValidateDate::validateTimeStamp ('2021-04-29 ' ));
166+ self ::assertFalse (ValidateDate::validateTimeStamp ('2021-04-29 11:17 ' ));
167+ self ::assertFalse (ValidateDate::validateTimeStamp ('29/04/2021 ' ));
168+ }
169+
170+ public function testValidateTimeStampBrazilFormat (): void
171+ {
172+ self ::assertTrue (ValidateDate::validateTimeStamp ('29/04/2021 11:17:12 ' ));
173+ self ::assertFalse (ValidateDate::validateTimeStamp ('29/04/2021 25:17:12 ' ));
174+ }
175+
176+ public function testValidateTimeStampEdgeTimes (): void
177+ {
178+ self ::assertTrue (ValidateDate::validateTimeStamp ('2021-04-29 00:00:00 ' ));
179+ self ::assertTrue (ValidateDate::validateTimeStamp ('2021-04-29 23:59:59 ' ));
180+ self ::assertFalse (ValidateDate::validateTimeStamp ('2021-04-29 24:00:00 ' ));
181+ self ::assertFalse (ValidateDate::validateTimeStamp ('2021-04-29 11:60:00 ' ));
182+ self ::assertFalse (ValidateDate::validateTimeStamp ('2021-04-29 11:17:60 ' ));
183+ }
184+
185+ public function testValidateDateNotFutureWithInvalidDate (): void
186+ {
187+ self ::assertFalse (ValidateDate::validateDateNotFuture ('invalid-date ' ));
188+ }
189+
190+ public function testValidateDateNotFutureWithEmptyString (): void
191+ {
192+ self ::assertTrue (ValidateDate::validateDateNotFuture ('' ));
193+ }
194+
195+ public function testValidateDateNotFutureWithPastDates (): void
196+ {
197+ self ::assertTrue (ValidateDate::validateDateNotFuture ('2020-01-01 ' ));
198+ self ::assertTrue (ValidateDate::validateDateNotFuture ('1990-06-15 ' ));
199+ self ::assertTrue (ValidateDate::validateDateNotFuture ('2000-12-31 ' ));
200+ }
201+
202+ public function testValidateDateNotFutureWithToday (): void
203+ {
204+ $ today = (new DateTimeImmutable ())->format ('Y-m-d ' );
205+ self ::assertTrue (ValidateDate::validateDateNotFuture ($ today ));
206+ }
207+
208+ public function testValidateDateUTCWithoutTimezoneEdgeCases (): void
209+ {
210+ self ::assertTrue (ValidateDate::validateDateUTCWithoutTimezone ('2000-01-01T00:00:00 ' ));
211+ self ::assertTrue (ValidateDate::validateDateUTCWithoutTimezone ('2099-12-31T23:59:59 ' ));
212+ self ::assertFalse (ValidateDate::validateDateUTCWithoutTimezone ('' ));
213+ self ::assertFalse (ValidateDate::validateDateUTCWithoutTimezone ('2025-11-20 ' ));
214+ }
215+
216+ public function testValidateDateIso8601Empty (): void
217+ {
218+ self ::assertFalse (ValidateDate::validateDateIso8601 ('' ));
219+ }
220+
221+ public function testValidateDateIso8601Duration (): void
222+ {
223+ self ::assertTrue (ValidateDate::validateDateIso8601 ('P1Y ' ));
224+ self ::assertTrue (ValidateDate::validateDateIso8601 ('P1M ' ));
225+ self ::assertTrue (ValidateDate::validateDateIso8601 ('P1D ' ));
226+ self ::assertTrue (ValidateDate::validateDateIso8601 ('PT1H ' ));
227+ self ::assertTrue (ValidateDate::validateDateIso8601 ('PT1M ' ));
228+ self ::assertTrue (ValidateDate::validateDateIso8601 ('PT1S ' ));
229+ self ::assertTrue (ValidateDate::validateDateIso8601 ('P1Y2M3DT4H5M6S ' ));
230+ self ::assertFalse (ValidateDate::validateDateIso8601 ('P ' ));
231+ }
232+
233+ public function testValidateDateIso8601WeekDate (): void
234+ {
235+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-W01 ' ));
236+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-W52 ' ));
237+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-W01-1 ' ));
238+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-W01-7 ' ));
239+ self ::assertFalse (ValidateDate::validateDateIso8601 ('2025-W00 ' ));
240+ self ::assertFalse (ValidateDate::validateDateIso8601 ('2025-W54 ' ));
241+ }
242+
243+ public function testValidateDateIso8601OrdinalDate (): void
244+ {
245+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-001 ' ));
246+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-365 ' ));
247+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2024-366 ' ));
248+ self ::assertFalse (ValidateDate::validateDateIso8601 ('2025-000 ' ));
249+ self ::assertFalse (ValidateDate::validateDateIso8601 ('2025-366 ' ));
250+ }
251+
252+ public function testValidateDateIso8601Interval (): void
253+ {
254+ self ::assertTrue (ValidateDate::validateDateIso8601 ('2025-01-01/2025-12-31 ' ));
255+ self ::assertTrue (ValidateDate::validateDateIso8601 ('P1Y/2025-12-31 ' ));
256+ self ::assertFalse (ValidateDate::validateDateIso8601 ('2025-01-01/ ' ));
257+ self ::assertFalse (ValidateDate::validateDateIso8601 ('/2025-12-31 ' ));
258+ }
113259}
0 commit comments