@@ -314,7 +314,7 @@ describe "File" do
314
314
begin
315
315
File .write(path, " " )
316
316
File .chmod(path, 0o775 )
317
- File .stat(path).perm .should eq(0o775 )
317
+ File .stat(path).permissions .should eq(0o775 )
318
318
ensure
319
319
File .delete(path) if File .exists?(path)
320
320
end
@@ -325,20 +325,31 @@ describe "File" do
325
325
begin
326
326
Dir .mkdir(path, 0o775 )
327
327
File .chmod(path, 0o664 )
328
- File .stat(path).perm .should eq(0o664 )
328
+ File .stat(path).permissions .should eq(0o664 )
329
329
ensure
330
330
Dir .rmdir(path) if Dir .exists?(path)
331
331
end
332
332
end
333
333
334
+ it " can take File::Permissions" do
335
+ path = " #{ __DIR__ } /data/chmod.txt"
336
+ begin
337
+ File .write(path, " " )
338
+ File .chmod(path, File ::Permissions .flags(OwnerAll , GroupAll , OtherExecute , OtherRead ))
339
+ File .stat(path).permissions.should eq(0o775 )
340
+ ensure
341
+ File .delete(path) if File .exists?(path)
342
+ end
343
+ end
344
+
334
345
it " follows symlinks" do
335
346
path = " #{ __DIR__ } /data/chmod_destination.txt"
336
347
link = " #{ __DIR__ } /data/chmod.txt"
337
348
begin
338
349
File .write(path, " " )
339
350
File .symlink(path, link)
340
351
File .chmod(link, 0o775 )
341
- File .stat(link).perm .should eq(0o775 )
352
+ File .stat(link).permissions .should eq(0o775 )
342
353
ensure
343
354
File .delete(path) if File .exists?(path)
344
355
File .delete(link) if File .symlink?(link)
@@ -354,61 +365,35 @@ describe "File" do
354
365
355
366
it " gets stat for this file" do
356
367
stat = File .stat(__FILE__ )
357
- stat.blockdev?.should be_false
358
- stat.chardev?.should be_false
359
- stat.directory?.should be_false
360
- stat.file?.should be_true
361
- stat.symlink?.should be_false
362
- stat.socket?.should be_false
368
+ stat.type.should eq(File ::Type ::File )
363
369
end
364
370
365
371
it " gets stat for this directory" do
366
372
stat = File .stat(__DIR__)
367
- stat.blockdev?.should be_false
368
- stat.chardev?.should be_false
369
- stat.directory?.should be_true
370
- stat.file?.should be_false
371
- stat.symlink?.should be_false
372
- stat.socket?.should be_false
373
+ stat.type.should eq(File ::Type ::Directory )
373
374
end
374
375
375
376
it " gets stat for a character device" do
376
377
stat = File .stat(" /dev/null" )
377
- stat.blockdev?.should be_false
378
- stat.chardev?.should be_true
379
- stat.directory?.should be_false
380
- stat.file?.should be_false
381
- stat.symlink?.should be_false
382
- stat.socket?.should be_false
378
+ stat.type.should eq(File ::Type ::CharacterDevice )
383
379
end
384
380
385
381
it " gets stat for a symlink" do
386
382
stat = File .lstat(" #{ __DIR__ } /data/symlink.txt" )
387
- stat.blockdev?.should be_false
388
- stat.chardev?.should be_false
389
- stat.directory?.should be_false
390
- stat.file?.should be_false
391
- stat.symlink?.should be_true
392
- stat.socket?.should be_false
383
+ stat.type.should eq(File ::Type ::SymbolicLink )
393
384
end
394
385
395
386
it " gets stat for open file" do
396
387
File .open(__FILE__ , " r" ) do |file |
397
388
stat = file.stat
398
- stat.blockdev?.should be_false
399
- stat.chardev?.should be_false
400
- stat.directory?.should be_false
401
- stat.file?.should be_true
402
- stat.symlink?.should be_false
403
- stat.socket?.should be_false
404
- stat.pipe?.should be_false
389
+ stat.type.should eq(File ::Type ::File )
405
390
end
406
391
end
407
392
408
393
it " gets stat for pipe" do
409
394
IO .pipe do |r , w |
410
- r.stat.pipe? .should be_true
411
- w.stat.pipe? .should be_true
395
+ r.stat.type .should eq( File :: Type :: Pipe )
396
+ w.stat.type .should eq( File :: Type :: Pipe )
412
397
end
413
398
end
414
399
@@ -421,9 +406,8 @@ describe "File" do
421
406
it " gets stat mtime for new file" do
422
407
tmp = Tempfile .new " tmp"
423
408
begin
424
- (tmp.stat.atime - Time .utc_now).total_seconds.should be < 5
425
- (tmp.stat.ctime - Time .utc_now).total_seconds.should be < 5
426
- (tmp.stat.mtime - Time .utc_now).total_seconds.should be < 5
409
+ tmp.stat.modification_time.should be_close(Time .now, 5 .seconds)
410
+ File .stat(tmp.path).modification_time.should be_close(Time .now, 5 .seconds)
427
411
ensure
428
412
tmp.delete
429
413
end
@@ -680,11 +664,20 @@ describe "File" do
680
664
end
681
665
end
682
666
683
- it " opens with perm" do
667
+ it " opens with perm (int) " do
684
668
filename = " #{ __DIR__ } /data/temp_write.txt"
685
669
perm = 0o600
686
670
File .open(filename, " w" , perm) do |file |
687
- file.stat.perm.should eq(perm)
671
+ file.stat.permissions.should eq(perm)
672
+ end
673
+ File .delete filename
674
+ end
675
+
676
+ it " opens with perm (File::Permissions)" do
677
+ filename = " #{ __DIR__ } /data/temp_write.txt"
678
+ perm = File ::Permissions .flags(OwnerRead , OwnerWrite )
679
+ File .open(filename, " w" , perm) do |file |
680
+ file.stat.permissions.should eq(perm)
688
681
end
689
682
File .delete filename
690
683
end
@@ -1039,8 +1032,7 @@ describe "File" do
1039
1032
File .utime(atime, mtime, filename)
1040
1033
1041
1034
stat = File .stat(filename)
1042
- stat.atime.should eq(atime)
1043
- stat.mtime.should eq(mtime)
1035
+ stat.modification_time.should eq(mtime)
1044
1036
1045
1037
File .delete filename
1046
1038
end
@@ -1074,8 +1066,7 @@ describe "File" do
1074
1066
File .touch(filename, time)
1075
1067
1076
1068
stat = File .stat(filename)
1077
- stat.atime.should eq(time)
1078
- stat.mtime.should eq(time)
1069
+ stat.modification_time.should eq(time)
1079
1070
ensure
1080
1071
File .delete filename
1081
1072
end
@@ -1088,8 +1079,7 @@ describe "File" do
1088
1079
File .touch(filename)
1089
1080
1090
1081
stat = File .stat(filename)
1091
- stat.atime.should be_close(time, 1 .second)
1092
- stat.mtime.should be_close(time, 1 .second)
1082
+ stat.modification_time.should be_close(time, 1 .second)
1093
1083
ensure
1094
1084
File .delete filename
1095
1085
end
@@ -1221,4 +1211,13 @@ describe "File" do
1221
1211
File .match?(" ab{{c,d}ef,}" , " abdef" ).should be_true
1222
1212
end
1223
1213
end
1214
+
1215
+ describe File ::Permissions do
1216
+ it " does to_s" do
1217
+ perm = File ::Permissions .flags(OwnerAll , GroupRead , GroupWrite , OtherRead )
1218
+ perm.to_s.should eq(" rwxrw-r-- (0o764)" )
1219
+ perm.inspect.should eq(" rwxrw-r-- (0o764)" )
1220
+ perm.pretty_inspect.should eq(" rwxrw-r-- (0o764)" )
1221
+ end
1222
+ end
1224
1223
end
0 commit comments