test-unit 1.2.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. data/History.txt +27 -0
  2. data/Manifest.txt +30 -8
  3. data/README.txt +9 -4
  4. data/Rakefile +16 -1
  5. data/bin/testrb +0 -0
  6. data/lib/test/unit/assertions.rb +148 -48
  7. data/lib/test/unit/attribute.rb +125 -0
  8. data/lib/test/unit/autorunner.rb +101 -71
  9. data/lib/test/unit/collector/descendant.rb +23 -0
  10. data/lib/test/unit/collector/dir.rb +1 -1
  11. data/lib/test/unit/collector/load.rb +135 -0
  12. data/lib/test/unit/color.rb +61 -0
  13. data/lib/test/unit/diff.rb +524 -0
  14. data/lib/test/unit/error.rb +70 -2
  15. data/lib/test/unit/exceptionhandler.rb +39 -0
  16. data/lib/test/unit/failure.rb +63 -4
  17. data/lib/test/unit/fixture.rb +185 -0
  18. data/lib/test/unit/notification.rb +125 -0
  19. data/lib/test/unit/omission.rb +143 -0
  20. data/lib/test/unit/pending.rb +146 -0
  21. data/lib/test/unit/priority.rb +146 -0
  22. data/lib/test/unit/runner/console.rb +46 -0
  23. data/lib/test/unit/runner/emacs.rb +8 -0
  24. data/lib/test/unit/testcase.rb +193 -76
  25. data/lib/test/unit/testresult.rb +37 -28
  26. data/lib/test/unit/testsuite.rb +35 -1
  27. data/lib/test/unit/ui/console/outputlevel.rb +14 -0
  28. data/lib/test/unit/ui/console/testrunner.rb +96 -28
  29. data/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  30. data/lib/test/unit/ui/testrunner.rb +20 -0
  31. data/lib/test/unit/ui/testrunnermediator.rb +28 -19
  32. data/lib/test/unit/ui/testrunnerutilities.rb +2 -7
  33. data/lib/test/unit/util/backtracefilter.rb +2 -1
  34. data/lib/test/unit/version.rb +1 -1
  35. data/test/collector/test_descendant.rb +135 -0
  36. data/test/collector/test_load.rb +333 -0
  37. data/test/run-test.rb +13 -0
  38. data/test/test_assertions.rb +221 -56
  39. data/test/test_attribute.rb +86 -0
  40. data/test/test_color.rb +37 -0
  41. data/test/test_diff.rb +477 -0
  42. data/test/test_emacs_runner.rb +60 -0
  43. data/test/test_fixture.rb +275 -0
  44. data/test/test_notification.rb +33 -0
  45. data/test/test_omission.rb +81 -0
  46. data/test/test_pending.rb +70 -0
  47. data/test/test_priority.rb +89 -0
  48. data/test/test_testcase.rb +160 -5
  49. data/test/test_testresult.rb +61 -52
  50. data/test/testunit_test_util.rb +14 -0
  51. data/test/ui/test_testrunmediator.rb +20 -0
  52. metadata +53 -23
  53. data/lib/test/unit/ui/fox/testrunner.rb +0 -268
  54. data/lib/test/unit/ui/gtk/testrunner.rb +0 -416
  55. data/lib/test/unit/ui/gtk2/testrunner.rb +0 -465
  56. data/lib/test/unit/ui/tk/testrunner.rb +0 -260
  57. data/test/runit/test_assert.rb +0 -402
  58. data/test/runit/test_testcase.rb +0 -91
  59. data/test/runit/test_testresult.rb +0 -144
  60. data/test/runit/test_testsuite.rb +0 -49
@@ -0,0 +1,14 @@
1
+ module TestUnitTestUtil
2
+ private
3
+ def assert_fault_messages(expected, faults)
4
+ assert_equal(expected, faults.collect {|fault| fault.message})
5
+ end
6
+
7
+ def run_test(test_case, name)
8
+ result = Test::Unit::TestResult.new
9
+ test = test_case.new(name)
10
+ yield(test) if block_given?
11
+ test.run(result) {}
12
+ result
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ require 'test/unit/ui/testrunnermediator'
2
+
3
+ class TestUnitUIMediator < Test::Unit::TestCase
4
+ def test_run_suite_with_interrupt_exception
5
+ test_case = Class.new(Test::Unit::TestCase) do
6
+ def test_raise_interrupt
7
+ raise Interrupt
8
+ end
9
+ end
10
+ mediator = Test::Unit::UI::TestRunnerMediator.new(test_case.suite)
11
+ finished = false
12
+ mediator.add_listener(Test::Unit::UI::TestRunnerMediator::FINISHED) do
13
+ finished = true
14
+ end
15
+ assert_raise(Interrupt) do
16
+ mediator.run_suite
17
+ end
18
+ assert(finished)
19
+ end
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test-unit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-03-20 00:00:00 -07:00
13
+ date: 2008-06-18 00:00:00 +09:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.5.1
23
+ version: 1.6.0
24
24
  version:
25
25
  description: Test::Unit (Classic) - Nathaniel Talbott's originial test-unit, externalized from the ruby project as a gem (for tool developers).
26
26
  email:
@@ -43,22 +43,34 @@ files:
43
43
  - lib/test/unit.rb
44
44
  - lib/test/unit/assertionfailederror.rb
45
45
  - lib/test/unit/assertions.rb
46
+ - lib/test/unit/attribute.rb
46
47
  - lib/test/unit/autorunner.rb
47
48
  - lib/test/unit/collector.rb
49
+ - lib/test/unit/collector/descendant.rb
48
50
  - lib/test/unit/collector/dir.rb
51
+ - lib/test/unit/collector/load.rb
49
52
  - lib/test/unit/collector/objectspace.rb
53
+ - lib/test/unit/color.rb
54
+ - lib/test/unit/diff.rb
50
55
  - lib/test/unit/error.rb
56
+ - lib/test/unit/exceptionhandler.rb
51
57
  - lib/test/unit/failure.rb
58
+ - lib/test/unit/fixture.rb
59
+ - lib/test/unit/notification.rb
60
+ - lib/test/unit/omission.rb
61
+ - lib/test/unit/pending.rb
62
+ - lib/test/unit/priority.rb
63
+ - lib/test/unit/runner/console.rb
64
+ - lib/test/unit/runner/emacs.rb
52
65
  - lib/test/unit/testcase.rb
53
66
  - lib/test/unit/testresult.rb
54
67
  - lib/test/unit/testsuite.rb
68
+ - lib/test/unit/ui/console/outputlevel.rb
55
69
  - lib/test/unit/ui/console/testrunner.rb
56
- - lib/test/unit/ui/fox/testrunner.rb
57
- - lib/test/unit/ui/gtk/testrunner.rb
58
- - lib/test/unit/ui/gtk2/testrunner.rb
70
+ - lib/test/unit/ui/emacs/testrunner.rb
71
+ - lib/test/unit/ui/testrunner.rb
59
72
  - lib/test/unit/ui/testrunnermediator.rb
60
73
  - lib/test/unit/ui/testrunnerutilities.rb
61
- - lib/test/unit/ui/tk/testrunner.rb
62
74
  - lib/test/unit/util/backtracefilter.rb
63
75
  - lib/test/unit/util/observable.rb
64
76
  - lib/test/unit/util/procwrapper.rb
@@ -68,18 +80,28 @@ files:
68
80
  - sample/tc_adder.rb
69
81
  - sample/tc_subtracter.rb
70
82
  - sample/ts_examples.rb
83
+ - test/collector/test_descendant.rb
71
84
  - test/collector/test_dir.rb
85
+ - test/collector/test_load.rb
72
86
  - test/collector/test_objectspace.rb
73
- - test/runit/test_assert.rb
74
- - test/runit/test_testcase.rb
75
- - test/runit/test_testresult.rb
76
- - test/runit/test_testsuite.rb
87
+ - test/run-test.rb
77
88
  - test/test_assertions.rb
89
+ - test/test_attribute.rb
90
+ - test/test_color.rb
91
+ - test/test_diff.rb
92
+ - test/test_emacs_runner.rb
78
93
  - test/test_error.rb
79
94
  - test/test_failure.rb
95
+ - test/test_fixture.rb
96
+ - test/test_notification.rb
97
+ - test/test_omission.rb
98
+ - test/test_pending.rb
99
+ - test/test_priority.rb
80
100
  - test/test_testcase.rb
81
101
  - test/test_testresult.rb
82
102
  - test/test_testsuite.rb
103
+ - test/testunit_test_util.rb
104
+ - test/ui/test_testrunmediator.rb
83
105
  - test/util/test_backtracefilter.rb
84
106
  - test/util/test_observable.rb
85
107
  - test/util/test_procwrapper.rb
@@ -106,23 +128,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
128
  requirements: []
107
129
 
108
130
  rubyforge_project: test-unit
109
- rubygems_version: 1.0.1
131
+ rubygems_version: 1.1.1
110
132
  signing_key:
111
133
  specification_version: 2
112
134
  summary: Test::Unit (Classic) - Nathaniel Talbott's originial test-unit, externalized from the ruby project as a gem (for tool developers).
113
135
  test_files:
114
- - test/collector/test_dir.rb
115
- - test/collector/test_objectspace.rb
116
- - test/runit/test_assert.rb
117
- - test/runit/test_testcase.rb
118
- - test/runit/test_testresult.rb
119
- - test/runit/test_testsuite.rb
120
- - test/test_assertions.rb
121
- - test/test_error.rb
122
- - test/test_failure.rb
136
+ - test/test_pending.rb
123
137
  - test/test_testcase.rb
124
- - test/test_testresult.rb
138
+ - test/test_color.rb
139
+ - test/test_failure.rb
140
+ - test/test_diff.rb
141
+ - test/test_fixture.rb
142
+ - test/collector/test_objectspace.rb
143
+ - test/collector/test_load.rb
144
+ - test/collector/test_dir.rb
145
+ - test/collector/test_descendant.rb
146
+ - test/test_attribute.rb
147
+ - test/test_emacs_runner.rb
125
148
  - test/test_testsuite.rb
126
- - test/util/test_backtracefilter.rb
149
+ - test/test_assertions.rb
127
150
  - test/util/test_observable.rb
128
151
  - test/util/test_procwrapper.rb
152
+ - test/util/test_backtracefilter.rb
153
+ - test/ui/test_testrunmediator.rb
154
+ - test/test_priority.rb
155
+ - test/test_testresult.rb
156
+ - test/test_omission.rb
157
+ - test/test_error.rb
158
+ - test/test_notification.rb
@@ -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
@@ -1,416 +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 'gtk'
8
- require 'test/unit/ui/testrunnermediator'
9
- require 'test/unit/ui/testrunnerutilities'
10
-
11
- module Test
12
- module Unit
13
- module UI
14
- module GTK
15
-
16
- # Runs a Test::Unit::TestSuite in a Gtk UI. Obviously,
17
- # this one requires you to have Gtk
18
- # (http://www.gtk.org/) and the Ruby Gtk extension
19
- # (http://ruby-gnome.sourceforge.net/) installed.
20
- class TestRunner
21
- extend TestRunnerUtilities
22
-
23
- # Creates a new TestRunner for running the passed
24
- # suite.
25
- def initialize(suite, output_level = NORMAL)
26
- if (suite.respond_to?(:suite))
27
- @suite = suite.suite
28
- else
29
- @suite = suite
30
- end
31
- @result = nil
32
-
33
- @runner = Thread.current
34
- @restart_signal = Class.new(Exception)
35
- @viewer = Thread.start do
36
- @runner.join rescue @runner.run
37
- Gtk.main
38
- end
39
- @viewer.join rescue nil # wait deadlock to handshake
40
- end
41
-
42
- # Begins the test run.
43
- def start
44
- setup_mediator
45
- setup_ui
46
- attach_to_mediator
47
- start_ui
48
- @result
49
- end
50
-
51
- private
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.set_text(suite_name)
59
- end
60
-
61
- def attach_to_mediator
62
- run_button.signal_connect("clicked", nil, &method(:run_test))
63
- @mediator.add_listener(TestRunnerMediator::RESET, &method(:reset_ui))
64
- @mediator.add_listener(TestResult::FAULT, &method(:add_fault))
65
- @mediator.add_listener(TestResult::CHANGED, &method(:result_changed))
66
- @mediator.add_listener(TestRunnerMediator::STARTED, &method(:started))
67
- @mediator.add_listener(TestCase::STARTED, &method(:test_started))
68
- @mediator.add_listener(TestCase::FINISHED, &method(:test_finished))
69
- @mediator.add_listener(TestRunnerMediator::FINISHED, &method(:finished))
70
- end
71
-
72
- def run_test(*)
73
- @runner.raise(@restart_signal)
74
- end
75
-
76
- def start_ui
77
- @viewer.run
78
- running = false
79
- begin
80
- loop do
81
- if (running ^= true)
82
- run_button.child.text = "Stop"
83
- @mediator.run_suite
84
- else
85
- run_button.child.text = "Run"
86
- @viewer.join
87
- break
88
- end
89
- end
90
- rescue @restart_signal
91
- retry
92
- rescue
93
- end
94
- end
95
-
96
- def stop(*)
97
- Gtk.main_quit
98
- end
99
-
100
- def reset_ui(count)
101
- test_progress_bar.set_style(green_style)
102
- test_progress_bar.configure(0, 0, count)
103
- @red = false
104
-
105
- run_count_label.set_text("0")
106
- assertion_count_label.set_text("0")
107
- failure_count_label.set_text("0")
108
- error_count_label.set_text("0")
109
-
110
- fault_list.remove_items(fault_list.children)
111
- end
112
-
113
- def add_fault(fault)
114
- if ( ! @red )
115
- test_progress_bar.set_style(red_style)
116
- @red = true
117
- end
118
- item = FaultListItem.new(fault)
119
- item.show
120
- fault_list.append_items([item])
121
- end
122
-
123
- def show_fault(fault)
124
- raw_show_fault(fault.long_display)
125
- end
126
-
127
- def raw_show_fault(string)
128
- fault_detail_label.set_text(string)
129
- outer_detail_sub_panel.queue_resize
130
- end
131
-
132
- def clear_fault
133
- raw_show_fault("")
134
- end
135
-
136
- def result_changed(result)
137
- run_count_label.set_text(result.run_count.to_s)
138
- assertion_count_label.set_text(result.assertion_count.to_s)
139
- failure_count_label.set_text(result.failure_count.to_s)
140
- error_count_label.set_text(result.error_count.to_s)
141
- end
142
-
143
- def started(result)
144
- @result = result
145
- output_status("Started...")
146
- end
147
-
148
- def test_started(test_name)
149
- output_status("Running #{test_name}...")
150
- end
151
-
152
- def test_finished(test_name)
153
- test_progress_bar.set_value(test_progress_bar.get_value + 1)
154
- end
155
-
156
- def finished(elapsed_time)
157
- output_status("Finished in #{elapsed_time} seconds")
158
- end
159
-
160
- def output_status(string)
161
- status_entry.set_text(string)
162
- end
163
-
164
- def setup_ui
165
- main_window.signal_connect("destroy", nil, &method(:stop))
166
- main_window.show_all
167
- fault_list.signal_connect("select-child", nil) {
168
- | list, item, data |
169
- show_fault(item.fault)
170
- }
171
- fault_list.signal_connect("unselect-child", nil) {
172
- clear_fault
173
- }
174
- @red = false
175
- end
176
-
177
- def main_window
178
- lazy_initialize(:main_window) {
179
- @main_window = Gtk::Window.new(Gtk::WINDOW_TOPLEVEL)
180
- @main_window.set_title("Test::Unit TestRunner")
181
- @main_window.set_usize(800, 600)
182
- @main_window.set_uposition(20, 20)
183
- @main_window.set_policy(true, true, false)
184
- @main_window.add(main_panel)
185
- }
186
- end
187
-
188
- def main_panel
189
- lazy_initialize(:main_panel) {
190
- @main_panel = Gtk::VBox.new(false, 0)
191
- @main_panel.pack_start(suite_panel, false, false, 0)
192
- @main_panel.pack_start(progress_panel, false, false, 0)
193
- @main_panel.pack_start(info_panel, false, false, 0)
194
- @main_panel.pack_start(list_panel, false, false, 0)
195
- @main_panel.pack_start(detail_panel, true, true, 0)
196
- @main_panel.pack_start(status_panel, false, false, 0)
197
- }
198
- end
199
-
200
- def suite_panel
201
- lazy_initialize(:suite_panel) {
202
- @suite_panel = Gtk::HBox.new(false, 10)
203
- @suite_panel.border_width(10)
204
- @suite_panel.pack_start(Gtk::Label.new("Suite:"), false, false, 0)
205
- @suite_panel.pack_start(suite_name_entry, true, true, 0)
206
- @suite_panel.pack_start(run_button, false, false, 0)
207
- }
208
- end
209
-
210
- def suite_name_entry
211
- lazy_initialize(:suite_name_entry) {
212
- @suite_name_entry = Gtk::Entry.new
213
- @suite_name_entry.set_editable(false)
214
- }
215
- end
216
-
217
- def run_button
218
- lazy_initialize(:run_button) {
219
- @run_button = Gtk::Button.new("Run")
220
- }
221
- end
222
-
223
- def progress_panel
224
- lazy_initialize(:progress_panel) {
225
- @progress_panel = Gtk::HBox.new(false, 10)
226
- @progress_panel.border_width(10)
227
- @progress_panel.pack_start(test_progress_bar, true, true, 0)
228
- }
229
- end
230
-
231
- def test_progress_bar
232
- lazy_initialize(:test_progress_bar) {
233
- @test_progress_bar = EnhancedProgressBar.new
234
- @test_progress_bar.set_usize(@test_progress_bar.allocation.width,
235
- info_panel.size_request.height)
236
- @test_progress_bar.set_style(green_style)
237
- }
238
- end
239
-
240
- def green_style
241
- lazy_initialize(:green_style) {
242
- @green_style = Gtk::Style.new
243
- @green_style.set_bg(Gtk::STATE_PRELIGHT, 0x0000, 0xFFFF, 0x0000)
244
- }
245
- end
246
-
247
- def red_style
248
- lazy_initialize(:red_style) {
249
- @red_style = Gtk::Style.new
250
- @red_style.set_bg(Gtk::STATE_PRELIGHT, 0xFFFF, 0x0000, 0x0000)
251
- }
252
- end
253
-
254
- def info_panel
255
- lazy_initialize(:info_panel) {
256
- @info_panel = Gtk::HBox.new(false, 0)
257
- @info_panel.border_width(10)
258
- @info_panel.pack_start(Gtk::Label.new("Runs:"), false, false, 0)
259
- @info_panel.pack_start(run_count_label, true, false, 0)
260
- @info_panel.pack_start(Gtk::Label.new("Assertions:"), false, false, 0)
261
- @info_panel.pack_start(assertion_count_label, true, false, 0)
262
- @info_panel.pack_start(Gtk::Label.new("Failures:"), false, false, 0)
263
- @info_panel.pack_start(failure_count_label, true, false, 0)
264
- @info_panel.pack_start(Gtk::Label.new("Errors:"), false, false, 0)
265
- @info_panel.pack_start(error_count_label, true, false, 0)
266
- }
267
- end
268
-
269
- def run_count_label
270
- lazy_initialize(:run_count_label) {
271
- @run_count_label = Gtk::Label.new("0")
272
- @run_count_label.set_justify(Gtk::JUSTIFY_LEFT)
273
- }
274
- end
275
-
276
- def assertion_count_label
277
- lazy_initialize(:assertion_count_label) {
278
- @assertion_count_label = Gtk::Label.new("0")
279
- @assertion_count_label.set_justify(Gtk::JUSTIFY_LEFT)
280
- }
281
- end
282
-
283
- def failure_count_label
284
- lazy_initialize(:failure_count_label) {
285
- @failure_count_label = Gtk::Label.new("0")
286
- @failure_count_label.set_justify(Gtk::JUSTIFY_LEFT)
287
- }
288
- end
289
-
290
- def error_count_label
291
- lazy_initialize(:error_count_label) {
292
- @error_count_label = Gtk::Label.new("0")
293
- @error_count_label.set_justify(Gtk::JUSTIFY_LEFT)
294
- }
295
- end
296
-
297
- def list_panel
298
- lazy_initialize(:list_panel) {
299
- @list_panel = Gtk::HBox.new
300
- @list_panel.border_width(10)
301
- @list_panel.pack_start(list_scrolled_window, true, true, 0)
302
- }
303
- end
304
-
305
- def list_scrolled_window
306
- lazy_initialize(:list_scrolled_window) {
307
- @list_scrolled_window = Gtk::ScrolledWindow.new
308
- @list_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
309
- @list_scrolled_window.set_usize(@list_scrolled_window.allocation.width, 150)
310
- @list_scrolled_window.add_with_viewport(fault_list)
311
- }
312
- end
313
-
314
- def fault_list
315
- lazy_initialize(:fault_list) {
316
- @fault_list = Gtk::List.new
317
- }
318
- end
319
-
320
- def detail_panel
321
- lazy_initialize(:detail_panel) {
322
- @detail_panel = Gtk::HBox.new
323
- @detail_panel.border_width(10)
324
- @detail_panel.pack_start(detail_scrolled_window, true, true, 0)
325
- }
326
- end
327
-
328
- def detail_scrolled_window
329
- lazy_initialize(:detail_scrolled_window) {
330
- @detail_scrolled_window = Gtk::ScrolledWindow.new
331
- @detail_scrolled_window.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC)
332
- @detail_scrolled_window.set_usize(400, @detail_scrolled_window.allocation.height)
333
- @detail_scrolled_window.add_with_viewport(outer_detail_sub_panel)
334
- }
335
- end
336
-
337
- def outer_detail_sub_panel
338
- lazy_initialize(:outer_detail_sub_panel) {
339
- @outer_detail_sub_panel = Gtk::VBox.new
340
- @outer_detail_sub_panel.pack_start(inner_detail_sub_panel, false, false, 0)
341
- }
342
- end
343
-
344
- def inner_detail_sub_panel
345
- lazy_initialize(:inner_detail_sub_panel) {
346
- @inner_detail_sub_panel = Gtk::HBox.new
347
- @inner_detail_sub_panel.pack_start(fault_detail_label, false, false, 0)
348
- }
349
- end
350
-
351
- def fault_detail_label
352
- lazy_initialize(:fault_detail_label) {
353
- @fault_detail_label = EnhancedLabel.new("")
354
- style = Gtk::Style.new
355
- font = Gdk::Font.font_load("-*-Courier New-medium-r-normal--*-120-*-*-*-*-*-*")
356
- begin
357
- style.set_font(font)
358
- rescue ArgumentError; end
359
- @fault_detail_label.set_style(style)
360
- @fault_detail_label.set_justify(Gtk::JUSTIFY_LEFT)
361
- @fault_detail_label.set_line_wrap(false)
362
- }
363
- end
364
-
365
- def status_panel
366
- lazy_initialize(:status_panel) {
367
- @status_panel = Gtk::HBox.new
368
- @status_panel.border_width(10)
369
- @status_panel.pack_start(status_entry, true, true, 0)
370
- }
371
- end
372
-
373
- def status_entry
374
- lazy_initialize(:status_entry) {
375
- @status_entry = Gtk::Entry.new
376
- @status_entry.set_editable(false)
377
- }
378
- end
379
-
380
- def lazy_initialize(symbol)
381
- if (!instance_eval("defined?(@#{symbol.to_s})"))
382
- yield
383
- end
384
- return instance_eval("@" + symbol.to_s)
385
- end
386
- end
387
-
388
- class EnhancedProgressBar < Gtk::ProgressBar
389
- def set_style(style)
390
- super
391
- hide
392
- show
393
- end
394
- end
395
-
396
- class EnhancedLabel < Gtk::Label
397
- def set_text(text)
398
- super(text.gsub(/\n\t/, "\n" + (" " * 4)))
399
- end
400
- end
401
-
402
- class FaultListItem < Gtk::ListItem
403
- attr_reader(:fault)
404
- def initialize(fault)
405
- super(fault.short_display)
406
- @fault = fault
407
- end
408
- end
409
- end
410
- end
411
- end
412
- end
413
-
414
- if __FILE__ == $0
415
- Test::Unit::UI::GTK::TestRunner.start_command_line_test
416
- end