6
6
* found in the LICENSE file at https://angular.dev/license
7
7
*/
8
8
9
- import { TestBed , waitForAsync } from '@angular/core/testing' ;
9
+ import { TestBed } from '@angular/core/testing' ;
10
10
import { DateAdapter , MAT_DATE_LOCALE } from '@angular/material/core' ;
11
11
import { Locale } from 'date-fns' ;
12
- import { ja , enUS , da , de } from 'date-fns/locale' ;
12
+ import { ja , enUS , da , de , fi } from 'date-fns/locale' ;
13
13
import { DateFnsModule } from './index' ;
14
14
15
15
const JAN = 0 ,
@@ -20,14 +20,11 @@ const JAN = 0,
20
20
describe ( 'DateFnsAdapter' , ( ) => {
21
21
let adapter : DateAdapter < Date , Locale > ;
22
22
23
- beforeEach ( waitForAsync ( ( ) => {
24
- TestBed . configureTestingModule ( {
25
- imports : [ DateFnsModule ] ,
26
- } ) ;
27
-
23
+ beforeEach ( ( ) => {
24
+ TestBed . configureTestingModule ( { imports : [ DateFnsModule ] } ) ;
28
25
adapter = TestBed . inject ( DateAdapter ) ;
29
26
adapter . setLocale ( enUS ) ;
30
- } ) ) ;
27
+ } ) ;
31
28
32
29
it ( 'should get year' , ( ) => {
33
30
expect ( adapter . getYear ( new Date ( 2017 , JAN , 1 ) ) ) . toBe ( 2017 ) ;
@@ -452,19 +449,146 @@ describe('DateFnsAdapter', () => {
452
449
it ( 'should create invalid date' , ( ) => {
453
450
assertValidDate ( adapter , adapter . invalid ( ) , false ) ;
454
451
} ) ;
452
+
453
+ it ( 'should get hours' , ( ) => {
454
+ expect ( adapter . getHours ( new Date ( 2024 , JAN , 1 , 14 ) ) ) . toBe ( 14 ) ;
455
+ } ) ;
456
+
457
+ it ( 'should get minutes' , ( ) => {
458
+ expect ( adapter . getMinutes ( new Date ( 2024 , JAN , 1 , 14 , 53 ) ) ) . toBe ( 53 ) ;
459
+ } ) ;
460
+
461
+ it ( 'should get seconds' , ( ) => {
462
+ expect ( adapter . getSeconds ( new Date ( 2024 , JAN , 1 , 14 , 53 , 42 ) ) ) . toBe ( 42 ) ;
463
+ } ) ;
464
+
465
+ it ( 'should set the time of a date' , ( ) => {
466
+ const target = new Date ( 2024 , JAN , 1 , 0 , 0 , 0 ) ;
467
+ const result = adapter . setTime ( target , 14 , 53 , 42 ) ;
468
+ expect ( adapter . getHours ( result ) ) . toBe ( 14 ) ;
469
+ expect ( adapter . getMinutes ( result ) ) . toBe ( 53 ) ;
470
+ expect ( adapter . getSeconds ( result ) ) . toBe ( 42 ) ;
471
+ } ) ;
472
+
473
+ it ( 'should throw when passing in invalid hours to setTime' , ( ) => {
474
+ expect ( ( ) => adapter . setTime ( adapter . today ( ) , - 1 , 0 , 0 ) ) . toThrowError (
475
+ 'Invalid hours "-1". Hours value must be between 0 and 23.' ,
476
+ ) ;
477
+ expect ( ( ) => adapter . setTime ( adapter . today ( ) , 51 , 0 , 0 ) ) . toThrowError (
478
+ 'Invalid hours "51". Hours value must be between 0 and 23.' ,
479
+ ) ;
480
+ } ) ;
481
+
482
+ it ( 'should throw when passing in invalid minutes to setTime' , ( ) => {
483
+ expect ( ( ) => adapter . setTime ( adapter . today ( ) , 0 , - 1 , 0 ) ) . toThrowError (
484
+ 'Invalid minutes "-1". Minutes value must be between 0 and 59.' ,
485
+ ) ;
486
+ expect ( ( ) => adapter . setTime ( adapter . today ( ) , 0 , 65 , 0 ) ) . toThrowError (
487
+ 'Invalid minutes "65". Minutes value must be between 0 and 59.' ,
488
+ ) ;
489
+ } ) ;
490
+
491
+ it ( 'should throw when passing in invalid seconds to setTime' , ( ) => {
492
+ expect ( ( ) => adapter . setTime ( adapter . today ( ) , 0 , 0 , - 1 ) ) . toThrowError (
493
+ 'Invalid seconds "-1". Seconds value must be between 0 and 59.' ,
494
+ ) ;
495
+ expect ( ( ) => adapter . setTime ( adapter . today ( ) , 0 , 0 , 65 ) ) . toThrowError (
496
+ 'Invalid seconds "65". Seconds value must be between 0 and 59.' ,
497
+ ) ;
498
+ } ) ;
499
+
500
+ it ( 'should parse a 24-hour time string' , ( ) => {
501
+ adapter . setLocale ( da ) ;
502
+ const result = adapter . parseTime ( '14:52' , 'p' ) ! ;
503
+ expect ( result ) . toBeTruthy ( ) ;
504
+ expect ( adapter . isValid ( result ) ) . toBe ( true ) ;
505
+ expect ( adapter . getHours ( result ) ) . toBe ( 14 ) ;
506
+ expect ( adapter . getMinutes ( result ) ) . toBe ( 52 ) ;
507
+ expect ( adapter . getSeconds ( result ) ) . toBe ( 0 ) ;
508
+ } ) ;
509
+
510
+ it ( 'should parse a 12-hour time string' , ( ) => {
511
+ const result = adapter . parseTime ( '2:52 PM' , 'p' ) ! ;
512
+ expect ( result ) . toBeTruthy ( ) ;
513
+ expect ( adapter . isValid ( result ) ) . toBe ( true ) ;
514
+ expect ( adapter . getHours ( result ) ) . toBe ( 14 ) ;
515
+ expect ( adapter . getMinutes ( result ) ) . toBe ( 52 ) ;
516
+ expect ( adapter . getSeconds ( result ) ) . toBe ( 0 ) ;
517
+ } ) ;
518
+
519
+ it ( 'should parse a padded time string' , ( ) => {
520
+ const result = adapter . parseTime ( '03:04:05 AM' , 'pp' ) ! ;
521
+ expect ( result ) . toBeTruthy ( ) ;
522
+ expect ( adapter . isValid ( result ) ) . toBe ( true ) ;
523
+ expect ( adapter . getHours ( result ) ) . toBe ( 3 ) ;
524
+ expect ( adapter . getMinutes ( result ) ) . toBe ( 4 ) ;
525
+ expect ( adapter . getSeconds ( result ) ) . toBe ( 5 ) ;
526
+ } ) ;
527
+
528
+ it ( 'should parse a time string that uses dot as a separator' , ( ) => {
529
+ adapter . setLocale ( fi ) ;
530
+ const result = adapter . parseTime ( '14.52' , 'p' ) ! ;
531
+ expect ( result ) . toBeTruthy ( ) ;
532
+ expect ( adapter . isValid ( result ) ) . toBe ( true ) ;
533
+ expect ( adapter . getHours ( result ) ) . toBe ( 14 ) ;
534
+ expect ( adapter . getMinutes ( result ) ) . toBe ( 52 ) ;
535
+ expect ( adapter . getSeconds ( result ) ) . toBe ( 0 ) ;
536
+ } ) ;
537
+
538
+ it ( 'should return an invalid date when parsing invalid time string' , ( ) => {
539
+ expect ( adapter . isValid ( adapter . parseTime ( 'abc' , 'p' ) ! ) ) . toBe ( false ) ;
540
+ expect ( adapter . isValid ( adapter . parseTime ( '123' , 'p' ) ! ) ) . toBe ( false ) ;
541
+ expect ( adapter . isValid ( adapter . parseTime ( '' , 'p' ) ! ) ) . toBe ( false ) ;
542
+ expect ( adapter . isValid ( adapter . parseTime ( ' ' , 'p' ) ! ) ) . toBe ( false ) ;
543
+ expect ( adapter . isValid ( adapter . parseTime ( true , 'p' ) ! ) ) . toBe ( false ) ;
544
+ expect ( adapter . isValid ( adapter . parseTime ( undefined , 'p' ) ! ) ) . toBe ( false ) ;
545
+ expect ( adapter . isValid ( adapter . parseTime ( '14:52 PM' , 'p' ) ! ) ) . toBe ( false ) ;
546
+ expect ( adapter . isValid ( adapter . parseTime ( '24:05' , 'p' ) ! ) ) . toBe ( false ) ;
547
+ expect ( adapter . isValid ( adapter . parseTime ( '00:61:05' , 'p' ) ! ) ) . toBe ( false ) ;
548
+ expect ( adapter . isValid ( adapter . parseTime ( '14:52:78' , 'p' ) ! ) ) . toBe ( false ) ;
549
+ } ) ;
550
+
551
+ it ( 'should compare times' , ( ) => {
552
+ const base = [ 2024 , JAN , 1 ] as const ;
553
+
554
+ expect (
555
+ adapter . compareTime ( new Date ( ...base , 12 , 0 , 0 ) , new Date ( ...base , 13 , 0 , 0 ) ) ,
556
+ ) . toBeLessThan ( 0 ) ;
557
+ expect (
558
+ adapter . compareTime ( new Date ( ...base , 12 , 50 , 0 ) , new Date ( ...base , 12 , 51 , 0 ) ) ,
559
+ ) . toBeLessThan ( 0 ) ;
560
+ expect ( adapter . compareTime ( new Date ( ...base , 1 , 2 , 3 ) , new Date ( ...base , 1 , 2 , 3 ) ) ) . toBe ( 0 ) ;
561
+ expect (
562
+ adapter . compareTime ( new Date ( ...base , 13 , 0 , 0 ) , new Date ( ...base , 12 , 0 , 0 ) ) ,
563
+ ) . toBeGreaterThan ( 0 ) ;
564
+ expect (
565
+ adapter . compareTime ( new Date ( ...base , 12 , 50 , 11 ) , new Date ( ...base , 12 , 50 , 10 ) ) ,
566
+ ) . toBeGreaterThan ( 0 ) ;
567
+ expect (
568
+ adapter . compareTime ( new Date ( ...base , 13 , 0 , 0 ) , new Date ( ...base , 10 , 59 , 59 ) ) ,
569
+ ) . toBeGreaterThan ( 0 ) ;
570
+ } ) ;
571
+
572
+ it ( 'should add milliseconds to a date' , ( ) => {
573
+ const amount = 1234567 ;
574
+ const initial = new Date ( 2024 , JAN , 1 , 12 , 34 , 56 ) ;
575
+ const result = adapter . addMilliseconds ( initial , amount ) ;
576
+ expect ( result ) . not . toBe ( initial ) ;
577
+ expect ( result . getTime ( ) - initial . getTime ( ) ) . toBe ( amount ) ;
578
+ } ) ;
455
579
} ) ;
456
580
457
581
describe ( 'DateFnsAdapter with MAT_DATE_LOCALE override' , ( ) => {
458
582
let adapter : DateAdapter < Date , Locale > ;
459
583
460
- beforeEach ( waitForAsync ( ( ) => {
584
+ beforeEach ( ( ) => {
461
585
TestBed . configureTestingModule ( {
462
586
imports : [ DateFnsModule ] ,
463
587
providers : [ { provide : MAT_DATE_LOCALE , useValue : da } ] ,
464
588
} ) ;
465
589
466
590
adapter = TestBed . inject ( DateAdapter ) ;
467
- } ) ) ;
591
+ } ) ;
468
592
469
593
it ( 'should take the default locale id from the MAT_DATE_LOCALE injection token' , ( ) => {
470
594
const date = adapter . format ( new Date ( 2017 , JAN , 2 ) , 'PP' ) ;
0 commit comments