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 mock_dir(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
|