@@ -426,6 +426,53 @@ func TestRootChmod(t *testing.T) {
426
426
}
427
427
}
428
428
429
+ func TestRootChtimes (t * testing.T ) {
430
+ for _ , test := range rootTestCases {
431
+ test .run (t , func (t * testing.T , target string , root * os.Root ) {
432
+ if target != "" {
433
+ if err := os .WriteFile (target , nil , 0o666 ); err != nil {
434
+ t .Fatal (err )
435
+ }
436
+ }
437
+ for _ , times := range []struct {
438
+ atime , mtime time.Time
439
+ }{{
440
+ atime : time .Now ().Add (- 1 * time .Minute ),
441
+ mtime : time .Now ().Add (- 1 * time .Minute ),
442
+ }, {
443
+ atime : time .Now ().Add (1 * time .Minute ),
444
+ mtime : time .Now ().Add (1 * time .Minute ),
445
+ }, {
446
+ atime : time.Time {},
447
+ mtime : time .Now (),
448
+ }, {
449
+ atime : time .Now (),
450
+ mtime : time.Time {},
451
+ }} {
452
+ if runtime .GOOS == "js" {
453
+ times .atime = times .atime .Truncate (1 * time .Second )
454
+ times .mtime = times .mtime .Truncate (1 * time .Second )
455
+ }
456
+
457
+ err := root .Chtimes (test .open , times .atime , times .mtime )
458
+ if errEndsTest (t , err , test .wantError , "root.Chtimes(%q)" , test .open ) {
459
+ return
460
+ }
461
+ st , err := os .Stat (target )
462
+ if err != nil {
463
+ t .Fatalf ("os.Stat(%q) = %v" , target , err )
464
+ }
465
+ if got := st .ModTime (); ! times .mtime .IsZero () && ! got .Equal (times .mtime ) {
466
+ t .Errorf ("after root.Chtimes(%q, %v, %v): got mtime=%v, want %v" , test .open , times .atime , times .mtime , got , times .mtime )
467
+ }
468
+ if got := os .Atime (st ); ! times .atime .IsZero () && ! got .Equal (times .atime ) {
469
+ t .Errorf ("after root.Chtimes(%q, %v, %v): got atime=%v, want %v" , test .open , times .atime , times .mtime , got , times .atime )
470
+ }
471
+ }
472
+ })
473
+ }
474
+ }
475
+
429
476
func TestRootMkdir (t * testing.T ) {
430
477
for _ , test := range rootTestCases {
431
478
test .run (t , func (t * testing.T , target string , root * os.Root ) {
0 commit comments