1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169
|
# encoding: utf-8
module DirSpecs
def self.mock_dir(dirs = ['dir_specs_mock'])
@mock_dir ||= tmp("")
File.join @mock_dir, dirs
end
def self.nonexistent
name = File.join mock_dir, "nonexistent00"
name = name.next while File.exist? name
name
end
# TODO: make these relative to the mock_dir
def self.clear_dirs
[ 'nonexisting',
'default_perms',
'reduced',
'always_returns_0',
'???',
[0xe9].pack('U')
].each do |dir|
begin
Dir.rmdir dir
rescue
end
end
end
# The names of the fixture directories and files used by
# various Dir specs.
def self.mock_dir_files
unless @mock_dir_files
@mock_dir_files = %w[
.dotfile
.dotsubdir/.dotfile
.dotsubdir/nondotfile
deeply/.dotfile
deeply/nested/.dotfile.ext
deeply/nested/directory/structure/.ext
deeply/nested/directory/structure/bar
deeply/nested/directory/structure/baz
deeply/nested/directory/structure/file_one
deeply/nested/directory/structure/file_one.ext
deeply/nested/directory/structure/foo
deeply/nondotfile
file_one.ext
file_two.ext
dir_filename_ordering
dir/filename_ordering
nondotfile
subdir_one/.dotfile
subdir_one/nondotfile
subdir_two/nondotfile
subdir_two/nondotfile.ext
brace/a
brace/a.js
brace/a.erb
brace/a.js.rjs
brace/a.html.erb
special/+
special/^
special/$
special/(
special/)
special/[
special/]
special/{
special/}
special/test{1}/file[1]
]
platform_is_not :windows do
@mock_dir_files += %w[
special/*
special/?
special/|
special/こんにちは.txt
]
end
end
@mock_dir_files
end
def self.create_mock_dirs
mock_dir_files.each do |name|
file = File.join mock_dir, name
mkdir_p File.dirname(file)
touch file
end
end
def self.delete_mock_dirs
begin
rm_r mock_dir
rescue Errno::ENOTEMPTY => e
puts Dir["#{mock_dir}/**/*"]
raise e
end
end
def self.mock_rmdir(*dirs)
mock_dir ['rmdir_dirs'].concat(dirs)
end
def self.rmdir_dirs(create = true)
dirs = %w[
empty
nonempty
nonempty/child
noperm
noperm/child
]
base_dir = mock_dir ['rmdir_dirs']
dirs.reverse_each do |d|
dir = File.join base_dir, d
if File.exist? dir
File.chmod 0777, dir
rm_r dir
end
end
rm_r base_dir
if create
dirs.each do |d|
dir = File.join base_dir, d
unless File.exist? dir
mkdir_p dir
File.chmod 0777, dir
end
end
end
end
def self.expected_paths
%w[
.
..
.dotfile
.dotsubdir
brace
deeply
dir
dir_filename_ordering
file_one.ext
file_two.ext
nondotfile
special
subdir_one
subdir_two
]
end
end
|