diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:13:14 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-08-25 15:13:14 +0000 |
commit | d0233291bc8a5068e52c69c210e5979e5324b5bc (patch) | |
tree | 7d9459449c33792c63eeb7baa071e76352e0baab /trunk/test/testunit/collector/test_dir.rb | |
parent | 0dc342de848a642ecce8db697b8fecd83a63e117 (diff) | |
parent | 72eaacaa15256ab95c3b52ea386f88586fb9da40 (diff) |
re-adding tag v1_9_0_4 as an alias of trunk@18848v1_9_0_4
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_9_0_4@18849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'trunk/test/testunit/collector/test_dir.rb')
-rw-r--r-- | trunk/test/testunit/collector/test_dir.rb | 411 |
1 files changed, 0 insertions, 411 deletions
diff --git a/trunk/test/testunit/collector/test_dir.rb b/trunk/test/testunit/collector/test_dir.rb deleted file mode 100644 index eb61f9e6b5..0000000000 --- a/trunk/test/testunit/collector/test_dir.rb +++ /dev/null @@ -1,411 +0,0 @@ -require 'test/unit' -require 'test/unit/collector/dir' -require 'pp' - -module Test - module Unit - module Collector - class TestDir < TestCase - class FileSystem - class Directory - def initialize(name, fs, parent=self, &block) - @name = name - @fs = fs - @parent = parent - @contents = {'.' => self, '..' => parent} - instance_eval(&block) if(block) - end - - def file(name, contents) - @contents[name] = contents - end - - def dir(name, &block) - @contents[name] = self.class.new(name, @fs, self, &block) - end - - def entries - @contents.keys - end - - def directory?(name) - return true if(name.nil? || name.empty?) - return false unless(@contents.include?(name)) - @contents[name].kind_of?(self.class) - end - - def file?(name) - return false unless(@contents.include?(name)) - !directory?(name) - end - - def exist?(name) - @contents.include?(name) - end - - def [](name) - raise Errno::ENOENT, name unless(@contents.include?(name)) - @contents[name] - end - - def path_to(name=nil) - if(!name) - @parent.path_to(@name) - elsif(@parent == self) - @fs.join('/', name) - else - @fs.join(@parent.path_to(@name), name) - end - end - end - - class ObjectSpace - def initialize - @objects = [] - end - - def each_object(klass, &block) - @objects.find_all{|o| o.kind_of?(klass)}.each(&block) - end - - def <<(object) - @objects << object - end - end - - attr_reader :object_space - - def initialize(&block) - @root = Directory.new('/', self, &block) - @pwd = @root - @object_space = ObjectSpace.new - @required = [] - end - - def entries(dir) - e = find(dir) - require_directory(dir) - e.entries - end - - def directory?(name) - return true if (base = basename(name)) == '/' - e = find(dirname(name)) - return false unless(e) - e.directory?(base) - end - - def find(path) - if(/\A\// =~ path) - thing = @root - else - thing = @pwd - end - path.scan(/[^\/]+/) do |e| - break thing = false unless(thing.kind_of?(Directory)) - thing = thing[e] - end - thing - end - - def dirname(name) - if (name = name.tr_s('/', '/')) == '/' - name - else - name[%r"\A.+(?=/[^/]+/?\z)|\A/"] || "." - end - end - - def basename(name) - name[%r"(\A/|[^/]+)/*\z", 1] - end - - def split(name) - [dirname(name), basename(name)] - end - - def join(*parts) - parts.join('/').gsub(%r{/+}, '/') - end - - def file?(name) - e = find(dirname(name)) - return false unless(e) - e.file?(basename(name)) - end - - def pwd - @pwd.path_to - end - - def chdir(to) - e = find(to) - require_directory(to) - @pwd = e - end - - def expand_path(path, base = nil) - until /\A\// =~ path - base ||= pwd - path = join(base, path) - base = nil - end - path.gsub!(%r"(?:/\.)+(?=/)", '') - nil while path.sub!(%r"/(?!\.\./)[^/]+/\.\.(?=/)", '') - path.sub!(%r"\A(?:/\.\.)+(?=/)", '') - path.sub!(%r"(?:\A(/)|/)\.\.?\z", '\1') - path - end - - def require_directory(path) - raise Errno::ENOTDIR, path unless(directory?(path)) - end - - def require(file) - return false if(@required.include?(file)) - begin - e = find(file) - rescue Errno::ENOENT => ex - if(/\.rb\Z/ =~ file) - raise LoadError, file - end - e = find(file + '.rb') - end - @required << file - @object_space << e - true - rescue Errno::ENOENT - raise LoadError, file - end - end - - def test_dir - inner_dir = nil - dirs = FileSystem::Directory.new('/', nil) do - file 'a', nil - inner_dir = dir 'b' - end - assert_equal(inner_dir, dirs['b']) - end - - def test_fs - fs = FileSystem.new do - file 'a', nil - dir 'b' - end - assert_equal(['.', '..', 'a', 'b'].sort, fs.entries('/').sort) - assert(fs.directory?('/')) - assert(!fs.directory?('/a')) - assert(!fs.directory?('/bogus')) - assert(fs.file?('/a')) - assert(!fs.file?('/')) - assert(!fs.file?('/bogus')) - assert(fs.directory?('/b')) - assert(fs.file?('a')) - assert(fs.directory?('b')) - end - - def test_fs_sub - fs = FileSystem.new do - dir 'a' do - file 'b', nil - dir 'c' do - file 'd', nil - end - end - end - assert(fs.file?('/a/b')) - assert(!fs.file?('/a/b/c/d')) - assert(fs.file?('/a/c/d')) - end - - def test_fs_pwd - fs = FileSystem.new do - file 'a', nil - dir 'b' do - file 'c', nil - dir 'd' do - file 'e', nil - end - end - end - assert_equal('/', fs.pwd) - assert_raise(Errno::ENOENT) do - fs.chdir('bogus') - end - assert_raise(Errno::ENOTDIR) do - fs.chdir('a') - end - fs.chdir('b') - assert_equal('/b', fs.pwd) - fs.chdir('d') - assert_equal('/b/d', fs.pwd) - fs.chdir('..') - assert_equal('/b', fs.pwd) - fs.chdir('..') - assert_equal('/', fs.pwd) - end - - def test_fs_entries - fs = FileSystem.new do - file 'a', nil - dir 'b' do - file 'c', nil - file 'd', nil - end - file 'e', nil - dir 'f' do - file 'g', nil - dir 'h' do - file 'i', nil - end - end - end - assert_equal(['.', '..', 'a', 'b', 'e', 'f'], fs.entries('/').sort) - assert_equal(['.', '..', 'a', 'b', 'e', 'f'], fs.entries('.').sort) - assert_equal(['.', '..', 'a', 'b', 'e', 'f'], fs.entries('b/..').sort) - assert_equal(['.', '..', 'c', 'd'], fs.entries('b').sort) - assert_raise(Errno::ENOENT) do - fs.entries('z') - end - assert_raise(Errno::ENOTDIR) do - fs.entries('a') - end - fs.chdir('f') - assert_equal(['.', '..', 'i'], fs.entries('h').sort) - end - - class TestClass1 - end - class TestClass2 - end - def test_fs_require - fs = FileSystem.new do - file 'test_class1.rb', TestClass1 - dir 'dir' do - file 'test_class2.rb', TestClass2 - end - end - c = [] - fs.object_space.each_object(Class) do |o| - c << o - end - assert_equal([], c) - - assert_raise(LoadError) do - fs.require('bogus') - end - - assert(fs.require('test_class1.rb')) - assert(!fs.require('test_class1.rb')) - c = [] - fs.object_space.each_object(Class) do |o| - c << o - end - assert_equal([TestClass1], c) - - fs.require('dir/test_class2') - c = [] - fs.object_space.each_object(Class) do |o| - c << o - end - assert_equal([TestClass1, TestClass2], c) - - c = [] - fs.object_space.each_object(Time) do |o| - c << o - end - assert_equal([], c) - end - - def setup - @t1 = t1 = create_test(1) - @t2 = t2 = create_test(2) - @t3 = t3 = create_test(3) - @t4 = t4 = create_test(4) - @t5 = t5 = create_test(5) - @t6 = t6 = create_test(6) - fs = FileSystem.new do - file 'test_1.rb', t1 - file 'test_2.rb', t2 - dir 'd1' do - file 'test_3.rb', t3 - end - file 't4.rb', t4 - dir 'd2' do - file 'test_5', t5 - file 'test_6.rb', Time - end - file 't6.rb', t6 - end - fs.require('t6') - @c = Dir.new(fs, fs, fs.object_space, fs) - end - - def create_test(name) - t = Class.new(TestCase) - t.class_eval <<-EOC - def self.name - "T\#{#{name}}" - end - def test_#{name}a - end - def test_#{name}b - end - EOC - t - end - - def test_simple_collect - expected = TestSuite.new('d1') - expected << (@t3.suite) - assert_equal(expected, @c.collect('d1')) - end - - def test_multilevel_collect - expected = TestSuite.new('.') - expected << @t1.suite << @t2.suite - expected << (TestSuite.new('d1') << @t3.suite) - assert_equal(expected, @c.collect) - end - - def test_collect_file - expected = [@t1.suite] - subsuites = [] - @c.collect_file('test_1.rb', subsuites, @c.find_test_cases) - assert_equal(expected, subsuites) - - expected = [@t4.suite] - subsuites = [] - @c.collect_file('t4.rb', subsuites, @c.find_test_cases) - assert_equal(expected, subsuites) - assert_raise(LoadError) do - @c.collect_file('tloaderr.rb', [], []) - end - end - - def test_nil_pattern - expected = TestSuite.new('d2') - expected << @t5.suite - @c.pattern.clear - assert_equal(expected, @c.collect('d2')) - end - - def test_filtering - expected = TestSuite.new('.') - expected << @t1.suite - @c.filter = proc{|t| t.method_name == "test_1a" || t.method_name == "test_1b"} - assert_equal(expected, @c.collect) - end - - def test_collect_multi - expected = TestSuite.new('[d1, d2]') - expected << (TestSuite.new('d1') << @t3.suite) - expected << (TestSuite.new('d2') << @t5.suite) - @c.pattern.replace([/\btest_/]) - assert_equal(expected, @c.collect('d1', 'd2')) - end - end - end - end -end |