Added tests for Dir instance methods
This commit is contained in:
parent
e8257feadd
commit
af330bc5ab
@ -1,9 +1,57 @@
|
||||
module FakeFS
|
||||
class Dir
|
||||
def self.glob(pattern)
|
||||
[FileSystem.find(pattern) || []].flatten.map{|e| e.to_s}.sort
|
||||
include Enumerable
|
||||
|
||||
def initialize(string)
|
||||
raise Errno::ENOENT, string unless FileSystem.find(string)
|
||||
@path = string
|
||||
@open = true
|
||||
@pointer = 0
|
||||
@contents = [ '.', '..', ] + FileSystem.find(@path).values
|
||||
end
|
||||
|
||||
def close
|
||||
@open = false
|
||||
@pointer = nil
|
||||
@contents = nil
|
||||
nil
|
||||
end
|
||||
|
||||
def each(&block)
|
||||
while f = read
|
||||
yield f
|
||||
end
|
||||
end
|
||||
|
||||
def path
|
||||
@path
|
||||
end
|
||||
|
||||
def pos
|
||||
@pointer
|
||||
end
|
||||
|
||||
def pos=(integer)
|
||||
@pointer = integer
|
||||
end
|
||||
|
||||
def read
|
||||
raise IOError, "closed directory" if @pointer == nil
|
||||
n = @contents[@pointer]
|
||||
@pointer += 1
|
||||
n.to_s if n
|
||||
end
|
||||
|
||||
def rewind
|
||||
@pointer = 0
|
||||
end
|
||||
|
||||
def seek(integer)
|
||||
raise IOError, "closed directory" if @pointer == nil
|
||||
@pointer = integer
|
||||
@contents[integer]
|
||||
end
|
||||
|
||||
def self.[](pattern)
|
||||
glob(pattern)
|
||||
end
|
||||
@ -12,12 +60,52 @@ module FakeFS
|
||||
FileSystem.chdir(dir, &blk)
|
||||
end
|
||||
|
||||
def self.chroot(string)
|
||||
# Not implemented yet
|
||||
end
|
||||
|
||||
def self.delete(string)
|
||||
FileSystem.delete(string)
|
||||
end
|
||||
|
||||
def self.entries(dirname)
|
||||
raise SystemCallError, dirname unless FileSystem.find(dirname)
|
||||
Dir.new(dirname).map { |file| file }
|
||||
end
|
||||
|
||||
def self.foreach(dirname, &block)
|
||||
Dir.open(dirname) { |file| yield file }
|
||||
end
|
||||
|
||||
def self.glob(pattern)
|
||||
[FileSystem.find(pattern) || []].flatten.map{|e| e.to_s}.sort
|
||||
end
|
||||
|
||||
def self.mkdir(string, integer = 0)
|
||||
FileUtils.mkdir_p(string)
|
||||
end
|
||||
|
||||
def self.open(string, &block)
|
||||
if block_given?
|
||||
d = Dir.new(string).each { |file| yield(file) }
|
||||
d.close
|
||||
else
|
||||
Dir.new(string)
|
||||
end
|
||||
end
|
||||
|
||||
def tmpdir
|
||||
'/tmp'
|
||||
end
|
||||
|
||||
def self.pwd
|
||||
FileSystem.current_dir.to_s
|
||||
end
|
||||
|
||||
class << self
|
||||
alias_method :getwd, :pwd
|
||||
alias_method :rmdir, :delete
|
||||
alias_method :unline, :delete
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -532,6 +532,169 @@ class FakeFSTest < Test::Unit::TestCase
|
||||
}
|
||||
end
|
||||
|
||||
# Directory tests
|
||||
def test_new_directory
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
|
||||
assert_nothing_raised {
|
||||
Dir.new('/this/path/should/be/here')
|
||||
}
|
||||
end
|
||||
|
||||
def test_new_directory_does_not_work_if_dir_path_cannot_be_found
|
||||
assert_raises(Errno::ENOENT) {
|
||||
Dir.new('/this/path/should/not/be/here')
|
||||
}
|
||||
end
|
||||
|
||||
def test_close
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
assert dir.close.nil?
|
||||
|
||||
assert_raises(IOError) {
|
||||
dir.each { |dir| dir }
|
||||
}
|
||||
end
|
||||
|
||||
def test_each
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
yielded = []
|
||||
dir.each do |dir|
|
||||
yielded << dir
|
||||
end
|
||||
|
||||
assert yielded.size == test.size
|
||||
test.each { |t| assert yielded.include?(t) }
|
||||
end
|
||||
|
||||
def test_path
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
assert Dir.new('/this/path/should/be/here').path == '/this/path/should/be/here'
|
||||
end
|
||||
|
||||
def test_pos
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
assert dir.pos == 0
|
||||
dir.read
|
||||
assert dir.pos == 1
|
||||
dir.read
|
||||
assert dir.pos == 2
|
||||
dir.read
|
||||
assert dir.pos == 3
|
||||
dir.read
|
||||
assert dir.pos == 4
|
||||
dir.read
|
||||
assert dir.pos == 5
|
||||
end
|
||||
|
||||
def test_pos_assign
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
assert dir.pos == 0
|
||||
dir.pos = 2
|
||||
assert dir.pos == 2
|
||||
end
|
||||
|
||||
def test_read
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
assert dir.pos == 0
|
||||
d = dir.read
|
||||
assert dir.pos == 1
|
||||
assert d == '.'
|
||||
|
||||
d = dir.read
|
||||
assert dir.pos == 2
|
||||
assert d == '..'
|
||||
end
|
||||
|
||||
def test_read_past_length
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_not_nil d
|
||||
d = dir.read
|
||||
assert_nil d
|
||||
end
|
||||
|
||||
def test_rewind
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
d = dir.read
|
||||
d = dir.read
|
||||
assert dir.pos == 2
|
||||
dir.rewind
|
||||
assert dir.pos == 0
|
||||
end
|
||||
|
||||
def test_seek
|
||||
test = ['.', '..', '/this/path/should/be/here/file_1', '/this/path/should/be/here/file_2', '/this/path/should/be/here/file_3', '/this/path/should/be/here/file_4', '/this/path/should/be/here/file_5' ]
|
||||
FileUtils.mkdir_p('/this/path/should/be/here')
|
||||
test.each do |f|
|
||||
FileUtils.touch(f)
|
||||
end
|
||||
|
||||
dir = Dir.new('/this/path/should/be/here')
|
||||
|
||||
d = dir.seek 1
|
||||
puts d
|
||||
assert d == '..'
|
||||
assert dir.pos == 1
|
||||
end
|
||||
|
||||
def here(fname)
|
||||
RealFile.expand_path(RealFile.dirname(__FILE__)+'/'+fname)
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user