| Class | Test::Unit::Collector::Dir |
| In: |
lib/test/unit/collector/dir.rb
|
| Parent: | Object |
| base | [RW] | |
| exclude | [R] | |
| pattern | [R] |
# File lib/test/unit/collector/dir.rb, line 13
13: def initialize(dir=::Dir, file=::File, object_space=::ObjectSpace, req=nil)
14: super()
15: @dir = dir
16: @file = file
17: @object_space = object_space
18: @req = req
19: @pattern = [/\btest_.*\.rb\Z/m]
20: @exclude = []
21: end
# File lib/test/unit/collector/dir.rb, line 23
23: def collect(*from)
24: basedir = @base
25: $:.push(basedir) if basedir
26: if(from.empty?)
27: recursive_collect('.', find_test_cases)
28: elsif(from.size == 1)
29: recursive_collect(from.first, find_test_cases)
30: else
31: suites = []
32: from.each do |f|
33: suite = recursive_collect(f, find_test_cases)
34: suites << suite unless(suite.tests.empty?)
35: end
36: suite = TestSuite.new("[#{from.join(', ')}]")
37: sort(suites).each{|s| suite << s}
38: suite
39: end
40: ensure
41: $:.delete_at($:.rindex(basedir)) if basedir
42: end
# File lib/test/unit/collector/dir.rb, line 84
84: def collect_file(name, suites, already_gathered)
85: dir = @file.dirname(@file.expand_path(name, @base))
86: $:.unshift(dir)
87: if(@req)
88: @req.require(name)
89: else
90: require(name)
91: end
92: find_test_cases(already_gathered).each{|t| add_suite(suites, t.suite)}
93: ensure
94: $:.delete_at($:.rindex(dir)) if(dir)
95: end
# File lib/test/unit/collector/dir.rb, line 44
44: def find_test_cases(ignore=[])
45: cases = []
46: @object_space.each_object(Class) do |c|
47: cases << c if(c < TestCase && !ignore.include?(c))
48: end
49: ignore.concat(cases)
50: cases
51: end
# File lib/test/unit/collector/dir.rb, line 97
97: def realdir(path)
98: if @base
99: @file.join(@base, path)
100: else
101: path
102: end
103: end
# File lib/test/unit/collector/dir.rb, line 53
53: def recursive_collect(name, already_gathered)
54: sub_suites = []
55: path = realdir(name)
56: if @file.directory?(path)
57: dir_name = name unless name == '.'
58: @dir.entries(path).each do |e|
59: next if(e == '.' || e == '..')
60: e_name = dir_name ? @file.join(dir_name, e) : e
61: if @file.directory?(realdir(e_name))
62: next if /\ACVS\z/ =~ e
63: sub_suite = recursive_collect(e_name, already_gathered)
64: sub_suites << sub_suite unless(sub_suite.empty?)
65: else
66: next if /~\z/ =~ e_name or /\A\.\#/ =~ e
67: if @pattern and !@pattern.empty?
68: next unless @pattern.any? {|pat| pat =~ e_name}
69: end
70: if @exclude and !@exclude.empty?
71: next if @exclude.any? {|pat| pat =~ e_name}
72: end
73: collect_file(e_name, sub_suites, already_gathered)
74: end
75: end
76: else
77: collect_file(name, sub_suites, already_gathered)
78: end
79: suite = TestSuite.new(@file.basename(name))
80: sort(sub_suites).each{|s| suite << s}
81: suite
82: end