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,51 +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
- # Encapsulates a test failure. Created by Test::Unit::TestCase
11
- # when an assertion fails.
12
- class Failure
13
- attr_reader :test_name, :location, :message
14
-
15
- SINGLE_CHARACTER = 'F'
16
-
17
- # Creates a new Failure with the given location and
18
- # message.
19
- def initialize(test_name, location, message)
20
- @test_name = test_name
21
- @location = location
22
- @message = message
23
- end
24
-
25
- # Returns a single character representation of a failure.
26
- def single_character_display
27
- SINGLE_CHARACTER
28
- end
29
-
30
- # Returns a brief version of the error description.
31
- def short_display
32
- "#@test_name: #{@message.split("\n")[0]}"
33
- end
34
-
35
- # Returns a verbose version of the error description.
36
- def long_display
37
- location_display = if(location.size == 1)
38
- location[0].sub(/\A(.+:\d+).*/, ' [\\1]')
39
- else
40
- "\n [#{location.join("\n ")}]"
41
- end
42
- "Failure:\n#@test_name#{location_display}:\n#@message"
43
- end
44
-
45
- # Overridden to return long_display.
46
- def to_s
47
- long_display
48
- end
49
- end
50
- end
51
- end
@@ -1,80 +0,0 @@
1
- #--
2
- # Author:: Nathaniel Talbott.
3
- # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
4
- # License:: Ruby license.
5
-
6
- require 'test/unit/util/observable'
7
-
8
- module Test
9
- module Unit
10
-
11
- # Collects Test::Unit::Failure and Test::Unit::Error so that
12
- # they can be displayed to the user. To this end, observers
13
- # can be added to it, allowing the dynamic updating of, say, a
14
- # UI.
15
- class TestResult
16
- include Util::Observable
17
-
18
- CHANGED = "CHANGED"
19
- FAULT = "FAULT"
20
-
21
- attr_reader(:run_count, :assertion_count)
22
-
23
- # Constructs a new, empty TestResult.
24
- def initialize
25
- @run_count, @assertion_count = 0, 0
26
- @failures, @errors = Array.new, Array.new
27
- end
28
-
29
- # Records a test run.
30
- def add_run
31
- @run_count += 1
32
- notify_listeners(CHANGED, self)
33
- end
34
-
35
- # Records a Test::Unit::Failure.
36
- def add_failure(failure)
37
- @failures << failure
38
- notify_listeners(FAULT, failure)
39
- notify_listeners(CHANGED, self)
40
- end
41
-
42
- # Records a Test::Unit::Error.
43
- def add_error(error)
44
- @errors << error
45
- notify_listeners(FAULT, error)
46
- notify_listeners(CHANGED, self)
47
- end
48
-
49
- # Records an individual assertion.
50
- def add_assertion
51
- @assertion_count += 1
52
- notify_listeners(CHANGED, self)
53
- end
54
-
55
- # Returns a string contain the recorded runs, assertions,
56
- # failures and errors in this TestResult.
57
- def to_s
58
- "#{run_count} tests, #{assertion_count} assertions, #{failure_count} failures, #{error_count} errors"
59
- end
60
-
61
- # Returns whether or not this TestResult represents
62
- # successful completion.
63
- def passed?
64
- return @failures.empty? && @errors.empty?
65
- end
66
-
67
- # Returns the number of failures this TestResult has
68
- # recorded.
69
- def failure_count
70
- return @failures.size
71
- end
72
-
73
- # Returns the number of errors this TestResult has
74
- # recorded.
75
- def error_count
76
- return @errors.size
77
- end
78
- end
79
- end
80
- end
@@ -1,76 +0,0 @@
1
- #--
2
- #
3
- # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
5
- # License:: Ruby license.
6
-
7
- module Test
8
- module Unit
9
-
10
- # A collection of tests which can be #run.
11
- #
12
- # Note: It is easy to confuse a TestSuite instance with
13
- # something that has a static suite method; I know because _I_
14
- # have trouble keeping them straight. Think of something that
15
- # has a suite method as simply providing a way to get a
16
- # meaningful TestSuite instance.
17
- class TestSuite
18
- attr_reader :name, :tests
19
-
20
- STARTED = name + "::STARTED"
21
- FINISHED = name + "::FINISHED"
22
-
23
- # Creates a new TestSuite with the given name.
24
- def initialize(name="Unnamed TestSuite")
25
- @name = name
26
- @tests = []
27
- end
28
-
29
- # Runs the tests and/or suites contained in this
30
- # TestSuite.
31
- def run(result, &progress_block)
32
- yield(STARTED, name)
33
- @tests.each do |test|
34
- test.run(result, &progress_block)
35
- end
36
- yield(FINISHED, name)
37
- end
38
-
39
- # Adds the test to the suite.
40
- def <<(test)
41
- @tests << test
42
- self
43
- end
44
-
45
- def delete(test)
46
- @tests.delete(test)
47
- end
48
-
49
- # Retuns the rolled up number of tests in this suite;
50
- # i.e. if the suite contains other suites, it counts the
51
- # tests within those suites, not the suites themselves.
52
- def size
53
- total_size = 0
54
- @tests.each { |test| total_size += test.size }
55
- total_size
56
- end
57
-
58
- def empty?
59
- tests.empty?
60
- end
61
-
62
- # Overridden to return the name given the suite at
63
- # creation.
64
- def to_s
65
- @name
66
- end
67
-
68
- # It's handy to be able to compare TestSuite instances.
69
- def ==(other)
70
- return false unless(other.kind_of?(self.class))
71
- return false unless(@name == other.name)
72
- @tests == other.tests
73
- end
74
- end
75
- end
76
- end
@@ -1,127 +0,0 @@
1
- #--
2
- #
3
- # Author:: Nathaniel Talbott.
4
- # Copyright:: Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
5
- # License:: Ruby license.
6
-
7
- require 'test/unit/ui/testrunnermediator'
8
- require 'test/unit/ui/testrunnerutilities'
9
-
10
- module Test
11
- module Unit
12
- module UI
13
- module Console
14
-
15
- # Runs a Test::Unit::TestSuite on the console.
16
- class TestRunner
17
- extend TestRunnerUtilities
18
-
19
- # Creates a new TestRunner for running the passed
20
- # suite. If quiet_mode is true, the output while
21
- # running is limited to progress dots, errors and
22
- # failures, and the final result. io specifies
23
- # where runner output should go to; defaults to
24
- # STDOUT.
25
- def initialize(suite, output_level=NORMAL, io=STDOUT)
26
- if (suite.respond_to?(:suite))
27
- @suite = suite.suite
28
- else
29
- @suite = suite
30
- end
31
- @output_level = output_level
32
- @io = io
33
- @already_outputted = false
34
- @faults = []
35
- end
36
-
37
- # Begins the test run.
38
- def start
39
- setup_mediator
40
- attach_to_mediator
41
- return start_mediator
42
- end
43
-
44
- private
45
- def setup_mediator
46
- @mediator = create_mediator(@suite)
47
- suite_name = @suite.to_s
48
- if ( @suite.kind_of?(Module) )
49
- suite_name = @suite.name
50
- end
51
- output("Loaded suite #{suite_name}")
52
- end
53
-
54
- def create_mediator(suite)
55
- return TestRunnerMediator.new(suite)
56
- end
57
-
58
- def attach_to_mediator
59
- @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
60
- @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
61
- @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
62
- @mediator.add_listener(TestCase::STARTED, &method(:test_started))
63
- @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
64
- end
65
-
66
- def start_mediator
67
- return @mediator.run_suite
68
- end
69
-
70
- def add_fault(fault)
71
- @faults << fault
72
- output_single(fault.single_character_display, PROGRESS_ONLY)
73
- @already_outputted = true
74
- end
75
-
76
- def started(result)
77
- @result = result
78
- output("Started")
79
- end
80
-
81
- def finished(elapsed_time)
82
- nl
83
- output("Finished in #{elapsed_time} seconds.")
84
- @faults.each_with_index do |fault, index|
85
- nl
86
- output("%3d) %s" % [index + 1, fault.long_display])
87
- end
88
- nl
89
- output(@result)
90
- end
91
-
92
- def test_started(name)
93
- output_single(name + ": ", VERBOSE)
94
- end
95
-
96
- def test_finished(name)
97
- output_single(".", PROGRESS_ONLY) unless (@already_outputted)
98
- nl(VERBOSE)
99
- @already_outputted = false
100
- end
101
-
102
- def nl(level=NORMAL)
103
- output("", level)
104
- end
105
-
106
- def output(something, level=NORMAL)
107
- @io.puts(something) if (output?(level))
108
- @io.flush
109
- end
110
-
111
- def output_single(something, level=NORMAL)
112
- @io.write(something) if (output?(level))
113
- @io.flush
114
- end
115
-
116
- def output?(level)
117
- level <= @output_level
118
- end
119
- end
120
- end
121
- end
122
- end
123
- end
124
-
125
- if __FILE__ == $0
126
- Test::Unit::UI::Console::TestRunner.start_command_line_test
127
- end
@@ -1,268 +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 'fox'
8
- require 'test/unit/ui/testrunnermediator'
9
- require 'test/unit/ui/testrunnerutilities'
10
-
11
- include Fox
12
-
13
- module Test
14
- module Unit
15
- module UI
16
- module Fox
17
-
18
- # Runs a Test::Unit::TestSuite in a Fox UI. Obviously,
19
- # this one requires you to have Fox
20
- # (http://www.fox-toolkit.org/fox.html) and the Ruby
21
- # Fox extension (http://fxruby.sourceforge.net/)
22
- # installed.
23
- class TestRunner
24
-
25
- extend TestRunnerUtilities
26
-
27
- RED_STYLE = FXRGBA(0xFF,0,0,0xFF) #0xFF000000
28
- GREEN_STYLE = FXRGBA(0,0xFF,0,0xFF) #0x00FF0000
29
-
30
- # Creates a new TestRunner for running the passed
31
- # suite.
32
- def initialize(suite, output_level = NORMAL)
33
- if (suite.respond_to?(:suite))
34
- @suite = suite.suite
35
- else
36
- @suite = suite
37
- end
38
-
39
- @result = nil
40
- @red = false
41
- end
42
-
43
- # Begins the test run.
44
- def start
45
- setup_ui
46
- setup_mediator
47
- attach_to_mediator
48
- start_ui
49
- @result
50
- end
51
-
52
- def setup_mediator
53
- @mediator = TestRunnerMediator.new(@suite)
54
- suite_name = @suite.to_s
55
- if ( @suite.kind_of?(Module) )
56
- suite_name = @suite.name
57
- end
58
- @suite_name_entry.text = suite_name
59
- end
60
-
61
- def attach_to_mediator
62
- @mediator.add_listener(TestRunnerMediator::RESET, &method(:reset_ui))
63
- @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
64
- @mediator.add_listener(TestResult::CHANGED, &method(:result_changed))
65
- @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
66
- @mediator.add_listener(TestCase::STARTED, &method(:test_started))
67
- @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
68
- end
69
-
70
- def start_ui
71
- @application.create
72
- @window.show(PLACEMENT_SCREEN)
73
- @application.addTimeout(1) do
74
- @mediator.run_suite
75
- end
76
- @application.run
77
- end
78
-
79
- def stop
80
- @application.exit(0)
81
- end
82
-
83
- def reset_ui(count)
84
- @test_progress_bar.barColor = GREEN_STYLE
85
- @test_progress_bar.total = count
86
- @test_progress_bar.progress = 0
87
- @red = false
88
-
89
- @test_count_label.text = "0"
90
- @assertion_count_label.text = "0"
91
- @failure_count_label.text = "0"
92
- @error_count_label.text = "0"
93
-
94
- @fault_list.clearItems
95
- end
96
-
97
- def add_fault(fault)
98
- if ( ! @red )
99
- @test_progress_bar.barColor = RED_STYLE
100
- @red = true
101
- end
102
- item = FaultListItem.new(fault)
103
- @fault_list.appendItem(item)
104
- end
105
-
106
- def show_fault(fault)
107
- raw_show_fault(fault.long_display)
108
- end
109
-
110
- def raw_show_fault(string)
111
- @detail_text.setText(string)
112
- end
113
-
114
- def clear_fault
115
- raw_show_fault("")
116
- end
117
-
118
- def result_changed(result)
119
- @test_progress_bar.progress = result.run_count
120
-
121
- @test_count_label.text = result.run_count.to_s
122
- @assertion_count_label.text = result.assertion_count.to_s
123
- @failure_count_label.text = result.failure_count.to_s
124
- @error_count_label.text = result.error_count.to_s
125
-
126
- # repaint now!
127
- @info_panel.repaint
128
- @application.flush
129
- end
130
-
131
- def started(result)
132
- @result = result
133
- output_status("Started...")
134
- end
135
-
136
- def test_started(test_name)
137
- output_status("Running #{test_name}...")
138
- end
139
-
140
- def finished(elapsed_time)
141
- output_status("Finished in #{elapsed_time} seconds")
142
- end
143
-
144
- def output_status(string)
145
- @status_entry.text = string
146
- @status_entry.repaint
147
- end
148
-
149
- def setup_ui
150
- @application = create_application
151
- create_tooltip(@application)
152
-
153
- @window = create_window(@application)
154
-
155
- @status_entry = create_entry(@window)
156
-
157
- main_panel = create_main_panel(@window)
158
-
159
- suite_panel = create_suite_panel(main_panel)
160
- create_label(suite_panel, "Suite:")
161
- @suite_name_entry = create_entry(suite_panel)
162
- create_button(suite_panel, "&Run\tRun the current suite", proc { @mediator.run_suite })
163
-
164
- @test_progress_bar = create_progress_bar(main_panel)
165
-
166
- @info_panel = create_info_panel(main_panel)
167
- create_label(@info_panel, "Tests:")
168
- @test_count_label = create_label(@info_panel, "0")
169
- create_label(@info_panel, "Assertions:")
170
- @assertion_count_label = create_label(@info_panel, "0")
171
- create_label(@info_panel, "Failures:")
172
- @failure_count_label = create_label(@info_panel, "0")
173
- create_label(@info_panel, "Errors:")
174
- @error_count_label = create_label(@info_panel, "0")
175
-
176
- list_panel = create_list_panel(main_panel)
177
- @fault_list = create_fault_list(list_panel)
178
-
179
- detail_panel = create_detail_panel(main_panel)
180
- @detail_text = create_text(detail_panel)
181
- end
182
-
183
- def create_application
184
- app = FXApp.new("TestRunner", "Test::Unit")
185
- app.init([])
186
- app
187
- end
188
-
189
- def create_window(app)
190
- FXMainWindow.new(app, "Test::Unit TestRunner", nil, nil, DECOR_ALL, 0, 0, 450)
191
- end
192
-
193
- def create_tooltip(app)
194
- FXTooltip.new(app)
195
- end
196
-
197
- def create_main_panel(parent)
198
- panel = FXVerticalFrame.new(parent, LAYOUT_FILL_X | LAYOUT_FILL_Y)
199
- panel.vSpacing = 10
200
- panel
201
- end
202
-
203
- def create_suite_panel(parent)
204
- FXHorizontalFrame.new(parent, LAYOUT_SIDE_LEFT | LAYOUT_FILL_X)
205
- end
206
-
207
- def create_button(parent, text, action)
208
- FXButton.new(parent, text).connect(SEL_COMMAND, &action)
209
- end
210
-
211
- def create_progress_bar(parent)
212
- FXProgressBar.new(parent, nil, 0, PROGRESSBAR_NORMAL | LAYOUT_FILL_X)
213
- end
214
-
215
- def create_info_panel(parent)
216
- FXMatrix.new(parent, 1, MATRIX_BY_ROWS | LAYOUT_FILL_X)
217
- end
218
-
219
- def create_label(parent, text)
220
- FXLabel.new(parent, text, nil, JUSTIFY_CENTER_X | LAYOUT_FILL_COLUMN)
221
- end
222
-
223
- def create_list_panel(parent)
224
- FXHorizontalFrame.new(parent, LAYOUT_FILL_X | FRAME_SUNKEN | FRAME_THICK)
225
- end
226
-
227
- def create_fault_list(parent)
228
- list = FXList.new(parent, 10, nil, 0, LIST_SINGLESELECT | LAYOUT_FILL_X) #, 0, 0, 0, 150)
229
- list.connect(SEL_COMMAND) do |sender, sel, ptr|
230
- if sender.retrieveItem(sender.currentItem).selected?
231
- show_fault(sender.retrieveItem(sender.currentItem).fault)
232
- else
233
- clear_fault
234
- end
235
- end
236
- list
237
- end
238
-
239
- def create_detail_panel(parent)
240
- FXHorizontalFrame.new(parent, LAYOUT_FILL_X | LAYOUT_FILL_Y | FRAME_SUNKEN | FRAME_THICK)
241
- end
242
-
243
- def create_text(parent)
244
- FXText.new(parent, nil, 0, TEXT_READONLY | LAYOUT_FILL_X | LAYOUT_FILL_Y)
245
- end
246
-
247
- def create_entry(parent)
248
- entry = FXTextField.new(parent, 30, nil, 0, TEXTFIELD_NORMAL | LAYOUT_SIDE_BOTTOM | LAYOUT_FILL_X)
249
- entry.disable
250
- entry
251
- end
252
- end
253
-
254
- class FaultListItem < FXListItem
255
- attr_reader(:fault)
256
- def initialize(fault)
257
- super(fault.short_display)
258
- @fault = fault
259
- end
260
- end
261
- end
262
- end
263
- end
264
- end
265
-
266
- if __FILE__ == $0
267
- Test::Unit::UI::Fox::TestRunner.start_command_line_test
268
- end