rubysl-test-unit 1.0.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +0,0 @@
1
- #--
2
- #
3
- # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
- # License:: Ruby license.
6
-
7
- module Test
8
- module Unit
9
-
10
- # Thrown by Test::Unit::Assertions when an assertion fails.
11
- class AssertionFailedError < StandardError
12
- end
13
- end
14
- end
@@ -1,220 +0,0 @@
1
- require 'test/unit'
2
- require 'test/unit/ui/testrunnerutilities'
3
- require 'optparse'
4
-
5
- module Test
6
- module Unit
7
- class AutoRunner
8
- def self.run(force_standalone=false, default_dir=nil, argv=ARGV, &block)
9
- r = new(force_standalone || standalone?, &block)
10
- r.base = default_dir
11
- r.process_args(argv)
12
- r.run
13
- end
14
-
15
- def self.standalone?
16
- return false unless("-e" == $0)
17
- ObjectSpace.each_object(Class) do |klass|
18
- return false if(klass < TestCase)
19
- end
20
- true
21
- end
22
-
23
- RUNNERS = {
24
- :console => proc do |r|
25
- require 'test/unit/ui/console/testrunner'
26
- Test::Unit::UI::Console::TestRunner
27
- end,
28
- :gtk => proc do |r|
29
- require 'test/unit/ui/gtk/testrunner'
30
- Test::Unit::UI::GTK::TestRunner
31
- end,
32
- :gtk2 => proc do |r|
33
- require 'test/unit/ui/gtk2/testrunner'
34
- Test::Unit::UI::GTK2::TestRunner
35
- end,
36
- :fox => proc do |r|
37
- require 'test/unit/ui/fox/testrunner'
38
- Test::Unit::UI::Fox::TestRunner
39
- end,
40
- :tk => proc do |r|
41
- require 'test/unit/ui/tk/testrunner'
42
- Test::Unit::UI::Tk::TestRunner
43
- end,
44
- }
45
-
46
- OUTPUT_LEVELS = [
47
- [:silent, UI::SILENT],
48
- [:progress, UI::PROGRESS_ONLY],
49
- [:normal, UI::NORMAL],
50
- [:verbose, UI::VERBOSE],
51
- ]
52
-
53
- COLLECTORS = {
54
- :objectspace => proc do |r|
55
- require 'test/unit/collector/objectspace'
56
- c = Collector::ObjectSpace.new
57
- c.filter = r.filters
58
- c.collect($0.sub(/\.rb\Z/, ''))
59
- end,
60
- :dir => proc do |r|
61
- require 'test/unit/collector/dir'
62
- c = Collector::Dir.new
63
- c.filter = r.filters
64
- c.pattern.concat(r.pattern) if(r.pattern)
65
- c.exclude.concat(r.exclude) if(r.exclude)
66
- c.base = r.base
67
- $:.push(r.base) if r.base
68
- c.collect(*(r.to_run.empty? ? ['.'] : r.to_run))
69
- end,
70
- }
71
-
72
- attr_reader :suite
73
- attr_accessor :output_level, :filters, :to_run, :pattern, :exclude, :base, :workdir
74
- attr_writer :runner, :collector
75
-
76
- def initialize(standalone)
77
- Unit.run = true
78
- @standalone = standalone
79
- @runner = RUNNERS[:console]
80
- @collector = COLLECTORS[(standalone ? :dir : :objectspace)]
81
- @filters = []
82
- @to_run = []
83
- @output_level = UI::NORMAL
84
- @workdir = nil
85
- yield(self) if(block_given?)
86
- end
87
-
88
- def process_args(args = ARGV)
89
- begin
90
- options.order!(args) {|arg| @to_run << arg}
91
- rescue OptionParser::ParseError => e
92
- puts e
93
- puts options
94
- $! = nil
95
- abort
96
- else
97
- @filters << proc{false} unless(@filters.empty?)
98
- end
99
- not @to_run.empty?
100
- end
101
-
102
- def options
103
- @options ||= OptionParser.new do |o|
104
- o.banner = "Test::Unit automatic runner."
105
- o.banner << "\nUsage: #{$0} [options] [-- untouched arguments]"
106
-
107
- o.on
108
- o.on('-r', '--runner=RUNNER', RUNNERS,
109
- "Use the given RUNNER.",
110
- "(" + keyword_display(RUNNERS) + ")") do |r|
111
- @runner = r
112
- end
113
-
114
- if(@standalone)
115
- o.on('-b', '--basedir=DIR', "Base directory of test suites.") do |b|
116
- @base = b
117
- end
118
-
119
- o.on('-w', '--workdir=DIR', "Working directory to run tests.") do |w|
120
- @workdir = w
121
- end
122
-
123
- o.on('-a', '--add=TORUN', Array,
124
- "Add TORUN to the list of things to run;",
125
- "can be a file or a directory.") do |a|
126
- @to_run.concat(a)
127
- end
128
-
129
- @pattern = []
130
- o.on('-p', '--pattern=PATTERN', Regexp,
131
- "Match files to collect against PATTERN.") do |e|
132
- @pattern << e
133
- end
134
-
135
- @exclude = []
136
- o.on('-x', '--exclude=PATTERN', Regexp,
137
- "Ignore files to collect against PATTERN.") do |e|
138
- @exclude << e
139
- end
140
- end
141
-
142
- o.on('-n', '--name=NAME', String,
143
- "Runs tests matching NAME.",
144
- "(patterns may be used).") do |n|
145
- n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
146
- case n
147
- when Regexp
148
- @filters << proc{|t| n =~ t.method_name ? true : nil}
149
- else
150
- @filters << proc{|t| n == t.method_name ? true : nil}
151
- end
152
- end
153
-
154
- o.on('-t', '--testcase=TESTCASE', String,
155
- "Runs tests in TestCases matching TESTCASE.",
156
- "(patterns may be used).") do |n|
157
- n = (%r{\A/(.*)/\Z} =~ n ? Regexp.new($1) : n)
158
- case n
159
- when Regexp
160
- @filters << proc{|t| n =~ t.class.name ? true : nil}
161
- else
162
- @filters << proc{|t| n == t.class.name ? true : nil}
163
- end
164
- end
165
-
166
- o.on('-I', "--load-path=DIR[#{File::PATH_SEPARATOR}DIR...]",
167
- "Appends directory list to $LOAD_PATH.") do |dirs|
168
- $LOAD_PATH.concat(dirs.split(File::PATH_SEPARATOR))
169
- end
170
-
171
- o.on('-v', '--verbose=[LEVEL]', OUTPUT_LEVELS,
172
- "Set the output level (default is verbose).",
173
- "(" + keyword_display(OUTPUT_LEVELS) + ")") do |l|
174
- @output_level = l || UI::VERBOSE
175
- end
176
-
177
- o.on('--',
178
- "Stop processing options so that the",
179
- "remaining options will be passed to the",
180
- "test."){o.terminate}
181
-
182
- o.on('-h', '--help', 'Display this help.'){puts o; exit}
183
-
184
- o.on_tail
185
- o.on_tail('Deprecated options:')
186
-
187
- o.on_tail('--console', 'Console runner (use --runner).') do
188
- warn("Deprecated option (--console).")
189
- @runner = RUNNERS[:console]
190
- end
191
-
192
- o.on_tail('--gtk', 'GTK runner (use --runner).') do
193
- warn("Deprecated option (--gtk).")
194
- @runner = RUNNERS[:gtk]
195
- end
196
-
197
- o.on_tail('--fox', 'Fox runner (use --runner).') do
198
- warn("Deprecated option (--fox).")
199
- @runner = RUNNERS[:fox]
200
- end
201
-
202
- o.on_tail
203
- end
204
- end
205
-
206
- def keyword_display(array)
207
- list = array.collect {|e, *| e.to_s}
208
- Array === array or list.sort!
209
- list.collect {|e| e.sub(/^(.)([A-Za-z]+)(?=\w*$)/, '\\1[\\2]')}.join(", ")
210
- end
211
-
212
- def run
213
- @suite = @collector[self]
214
- result = @runner[self] or return false
215
- Dir.chdir(@workdir) if @workdir
216
- result.run(@suite, @output_level).passed?
217
- end
218
- end
219
- end
220
- end
@@ -1,43 +0,0 @@
1
- module Test
2
- module Unit
3
- module Collector
4
- def initialize
5
- @filters = []
6
- end
7
-
8
- def filter=(filters)
9
- @filters = case(filters)
10
- when Proc
11
- [filters]
12
- when Array
13
- filters
14
- end
15
- end
16
-
17
- def add_suite(destination, suite)
18
- to_delete = suite.tests.find_all{|t| !include?(t)}
19
- to_delete.each{|t| suite.delete(t)}
20
- destination << suite unless(suite.size == 0)
21
- end
22
-
23
- def include?(test)
24
- return true if(@filters.empty?)
25
- @filters.each do |filter|
26
- result = filter[test]
27
- if(result.nil?)
28
- next
29
- elsif(!result)
30
- return false
31
- else
32
- return true
33
- end
34
- end
35
- true
36
- end
37
-
38
- def sort(suites)
39
- suites.sort_by{|s| s.name}
40
- end
41
- end
42
- end
43
- end
@@ -1,107 +0,0 @@
1
- require 'test/unit/testsuite'
2
- require 'test/unit/collector'
3
-
4
- module Test
5
- module Unit
6
- module Collector
7
- class Dir
8
- include Collector
9
-
10
- attr_reader :pattern, :exclude
11
- attr_accessor :base
12
-
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
22
-
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
43
-
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
52
-
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
83
-
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
96
-
97
- def realdir(path)
98
- if @base
99
- @file.join(@base, path)
100
- else
101
- path
102
- end
103
- end
104
- end
105
- end
106
- end
107
- end
@@ -1,34 +0,0 @@
1
- # Author:: Nathaniel Talbott.
2
- # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
3
- # License:: Ruby license.
4
-
5
- require 'test/unit/collector'
6
-
7
- module Test
8
- module Unit
9
- module Collector
10
- class ObjectSpace
11
- include Collector
12
-
13
- NAME = 'collected from the ObjectSpace'
14
-
15
- def initialize(source=::ObjectSpace)
16
- super()
17
- @source = source
18
- end
19
-
20
- def collect(name=NAME)
21
- suite = TestSuite.new(name)
22
- sub_suites = []
23
- @source.each_object(Class) do |klass|
24
- if(Test::Unit::TestCase > klass)
25
- add_suite(sub_suites, klass.suite)
26
- end
27
- end
28
- sort(sub_suites).each{|s| suite << s}
29
- suite
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,56 +0,0 @@
1
- #--
2
- #
3
- # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
- # License:: Ruby license.
6
-
7
- require 'test/unit/util/backtracefilter'
8
-
9
- module Test
10
- module Unit
11
-
12
- # Encapsulates an error in a test. Created by
13
- # Test::Unit::TestCase when it rescues an exception thrown
14
- # during the processing of a test.
15
- class Error
16
- include Util::BacktraceFilter
17
-
18
- attr_reader(:test_name, :exception)
19
-
20
- SINGLE_CHARACTER = 'E'
21
-
22
- # Creates a new Error with the given test_name and
23
- # exception.
24
- def initialize(test_name, exception)
25
- @test_name = test_name
26
- @exception = exception
27
- end
28
-
29
- # Returns a single character representation of an error.
30
- def single_character_display
31
- SINGLE_CHARACTER
32
- end
33
-
34
- # Returns the message associated with the error.
35
- def message
36
- "#{@exception.class.name}: #{@exception.message}"
37
- end
38
-
39
- # Returns a brief version of the error description.
40
- def short_display
41
- "#@test_name: #{message.split("\n")[0]}"
42
- end
43
-
44
- # Returns a verbose version of the error description.
45
- def long_display
46
- backtrace = filter_backtrace(@exception.backtrace).join("\n ")
47
- "Error:\n#@test_name:\n#{message}\n #{backtrace}"
48
- end
49
-
50
- # Overridden to return long_display.
51
- def to_s
52
- long_display
53
- end
54
- end
55
- end
56
- end