diff options
Diffstat (limited to 'spec/ruby/library/find')
-rw-r--r-- | spec/ruby/library/find/find_spec.rb | 30 | ||||
-rw-r--r-- | spec/ruby/library/find/fixtures/common.rb | 174 | ||||
-rw-r--r-- | spec/ruby/library/find/prune_spec.rb | 12 |
3 files changed, 216 insertions, 0 deletions
diff --git a/spec/ruby/library/find/find_spec.rb b/spec/ruby/library/find/find_spec.rb new file mode 100644 index 0000000000..14c9e2926e --- /dev/null +++ b/spec/ruby/library/find/find_spec.rb @@ -0,0 +1,30 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require File.expand_path('../fixtures/common', __FILE__) +require 'find' + +describe "Find.find" do + before :each do + FindDirSpecs.create_mock_dirs + end + + after :each do + FindDirSpecs.delete_mock_dirs + end + + describe "when called without a block" do + it "returns an Enumerator" do + Find.find(FindDirSpecs.mock_dir).should be_an_instance_of(Enumerator) + Find.find(FindDirSpecs.mock_dir).to_a.sort.should == FindDirSpecs.expected_paths + end + end + + it "should recursively yield every file in the directory" do + a = [] + + Find.find(FindDirSpecs.mock_dir) do |file| + a << file + end + + a.sort.should == FindDirSpecs.expected_paths + end +end diff --git a/spec/ruby/library/find/fixtures/common.rb b/spec/ruby/library/find/fixtures/common.rb new file mode 100644 index 0000000000..14a7edb09a --- /dev/null +++ b/spec/ruby/library/find/fixtures/common.rb @@ -0,0 +1,174 @@ +module FindDirSpecs + def self.mock_dir(dirs = ['find_specs_mock']) + @mock_dir ||= tmp("") + File.join @mock_dir, dirs + end + + # The names of the fixture directories and files used by + # various Find 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/| + ] + end + end + + @mock_dir_files + end + + def self.create_mock_dirs + umask = File.umask 0 + mock_dir_files.each do |name| + file = File.join mock_dir, name + mkdir_p File.dirname(file) + touch file + end + File.umask umask + end + + def self.delete_mock_dirs + rm_r mock_dir + end + + def self.expected_paths + unless @expected_paths + @expected_paths = %w[ + .dotfile + + .dotsubdir + .dotsubdir/.dotfile + .dotsubdir/nondotfile + + deeply + deeply/.dotfile + + deeply/nested + deeply/nested/.dotfile.ext + + deeply/nested/directory + + deeply/nested/directory/structure + 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 + dir/filename_ordering + + nondotfile + + subdir_one + subdir_one/.dotfile + subdir_one/nondotfile + + subdir_two + subdir_two/nondotfile + subdir_two/nondotfile.ext + + brace + 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/} + + special/test{1} + special/test{1}/file[1] + ] + + platform_is_not :windows do + @expected_paths += %w[ + special/* + special/? + + special/| + ] + end + + @expected_paths.map! do |file| + File.join(mock_dir, file) + end + + @expected_paths << mock_dir + @expected_paths.sort! + end + + @expected_paths + end +end diff --git a/spec/ruby/library/find/prune_spec.rb b/spec/ruby/library/find/prune_spec.rb new file mode 100644 index 0000000000..1aef7d3d23 --- /dev/null +++ b/spec/ruby/library/find/prune_spec.rb @@ -0,0 +1,12 @@ +require File.expand_path('../../../spec_helper', __FILE__) +require 'find' + +describe "Find.prune" do + it "should throw :prune" do + msg = catch(:prune) do + Find.prune + end + + msg.should == nil + end +end |