fakefs 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,3 +9,5 @@ require 'fakefs/fileutils'
9
9
  require 'fakefs/file'
10
10
  require 'fakefs/file_test'
11
11
  require 'fakefs/dir'
12
+ require 'fakefs/pathname' if RUBY_VERSION >= "1.9.3"
13
+
@@ -1,6 +1,6 @@
1
1
  module FakeFS
2
2
  module Version
3
- VERSION = "0.4.0"
3
+ VERSION = "0.4.1"
4
4
 
5
5
  def self.to_s
6
6
  VERSION
@@ -55,12 +55,12 @@ class FakeFSTest < Test::Unit::TestCase
55
55
  assert_kind_of FakeDir, FileSystem.fs['path']['to']['dir']
56
56
  end
57
57
 
58
- def test_can_create_directories_with_mkpath
58
+ def test_can_create_directories_with_mkdirs
59
59
  FileUtils.makedirs("/path/to/dir")
60
60
  assert_kind_of FakeDir, FileSystem.fs['path']['to']['dir']
61
61
  end
62
62
 
63
- def test_can_create_directories_with_mkpath_and_options
63
+ def test_can_create_directories_with_mkdirs_and_options
64
64
  FileUtils.makedirs("/path/to/dir", :mode => 0755)
65
65
  assert_kind_of FakeDir, FileSystem.fs['path']['to']['dir']
66
66
  end
@@ -71,6 +71,12 @@ class FakeFSTest < Test::Unit::TestCase
71
71
  end
72
72
  end
73
73
 
74
+ def test_unlink_doesnt_error_on_file_not_found_when_forced
75
+ assert_nothing_raised do
76
+ FileUtils.rm("/foo", :force => true)
77
+ end
78
+ end
79
+
74
80
  def test_can_delete_directories
75
81
  FileUtils.mkdir_p("/path/to/dir")
76
82
  FileUtils.rmdir("/path/to/dir")
@@ -95,6 +101,13 @@ class FakeFSTest < Test::Unit::TestCase
95
101
  assert File.directory?(path)
96
102
  end
97
103
 
104
+ def test_knows_directories_are_directories_with_periods
105
+ FileUtils.mkdir_p(period_path = "/path/to/periodfiles/one.one")
106
+ FileUtils.mkdir("/path/to/periodfiles/one-one")
107
+
108
+ assert File.directory?(period_path)
109
+ end
110
+
98
111
  def test_knows_symlink_directories_are_directories
99
112
  FileUtils.mkdir_p(path = "/path/to/dir")
100
113
  FileUtils.ln_s path, sympath = '/sympath'
@@ -412,6 +425,15 @@ class FakeFSTest < Test::Unit::TestCase
412
425
  assert_equal "Yatta!", File.read(path)
413
426
  end
414
427
 
428
+ def test_file_read_accepts_hashes
429
+ path = 'file.txt'
430
+ File.open(path, 'w') do |f|
431
+ f.write 'Yatta!'
432
+ end
433
+
434
+ assert_nothing_raised { File.read(path, :mode => 'r:UTF-8:-') }
435
+ end
436
+
415
437
  def test_can_write_to_files
416
438
  path = 'file.txt'
417
439
  File.open(path, 'w') do |f|
@@ -495,27 +517,46 @@ class FakeFSTest < Test::Unit::TestCase
495
517
  assert File.ctime('foo').is_a?(Time)
496
518
  end
497
519
 
498
- def test_ctime_and_mtime_are_equal_for_new_files
520
+ def test_raises_error_on_atime_if_file_does_not_exist
521
+ assert_raise Errno::ENOENT do
522
+ File.atime('file.txt')
523
+ end
524
+ end
525
+
526
+ def test_can_return_atime_on_existing_file
499
527
  File.open("foo", "w") { |f| f << "some content" }
528
+ assert File.atime('foo').is_a?(Time)
529
+ end
530
+
531
+ def test_ctime_mtime_and_atime_are_equal_for_new_files
532
+ FileUtils.touch('foo')
533
+
500
534
  ctime = File.ctime("foo")
501
535
  mtime = File.mtime("foo")
536
+ atime = File.atime("foo")
502
537
  assert ctime.is_a?(Time)
503
538
  assert mtime.is_a?(Time)
539
+ assert atime.is_a?(Time)
504
540
  assert_equal ctime, mtime
541
+ assert_equal ctime, atime
505
542
 
506
543
  File.open("foo", "r") do |f|
507
544
  assert_equal ctime, f.ctime
508
545
  assert_equal mtime, f.mtime
546
+ assert_equal atime, f.atime
509
547
  end
510
548
  end
511
549
 
512
- def test_ctime_and_mtime_are_equal_for_new_directories
550
+ def test_ctime_mtime_and_atime_are_equal_for_new_directories
513
551
  FileUtils.mkdir_p("foo")
514
552
  ctime = File.ctime("foo")
515
553
  mtime = File.mtime("foo")
554
+ atime = File.atime("foo")
516
555
  assert ctime.is_a?(Time)
517
556
  assert mtime.is_a?(Time)
557
+ assert atime.is_a?(Time)
518
558
  assert_equal ctime, mtime
559
+ assert_equal ctime, atime
519
560
  end
520
561
 
521
562
  def test_file_ctime_is_equal_to_file_stat_ctime
@@ -538,6 +579,16 @@ class FakeFSTest < Test::Unit::TestCase
538
579
  assert_equal File.stat("foo").mtime, File.mtime("foo")
539
580
  end
540
581
 
582
+ def test_file_atime_is_equal_to_file_stat_atime
583
+ File.open("foo", "w") { |f| f << "some content" }
584
+ assert_equal File.stat("foo").atime, File.atime("foo")
585
+ end
586
+
587
+ def test_directory_atime_is_equal_to_directory_stat_atime
588
+ FileUtils.mkdir_p("foo")
589
+ assert_equal File.stat("foo").atime, File.atime("foo")
590
+ end
591
+
541
592
  def test_utime_raises_error_if_path_does_not_exist
542
593
  assert_raise Errno::ENOENT do
543
594
  File.utime(Time.now, Time.now, '/path/to/file.txt')
@@ -552,6 +603,7 @@ class FakeFSTest < Test::Unit::TestCase
552
603
  end
553
604
  File.utime(time, time, path)
554
605
  assert_equal time, File.mtime('file.txt')
606
+ assert_equal time, File.atime('file.txt')
555
607
  end
556
608
 
557
609
  def test_utime_returns_number_of_paths
@@ -564,6 +616,21 @@ class FakeFSTest < Test::Unit::TestCase
564
616
  assert_equal 2, File.utime(Time.now, Time.now, path1, path2)
565
617
  end
566
618
 
619
+ def test_file_a_time_updated_when_file_is_read
620
+ old_atime = Time.now - 300
621
+
622
+ path = "file.txt"
623
+ File.open(path, "w") do |f|
624
+ f << "Hello"
625
+ end
626
+
627
+ File.utime(old_atime, File.mtime(path), path)
628
+
629
+ assert_equal File.atime(path), old_atime
630
+ File.read(path)
631
+ assert File.atime(path) != old_atime
632
+ end
633
+
567
634
  def test_can_read_with_File_readlines
568
635
  path = 'file.txt'
569
636
  File.open(path, 'w') do |f|
@@ -603,6 +670,21 @@ class FakeFSTest < Test::Unit::TestCase
603
670
  assert_equal "Yatta!", File.new(path).read
604
671
  end
605
672
 
673
+ if RUBY_VERSION >= "1.9"
674
+ def test_file_object_has_default_external_encoding
675
+ Encoding.default_external = "UTF-8"
676
+ path = 'file.txt'
677
+ File.open(path, 'w'){|f| f.write 'Yatta!' }
678
+ assert_equal "UTF-8", File.new(path).read.encoding.name
679
+ end
680
+ end
681
+
682
+ def test_file_object_initialization_with_mode_in_hash_parameter
683
+ assert_nothing_raised do
684
+ File.open("file.txt", {:mode => "w"}){ |f| f.write 'Yatta!' }
685
+ end
686
+ end
687
+
606
688
  def test_file_read_errors_appropriately
607
689
  assert_raise Errno::ENOENT do
608
690
  File.read('anything')
@@ -646,30 +728,83 @@ class FakeFSTest < Test::Unit::TestCase
646
728
  good = 'file.txt'
647
729
  bad = 'nofile.txt'
648
730
  File.open(good,'w') { |f| f.write "foo" }
731
+ username = Etc.getpwuid(Process.uid).name
732
+ groupname = Etc.getgrgid(Process.gid).name
649
733
 
650
- out = FileUtils.chown('noone', 'nogroup', good, :verbose => true)
734
+ out = FileUtils.chown(1337, 1338, good, :verbose => true)
651
735
  assert_equal [good], out
736
+ assert_equal File.stat(good).uid, 1337
737
+ assert_equal File.stat(good).gid, 1338
652
738
  assert_raises(Errno::ENOENT) do
653
- FileUtils.chown('noone', 'nogroup', bad, :verbose => true)
739
+ FileUtils.chown(username, groupname, bad, :verbose => true)
654
740
  end
655
741
 
656
- assert_equal [good], FileUtils.chown('noone', 'nogroup', good)
742
+ assert_equal [good], FileUtils.chown(username, groupname, good)
743
+ assert_equal File.stat(good).uid, Process.uid
744
+ assert_equal File.stat(good).gid, Process.gid
657
745
  assert_raises(Errno::ENOENT) do
658
- FileUtils.chown('noone', 'nogroup', bad)
746
+ FileUtils.chown(username, groupname, bad)
659
747
  end
660
748
 
661
- assert_equal [good], FileUtils.chown('noone', 'nogroup', [good])
749
+ assert_equal [good], FileUtils.chown(username, groupname, [good])
750
+ assert_equal File.stat(good).uid, Process.uid
751
+ assert_equal File.stat(good).gid, Process.gid
662
752
  assert_raises(Errno::ENOENT) do
663
- FileUtils.chown('noone', 'nogroup', [good, bad])
753
+ FileUtils.chown(username, groupname, [good, bad])
664
754
  end
665
755
  end
666
756
 
667
757
  def test_can_chown_R_files
758
+ username = Etc.getpwuid(Process.uid).name
759
+ groupname = Etc.getgrgid(Process.gid).name
668
760
  FileUtils.mkdir_p '/path/'
669
761
  File.open('/path/foo', 'w') { |f| f.write 'foo' }
670
762
  File.open('/path/foobar', 'w') { |f| f.write 'foo' }
671
- resp = FileUtils.chown_R('no', 'no', '/path')
672
- assert_equal ['/path'], resp
763
+ assert_equal ['/path'], FileUtils.chown_R(username, groupname, '/path')
764
+ %w(/path /path/foo /path/foobar).each do |f|
765
+ assert_equal File.stat(f).uid, Process.uid
766
+ assert_equal File.stat(f).gid, Process.gid
767
+ end
768
+ end
769
+
770
+ def test_can_chmod_files
771
+ good = "file.txt"
772
+ bad = "nofile.txt"
773
+ FileUtils.touch(good)
774
+
775
+ assert_equal [good], FileUtils.chmod(0600, good, :verbose => true)
776
+ assert_equal File.stat(good).mode, 0100600
777
+ assert_raises(Errno::ENOENT) do
778
+ FileUtils.chmod(0600, bad)
779
+ end
780
+
781
+ assert_equal [good], FileUtils.chmod(0666, good)
782
+ assert_equal File.stat(good).mode, 0100666
783
+ assert_raises(Errno::ENOENT) do
784
+ FileUtils.chmod(0666, bad)
785
+ end
786
+
787
+ assert_equal [good], FileUtils.chmod(0644, [good])
788
+ assert_equal File.stat(good).mode, 0100644
789
+ assert_raises(Errno::ENOENT) do
790
+ FileUtils.chmod(0644, bad)
791
+ end
792
+ end
793
+
794
+ def test_can_chmod_R_files
795
+ FileUtils.mkdir_p "/path/sub"
796
+ FileUtils.touch "/path/file1"
797
+ FileUtils.touch "/path/sub/file2"
798
+
799
+ assert_equal ["/path"], FileUtils.chmod_R(0600, "/path")
800
+ assert_equal File.stat("/path").mode, 0100600
801
+ assert_equal File.stat("/path/file1").mode, 0100600
802
+ assert_equal File.stat("/path/sub").mode, 0100600
803
+ assert_equal File.stat("/path/sub/file2").mode, 0100600
804
+
805
+ FileUtils.mkdir_p "/path2"
806
+ FileUtils.touch "/path2/hej"
807
+ assert_equal ["/path2"], FileUtils.chmod_R(0600, "/path2")
673
808
  end
674
809
 
675
810
  def test_dir_globs_paths
@@ -698,6 +833,9 @@ class FakeFSTest < Test::Unit::TestCase
698
833
  assert_equal ['/path/bar', '/path/bar/baz', '/path/bar2', '/path/bar2/baz', '/path/foo', '/path/foobar'], Dir['/path/**/*']
699
834
  assert_equal ['/path/bar/baz'], Dir['/path/bar/**/*']
700
835
 
836
+ assert_equal ['/path/bar/baz', '/path/bar2/baz'], Dir['/path/bar/**/*', '/path/bar2/**/*']
837
+ assert_equal ['/path/bar/baz', '/path/bar2/baz', '/path/bar/baz'], Dir['/path/ba*/**/*', '/path/bar/**/*']
838
+
701
839
  FileUtils.cp_r '/path', '/otherpath'
702
840
 
703
841
  assert_equal %w( /otherpath/foo /otherpath/foobar /path/foo /path/foobar ), Dir['/*/foo*']
@@ -705,6 +843,10 @@ class FakeFSTest < Test::Unit::TestCase
705
843
  assert_equal ['/path/bar', '/path/foo'], Dir['/path/{foo,bar}']
706
844
 
707
845
  assert_equal ['/path/bar', '/path/bar2'], Dir['/path/bar{2,}']
846
+
847
+ Dir.chdir '/path' do
848
+ assert_equal ['foo'], Dir['foo']
849
+ end
708
850
  end
709
851
 
710
852
  def test_dir_glob_handles_root
@@ -741,6 +883,12 @@ class FakeFSTest < Test::Unit::TestCase
741
883
  assert_equal 2, yielded.size
742
884
  end
743
885
 
886
+ if RUBY_VERSION >= "1.9"
887
+ def test_dir_home
888
+ assert_equal RealDir.home, Dir.home
889
+ end
890
+ end
891
+
744
892
  def test_should_report_pos_as_0_when_opening
745
893
  File.open("foo", "w") do |f|
746
894
  f << "foobar"
@@ -783,19 +931,16 @@ class FakeFSTest < Test::Unit::TestCase
783
931
  assert_equal 1, fp.pos
784
932
  end
785
933
 
786
- # Every method in File is in FakeFS::File
787
- RealFile.instance_methods.each do |method_name|
788
- define_method "test_should_have_method_#{method_name}_from_real_file_class" do
789
- assert File.instance_methods.include?(method_name)
934
+ def test_every_method_in_file_is_in_fake_fs_file
935
+ RealFile.instance_methods.each do |method_name|
936
+ assert File.instance_methods.include?(method_name), "#{method_name} method is not available in File :("
790
937
  end
791
938
  end
792
939
 
793
- # No methods which are in StringIO that aren't in File are included into
794
- # FakeFS::File (because of inheritence)
795
- uniq_string_io_methods = StringIO.instance_methods - RealFile.instance_methods
796
- uniq_string_io_methods.each do |method_name|
797
- define_method "test_file_should_not_respond_to_#{method_name}" do
798
- assert !File.instance_methods.include?(method_name)
940
+ def test_file_should_not_respond_to_string_io_unique_methods
941
+ uniq_string_io_methods = StringIO.instance_methods - RealFile.instance_methods
942
+ uniq_string_io_methods.each do |method_name|
943
+ assert !File.instance_methods.include?(method_name), "File responds to #{method_name}"
799
944
  end
800
945
  end
801
946
 
@@ -808,14 +953,14 @@ class FakeFSTest < Test::Unit::TestCase
808
953
  # I know memes!
809
954
  FileUtils.mkdir_p '/path'
810
955
  assert_equal '/', FileSystem.fs.name
811
- assert_equal({}, FileSystem.fs['path'])
956
+ assert_equal [], Dir.glob('/path/*')
812
957
  Dir.chdir '/path' do
813
958
  File.open('foo', 'w') { |f| f.write 'foo'}
814
959
  File.open('foobar', 'w') { |f| f.write 'foo'}
815
960
  end
816
961
 
817
962
  assert_equal '/', FileSystem.fs.name
818
- assert_equal(['foo', 'foobar'], FileSystem.fs['path'].keys.sort)
963
+ assert_equal(['/path/foo', '/path/foobar'], Dir.glob('/path/*').sort)
819
964
 
820
965
  c = nil
821
966
  Dir.chdir '/path' do
@@ -832,16 +977,16 @@ class FakeFSTest < Test::Unit::TestCase
832
977
  File.open('foo', 'w') { |f| f.write 'foo'}
833
978
  File.open('/foobar', 'w') { |f| f.write 'foo'}
834
979
  end
835
- assert_equal ['foo'], FileSystem.fs['path'].keys.sort
836
- assert_equal ['foobar', 'path'], FileSystem.fs.keys.sort
980
+ assert_equal ['/path/foo'], Dir.glob('/path/*').sort
981
+ assert_equal ['/foobar', '/path'], Dir.glob('/*').sort
837
982
 
838
983
  Dir.chdir '/path' do
839
984
  FileUtils.rm('foo')
840
985
  FileUtils.rm('/foobar')
841
986
  end
842
987
 
843
- assert_equal [], FileSystem.fs['path'].keys.sort
844
- assert_equal ['path'], FileSystem.fs.keys.sort
988
+ assert_equal [], Dir.glob('/path/*').sort
989
+ assert_equal ['/path'], Dir.glob('/*').sort
845
990
  end
846
991
 
847
992
  def test_chdir_should_be_nestable
@@ -853,8 +998,8 @@ class FakeFSTest < Test::Unit::TestCase
853
998
  end
854
999
  end
855
1000
 
856
- assert_equal ['foo','me'], FileSystem.fs['path'].keys.sort
857
- assert_equal ['foobar'], FileSystem.fs['path']['me'].keys.sort
1001
+ assert_equal ['/path/foo','/path/me'], Dir.glob('/path/*').sort
1002
+ assert_equal ['/path/me/foobar'], Dir.glob('/path/me/*').sort
858
1003
  end
859
1004
 
860
1005
  def test_chdir_should_flop_over_and_die_if_the_dir_doesnt_exist
@@ -889,23 +1034,23 @@ class FakeFSTest < Test::Unit::TestCase
889
1034
  assert_equal ['/path'], FileSystem.dir_levels
890
1035
  end
891
1036
 
892
- assert_equal(['foo', 'foobar'], FileSystem.fs['path'].keys.sort)
1037
+ assert_equal(['/path/foo', '/path/foobar'], Dir.glob('/path/*').sort)
893
1038
  end
894
1039
 
895
1040
  def test_chdir_with_no_block_is_awesome
896
1041
  FileUtils.mkdir_p '/path'
897
1042
  Dir.chdir('/path')
898
1043
  FileUtils.mkdir_p 'subdir'
899
- assert_equal ['subdir'], FileSystem.current_dir.keys
1044
+ assert_equal ['subdir'], Dir.glob('*')
900
1045
  Dir.chdir('subdir')
901
1046
  File.open('foo', 'w') { |f| f.write 'foo'}
902
- assert_equal ['foo'], FileSystem.current_dir.keys
1047
+ assert_equal ['foo'], Dir.glob('*')
903
1048
 
904
1049
  assert_raises(Errno::ENOENT) do
905
1050
  Dir.chdir('subsubdir')
906
1051
  end
907
1052
 
908
- assert_equal ['foo'], FileSystem.current_dir.keys
1053
+ assert_equal ['foo'], Dir.glob('*')
909
1054
  end
910
1055
 
911
1056
  def test_current_dir_reflected_by_pwd
@@ -985,6 +1130,25 @@ class FakeFSTest < Test::Unit::TestCase
985
1130
  assert_equal 'bar', File.read('baz/foo')
986
1131
  end
987
1132
 
1133
+ def test_cp_array_of_files_into_directory
1134
+ File.open('foo', 'w') { |f| f.write 'footext' }
1135
+ File.open('bar', 'w') { |f| f.write 'bartext' }
1136
+ FileUtils.mkdir_p 'destdir'
1137
+ FileUtils.cp(%w(foo bar), 'destdir')
1138
+
1139
+ assert_equal 'footext', File.read('destdir/foo')
1140
+ assert_equal 'bartext', File.read('destdir/bar')
1141
+ end
1142
+
1143
+ def test_cp_fails_on_array_of_files_into_non_directory
1144
+ File.open('foo', 'w') { |f| f.write 'footext' }
1145
+
1146
+ exception = assert_raise(Errno::ENOTDIR) do
1147
+ FileUtils.cp(%w(foo), 'baz')
1148
+ end
1149
+ assert_equal "Not a directory - baz", exception.to_s
1150
+ end
1151
+
988
1152
  def test_cp_overwrites_dest_file
989
1153
  File.open('foo', 'w') {|f| f.write 'FOO' }
990
1154
  File.open('bar', 'w') {|f| f.write 'BAR' }
@@ -1042,6 +1206,26 @@ class FakeFSTest < Test::Unit::TestCase
1042
1206
  end
1043
1207
  end
1044
1208
 
1209
+ def test_cp_r_array_of_files
1210
+ FileUtils.mkdir_p 'subdir'
1211
+ File.open('foo', 'w') { |f| f.write 'footext' }
1212
+ File.open('bar', 'w') { |f| f.write 'bartext' }
1213
+ FileUtils.cp_r(%w(foo bar), 'subdir')
1214
+
1215
+ assert_equal 'footext', File.open('subdir/foo') { |f| f.read }
1216
+ assert_equal 'bartext', File.open('subdir/bar') { |f| f.read }
1217
+ end
1218
+
1219
+ def test_cp_r_array_of_directories
1220
+ %w(foo bar subdir).each { |d| FileUtils.mkdir_p d }
1221
+ File.open('foo/baz', 'w') { |f| f.write 'baztext' }
1222
+ File.open('bar/quux', 'w') { |f| f.write 'quuxtext' }
1223
+
1224
+ FileUtils.cp_r(%w(foo bar), 'subdir')
1225
+ assert_equal 'baztext', File.open('subdir/foo/baz') { |f| f.read }
1226
+ assert_equal 'quuxtext', File.open('subdir/bar/quux') { |f| f.read }
1227
+ end
1228
+
1045
1229
  def test_cp_r_only_copies_into_directories
1046
1230
  FileUtils.mkdir_p 'subdir'
1047
1231
  Dir.chdir('subdir') { File.open('foo', 'w') { |f| f.write 'footext' } }
@@ -1081,34 +1265,49 @@ class FakeFSTest < Test::Unit::TestCase
1081
1265
  end
1082
1266
 
1083
1267
  def test_clone_clones_directories
1084
- FakeFS.deactivate!
1085
- RealFileUtils.mkdir_p(here('subdir'))
1086
- FakeFS.activate!
1268
+ act_on_real_fs { RealFileUtils.mkdir_p(here('subdir')) }
1087
1269
 
1088
1270
  FileSystem.clone(here('subdir'))
1089
1271
 
1090
1272
  assert File.exists?(here('subdir')), 'subdir was cloned'
1091
1273
  assert File.directory?(here('subdir')), 'subdir is a directory'
1092
1274
  ensure
1093
- FakeFS.deactivate!
1094
- RealFileUtils.rm_rf(here('subdir'))
1095
- FakeFS.activate!
1275
+ act_on_real_fs { RealFileUtils.rm_rf(here('subdir')) }
1096
1276
  end
1097
1277
 
1098
1278
  def test_clone_clones_dot_files_even_hard_to_find_ones
1099
- FakeFS.deactivate!
1100
- RealFileUtils.mkdir_p(here('subdir/.bar/baz/.quux/foo'))
1101
- FakeFS.activate!
1279
+ act_on_real_fs { RealFileUtils.mkdir_p(here('subdir/.bar/baz/.quux/foo')) }
1102
1280
 
1103
1281
  assert !File.exists?(here('subdir'))
1104
1282
 
1105
1283
  FileSystem.clone(here('subdir'))
1106
- assert_equal ['.bar'], FileSystem.find(here('subdir')).keys
1107
- assert_equal ['foo'], FileSystem.find(here('subdir/.bar/baz/.quux')).keys
1284
+ assert_equal ['.', '..', '.bar'], Dir.entries(here('subdir'))
1285
+ assert_equal ['.', '..', 'foo'], Dir.entries(here('subdir/.bar/baz/.quux'))
1108
1286
  ensure
1109
- FakeFS.deactivate!
1110
- RealFileUtils.rm_rf(here('subdir'))
1111
- FakeFS.activate!
1287
+ act_on_real_fs { RealFileUtils.rm_rf(here('subdir')) }
1288
+ end
1289
+
1290
+ def test_dir_glob_on_clone_with_absolute_path
1291
+ act_on_real_fs { RealFileUtils.mkdir_p(here('subdir/.bar/baz/.quux/foo')) }
1292
+ FileUtils.mkdir_p '/path'
1293
+ Dir.chdir('/path')
1294
+ FileSystem.clone(here('subdir'), "/foo")
1295
+ assert Dir.glob "/foo/*"
1296
+ ensure
1297
+ act_on_real_fs { RealFileUtils.rm_rf(here('subdir')) }
1298
+ end
1299
+
1300
+ def test_clone_with_target_specified
1301
+ act_on_real_fs { RealFileUtils.mkdir_p(here('subdir/.bar/baz/.quux/foo')) }
1302
+
1303
+ assert !File.exists?(here('subdir'))
1304
+
1305
+ FileSystem.clone(here('subdir'), here('subdir2'))
1306
+ assert !File.exists?(here('subdir'))
1307
+ assert_equal ['.', '..', '.bar'], Dir.entries(here('subdir2'))
1308
+ assert_equal ['.', '..', 'foo'], Dir.entries(here('subdir2/.bar/baz/.quux'))
1309
+ ensure
1310
+ act_on_real_fs { RealFileUtils.rm_rf(here('subdir')) }
1112
1311
  end
1113
1312
 
1114
1313
  def test_putting_a_dot_at_end_copies_the_contents
@@ -1413,6 +1612,29 @@ class FakeFSTest < Test::Unit::TestCase
1413
1612
  assert File.exists?('/path')
1414
1613
  end
1415
1614
 
1615
+ def test_directory_mkdir_nested
1616
+ Dir.mkdir("/tmp")
1617
+ Dir.mkdir("/tmp/stream20120103-11847-xc8pb.lock")
1618
+ assert File.exists?("/tmp/stream20120103-11847-xc8pb.lock")
1619
+ end
1620
+
1621
+ def test_can_create_subdirectories_with_dir_mkdir
1622
+ Dir.mkdir 'foo'
1623
+ Dir.mkdir 'foo/bar'
1624
+ assert Dir.exists?('foo/bar')
1625
+ end
1626
+
1627
+ def test_can_create_absolute_subdirectories_with_dir_mkdir
1628
+ Dir.mkdir '/foo'
1629
+ Dir.mkdir '/foo/bar'
1630
+ assert Dir.exists?('/foo/bar')
1631
+ end
1632
+
1633
+ def test_can_create_directories_starting_with_dot
1634
+ Dir.mkdir './path'
1635
+ assert File.exists? './path'
1636
+ end
1637
+
1416
1638
  def test_directory_mkdir_relative
1417
1639
  FileUtils.mkdir_p('/new/root')
1418
1640
  FileSystem.chdir('/new/root')
@@ -1623,7 +1845,7 @@ class FakeFSTest < Test::Unit::TestCase
1623
1845
  File.link("/foo", "/bar")
1624
1846
 
1625
1847
  File.unlink("/bar")
1626
- File.read("/foo") == "some_content"
1848
+ assert_equal "some_content", File.read("/foo")
1627
1849
  end
1628
1850
 
1629
1851
  def test_link_reports_correct_stat_info_after_unlinking
@@ -1774,6 +1996,80 @@ class FakeFSTest < Test::Unit::TestCase
1774
1996
  assert_equal filename, "expect.txt"
1775
1997
  end
1776
1998
 
1999
+ #########################
2000
+ def test_file_default_mode
2001
+ FileUtils.touch "foo"
2002
+ assert_equal File.stat("foo").mode, (0100000 + 0666 - File.umask)
2003
+ end
2004
+
2005
+ def test_dir_default_mode
2006
+ Dir.mkdir "bar"
2007
+ assert_equal File.stat("bar").mode, (0100000 + 0777 - File.umask)
2008
+ end
2009
+
2010
+ def test_file_default_uid_and_gid
2011
+ FileUtils.touch "foo"
2012
+ assert_equal File.stat("foo").uid, Process.uid
2013
+ assert_equal File.stat("foo").gid, Process.gid
2014
+ end
2015
+
2016
+ def test_file_chmod_of_file
2017
+ FileUtils.touch "foo"
2018
+ File.chmod 0600, "foo"
2019
+ assert_equal File.stat("foo").mode, 0100600
2020
+ File.new("foo").chmod 0644
2021
+ assert_equal File.stat("foo").mode, 0100644
2022
+ end
2023
+
2024
+ def test_file_chmod_of_dir
2025
+ Dir.mkdir "bar"
2026
+ File.chmod 0777, "bar"
2027
+ assert_equal File.stat("bar").mode, 0100777
2028
+ File.new("bar").chmod 01700
2029
+ assert_equal File.stat("bar").mode, 0101700
2030
+ end
2031
+
2032
+ def test_file_chown_of_file
2033
+ FileUtils.touch "foo"
2034
+ File.chown 1337, 1338, "foo"
2035
+ assert_equal File.stat("foo").uid, 1337
2036
+ assert_equal File.stat("foo").gid, 1338
2037
+ end
2038
+
2039
+ def test_file_chown_of_dir
2040
+ Dir.mkdir "bar"
2041
+ File.chown 1337, 1338, "bar"
2042
+ assert_equal File.stat("bar").uid, 1337
2043
+ assert_equal File.stat("bar").gid, 1338
2044
+ end
2045
+
2046
+ def test_file_umask
2047
+ assert_equal File.umask, RealFile.umask
2048
+ end
2049
+
2050
+ def test_file_stat_comparable
2051
+ a_time = Time.new
2052
+
2053
+ same1 = File.new("s1", "w")
2054
+ same2 = File.new("s2", "w")
2055
+ different1 = File.new("d1", "w")
2056
+ different2 = File.new("d2", "w")
2057
+
2058
+ FileSystem.find("s1").mtime = a_time
2059
+ FileSystem.find("s2").mtime = a_time
2060
+
2061
+ FileSystem.find("d1").mtime = a_time
2062
+ FileSystem.find("d2").mtime = a_time + 1
2063
+
2064
+ assert same1.mtime == same2.mtime
2065
+ assert different1.mtime != different2.mtime
2066
+
2067
+ assert same1.stat == same2.stat
2068
+ assert (same1.stat <=> same2.stat) == 0
2069
+
2070
+ assert different1.stat != different2.stat
2071
+ assert (different1.stat <=> different2.stat) == -1
2072
+ end
1777
2073
 
1778
2074
  def here(fname)
1779
2075
  RealFile.expand_path(File.join(RealFile.dirname(__FILE__), fname))
@@ -1810,4 +2106,14 @@ class FakeFSTest < Test::Unit::TestCase
1810
2106
  end
1811
2107
  end
1812
2108
  end
2109
+
2110
+ if RUBY_VERSION >= "1.9.3"
2111
+ def test_advise
2112
+ File.open("foo", 'w') do |f|
2113
+ assert_nothing_raised do
2114
+ f.advise(:normal, 0, 0)
2115
+ end
2116
+ end
2117
+ end
2118
+ end
1813
2119
  end