test-unit 3.2.0 → 3.3.6
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.
- checksums.yaml +5 -5
- data/COPYING +4 -1
- data/README.md +11 -11
- data/Rakefile +10 -1
- data/doc/text/getting-started.md +246 -0
- data/doc/text/news.md +372 -1
- data/lib/test/unit.rb +171 -157
- data/lib/test/unit/assertions.rb +187 -149
- data/lib/test/unit/attribute.rb +71 -2
- data/lib/test/unit/autorunner.rb +65 -32
- data/lib/test/unit/code-snippet-fetcher.rb +7 -7
- data/lib/test/unit/collector/load.rb +8 -13
- data/lib/test/unit/data-sets.rb +116 -0
- data/lib/test/unit/data.rb +121 -12
- data/lib/test/unit/diff.rb +11 -11
- data/lib/test/unit/fixture.rb +3 -0
- data/lib/test/unit/notification.rb +9 -7
- data/lib/test/unit/omission.rb +34 -31
- data/lib/test/unit/pending.rb +12 -11
- data/lib/test/unit/priority.rb +7 -3
- data/lib/test/unit/runner/console.rb +25 -0
- data/lib/test/unit/test-suite-creator.rb +22 -8
- data/lib/test/unit/testcase.rb +270 -182
- data/lib/test/unit/ui/console/testrunner.rb +90 -35
- data/lib/test/unit/ui/emacs/testrunner.rb +5 -5
- data/lib/test/unit/util/observable.rb +2 -2
- data/lib/test/unit/util/output.rb +5 -4
- data/lib/test/unit/util/procwrapper.rb +4 -4
- data/lib/test/unit/version.rb +1 -1
- data/test/collector/test-descendant.rb +4 -0
- data/test/collector/test-load.rb +35 -2
- data/test/collector/test_dir.rb +5 -4
- data/test/collector/test_objectspace.rb +7 -5
- data/test/test-assertions.rb +128 -101
- data/test/test-code-snippet.rb +42 -0
- data/test/test-data.rb +195 -79
- data/test/test-priority.rb +19 -8
- data/test/test-test-case.rb +111 -3
- data/test/test-test-suite.rb +1 -0
- data/test/testunit-test-util.rb +2 -0
- metadata +38 -37
data/lib/test/unit.rb
CHANGED
@@ -3,10 +3,10 @@ require 'test/unit/autorunner'
|
|
3
3
|
|
4
4
|
module Test # :nodoc:
|
5
5
|
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
#
|
6
|
+
# # Test::Unit - Ruby Unit Testing Framework
|
7
|
+
#
|
8
|
+
# ## Introduction
|
9
|
+
#
|
10
10
|
# Unit testing is making waves all over the place, largely due to the
|
11
11
|
# fact that it is a core practice of XP. While XP is great, unit testing
|
12
12
|
# has been around for a long time and has always been a good idea. One
|
@@ -18,19 +18,19 @@ module Test # :nodoc:
|
|
18
18
|
# as possible, you slowly build up a wall of things that cannot break
|
19
19
|
# without you immediately knowing about it. This is when unit testing
|
20
20
|
# hits its peak usefulness.
|
21
|
-
#
|
21
|
+
#
|
22
22
|
# Enter Test::Unit, a framework for unit testing in Ruby, helping you to
|
23
23
|
# design, debug and evaluate your code by making it easy to write and
|
24
24
|
# have tests for it.
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
25
|
+
#
|
26
|
+
#
|
27
|
+
# ## Notes
|
28
|
+
#
|
29
29
|
# Test::Unit has grown out of and superceded Lapidary.
|
30
|
-
#
|
31
|
-
#
|
32
|
-
#
|
33
|
-
#
|
30
|
+
#
|
31
|
+
#
|
32
|
+
# ## Feedback
|
33
|
+
#
|
34
34
|
# I like (and do my best to practice) XP, so I value early releases,
|
35
35
|
# user feedback, and clean, simple, expressive code. There is always
|
36
36
|
# room for improvement in everything I do, and Test::Unit is no
|
@@ -41,79 +41,84 @@ module Test # :nodoc:
|
|
41
41
|
# hear about any successes you have with Test::Unit, and any
|
42
42
|
# documentation you might add will be greatly appreciated. My contact
|
43
43
|
# info is below.
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
48
|
-
#
|
49
|
-
#
|
50
|
-
#
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#
|
55
|
-
#
|
56
|
-
#
|
57
|
-
#
|
44
|
+
#
|
45
|
+
#
|
46
|
+
# ## Contact Information
|
47
|
+
#
|
48
|
+
# * [GitHub issues on
|
49
|
+
# test-unit/test-unit](https://github.com/test-unit/test-unit/issues):
|
50
|
+
# If you have any issues, please report them to here.
|
51
|
+
#
|
52
|
+
# * [GitHub pull requests on
|
53
|
+
# test-unit/test-unit](https://github.com/test-unit/test-unit/pulls):
|
54
|
+
# If you have any patches, please report them to here.
|
55
|
+
#
|
56
|
+
# * [ruby-talk mailing
|
57
|
+
# list](https://www.ruby-lang.org/en/community/mailing-lists/):
|
58
|
+
# If you have any questions, you can ask them here.
|
59
|
+
#
|
60
|
+
#
|
61
|
+
# ## Credits
|
62
|
+
#
|
58
63
|
# I'd like to thank...
|
59
|
-
#
|
64
|
+
#
|
60
65
|
# Matz, for a great language!
|
61
|
-
#
|
66
|
+
#
|
62
67
|
# Masaki Suketa, for his work on RubyUnit, which filled a vital need in
|
63
68
|
# the Ruby world for a very long time. I'm also grateful for his help in
|
64
69
|
# polishing Test::Unit and getting the RubyUnit compatibility layer
|
65
70
|
# right. His graciousness in allowing Test::Unit to supercede RubyUnit
|
66
71
|
# continues to be a challenge to me to be more willing to defer my own
|
67
72
|
# rights.
|
68
|
-
#
|
73
|
+
#
|
69
74
|
# Ken McKinlay, for his interest and work on unit testing, and for his
|
70
75
|
# willingness to dialog about it. He was also a great help in pointing
|
71
76
|
# out some of the holes in the RubyUnit compatibility layer.
|
72
|
-
#
|
77
|
+
#
|
73
78
|
# Dave Thomas, for the original idea that led to the extremely simple
|
74
79
|
# "require 'test/unit'", plus his code to improve it even more by
|
75
80
|
# allowing the selection of tests from the command-line. Also, without
|
76
81
|
# RDoc, the documentation for Test::Unit would stink a lot more than it
|
77
82
|
# does now.
|
78
|
-
#
|
83
|
+
#
|
79
84
|
# Everyone who's helped out with bug reports, feature ideas,
|
80
85
|
# encouragement to continue, etc. It's a real privilege to be a part of
|
81
86
|
# the Ruby community.
|
82
|
-
#
|
87
|
+
#
|
83
88
|
# The guys at RoleModel Software, for putting up with me repeating, "But
|
84
89
|
# this would be so much easier in Ruby!" whenever we're coding in Java.
|
85
|
-
#
|
90
|
+
#
|
86
91
|
# My Creator, for giving me life, and giving it more abundantly.
|
87
|
-
#
|
88
|
-
#
|
89
|
-
#
|
90
|
-
#
|
92
|
+
#
|
93
|
+
#
|
94
|
+
# ## License
|
95
|
+
#
|
91
96
|
# Test::Unit is copyright (c) 2000-2003 Nathaniel Talbott. It is free
|
92
97
|
# software, and is distributed under the Ruby license. See the COPYING
|
93
98
|
# file.
|
94
|
-
#
|
99
|
+
#
|
95
100
|
# Exception: lib/test/unit/diff.rb is copyright (c)
|
96
101
|
# 2008-2010 Kouhei Sutou and 2001-2008 Python Software
|
97
102
|
# Foundation. It is free software, and is distributed
|
98
103
|
# under the Ruby license and/or the PSF license. See the
|
99
104
|
# COPYING file and PSFL file.
|
100
|
-
#
|
101
|
-
#
|
102
|
-
#
|
105
|
+
#
|
106
|
+
# ## Warranty
|
107
|
+
#
|
103
108
|
# This software is provided "as is" and without any express or
|
104
109
|
# implied warranties, including, without limitation, the implied
|
105
110
|
# warranties of merchantibility and fitness for a particular
|
106
111
|
# purpose.
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
112
|
+
#
|
113
|
+
#
|
114
|
+
# ## Author
|
115
|
+
#
|
111
116
|
# Nathaniel Talbott.
|
112
117
|
# Copyright (c) 2000-2003, Nathaniel Talbott
|
113
118
|
#
|
114
119
|
# ----
|
115
120
|
#
|
116
|
-
#
|
121
|
+
# # Usage
|
117
122
|
#
|
118
123
|
# The general idea behind unit testing is that you write a _test_
|
119
124
|
# _method_ that makes certain _assertions_ about your code, working
|
@@ -125,7 +130,7 @@ module Test # :nodoc:
|
|
125
130
|
# pieces.
|
126
131
|
#
|
127
132
|
#
|
128
|
-
#
|
133
|
+
# ## Assertions
|
129
134
|
#
|
130
135
|
# These are the heart of the framework. Think of an assertion as a
|
131
136
|
# statement of expected outcome, i.e. "I assert that x should be equal
|
@@ -137,7 +142,7 @@ module Test # :nodoc:
|
|
137
142
|
# of the current assertions, see Test::Unit::Assertions.
|
138
143
|
#
|
139
144
|
#
|
140
|
-
#
|
145
|
+
# ## Test Method & Test Fixture
|
141
146
|
#
|
142
147
|
# Obviously, these assertions have to be called within a context that
|
143
148
|
# knows about them and can do something meaningful with their
|
@@ -197,7 +202,7 @@ module Test # :nodoc:
|
|
197
202
|
# end
|
198
203
|
#
|
199
204
|
#
|
200
|
-
#
|
205
|
+
# ## Test Runners
|
201
206
|
#
|
202
207
|
# So, now you have this great test class, but you still
|
203
208
|
# need a way to run it and view any failures that occur
|
@@ -208,10 +213,10 @@ module Test # :nodoc:
|
|
208
213
|
# runner simply set default test runner ID to
|
209
214
|
# Test::Unit::AutoRunner:
|
210
215
|
#
|
211
|
-
#
|
212
|
-
#
|
216
|
+
# require 'test/unit'
|
217
|
+
# Test::Unit::AutoRunner.default_runner = "gtk2"
|
213
218
|
#
|
214
|
-
#
|
219
|
+
# ## Test Suite
|
215
220
|
#
|
216
221
|
# As more and more unit tests accumulate for a given project, it
|
217
222
|
# becomes a real drag running them one at a time, and it also
|
@@ -228,17 +233,17 @@ module Test # :nodoc:
|
|
228
233
|
# 'test/unit'. What does this mean? It means you could
|
229
234
|
# write the above test case like this instead:
|
230
235
|
#
|
231
|
-
#
|
232
|
-
#
|
233
|
-
#
|
234
|
-
#
|
236
|
+
# require 'test/unit'
|
237
|
+
# require 'test_myfirsttests'
|
238
|
+
# require 'test_moretestsbyme'
|
239
|
+
# require 'test_anothersetoftests'
|
235
240
|
#
|
236
241
|
# Test::Unit is smart enough to find all the test cases existing in
|
237
242
|
# the ObjectSpace and wrap them up into a suite for you. It then runs
|
238
243
|
# the dynamic suite using the console TestRunner.
|
239
244
|
#
|
240
245
|
#
|
241
|
-
#
|
246
|
+
# ## Configuration file
|
242
247
|
#
|
243
248
|
# Test::Unit reads 'test-unit.yml' in the current working
|
244
249
|
# directory as Test::Unit's configuration file. It can
|
@@ -254,53 +259,58 @@ module Test # :nodoc:
|
|
254
259
|
#
|
255
260
|
# Here are sample color scheme definitions:
|
256
261
|
#
|
257
|
-
#
|
258
|
-
#
|
259
|
-
#
|
260
|
-
#
|
261
|
-
#
|
262
|
-
#
|
263
|
-
#
|
264
|
-
#
|
265
|
-
#
|
266
|
-
#
|
262
|
+
# color_schemes:
|
263
|
+
# inverted:
|
264
|
+
# success:
|
265
|
+
# name: red
|
266
|
+
# bold: true
|
267
|
+
# failure:
|
268
|
+
# name: green
|
269
|
+
# bold: true
|
270
|
+
# other_scheme:
|
271
|
+
# ...
|
267
272
|
#
|
268
273
|
# Here are the syntax of color scheme definitions:
|
269
274
|
#
|
270
|
-
#
|
271
|
-
#
|
272
|
-
#
|
273
|
-
#
|
274
|
-
#
|
275
|
-
#
|
276
|
-
#
|
277
|
-
#
|
278
|
-
#
|
279
|
-
#
|
280
|
-
#
|
281
|
-
# SCHEME_NAME
|
282
|
-
#
|
283
|
-
#
|
284
|
-
#
|
285
|
-
#
|
286
|
-
#
|
275
|
+
# color_schemes:
|
276
|
+
# SCHEME_NAME:
|
277
|
+
# EVENT_NAME:
|
278
|
+
# name: COLOR_NAME
|
279
|
+
# intensity: BOOLEAN
|
280
|
+
# bold: BOOLEAN
|
281
|
+
# italic: BOOLEAN
|
282
|
+
# underline: BOOLEAN
|
283
|
+
# ...
|
284
|
+
# ...
|
285
|
+
#
|
286
|
+
# SCHEME_NAME
|
287
|
+
# : the name of the color scheme
|
288
|
+
#
|
289
|
+
# EVENT_NAME
|
290
|
+
# : one of [success, failure, pending, omission, notification, error]
|
291
|
+
#
|
292
|
+
# COLOR_NAME
|
293
|
+
# : one of [black, red, green, yellow, blue, magenta, cyan, white]
|
294
|
+
#
|
295
|
+
# BOOLEAN
|
296
|
+
# : true or false
|
287
297
|
#
|
288
298
|
# You can use the above 'inverted' color scheme with the
|
289
299
|
# following configuration:
|
290
300
|
#
|
291
|
-
#
|
292
|
-
#
|
293
|
-
#
|
294
|
-
#
|
295
|
-
#
|
296
|
-
#
|
297
|
-
#
|
298
|
-
#
|
299
|
-
#
|
300
|
-
#
|
301
|
-
#
|
301
|
+
# runner: console
|
302
|
+
# console_options:
|
303
|
+
# color_scheme: inverted
|
304
|
+
# color_schemes:
|
305
|
+
# inverted:
|
306
|
+
# success:
|
307
|
+
# name: red
|
308
|
+
# bold: true
|
309
|
+
# failure:
|
310
|
+
# name: green
|
311
|
+
# bold: true
|
302
312
|
#
|
303
|
-
#
|
313
|
+
# ## Questions?
|
304
314
|
#
|
305
315
|
# I'd really like to get feedback from all levels of Ruby
|
306
316
|
# practitioners about typos, grammatical errors, unclear statements,
|
@@ -331,51 +341,53 @@ module Test # :nodoc:
|
|
331
341
|
# To register multiple hooks, call this method multiple times.
|
332
342
|
#
|
333
343
|
# Here is an example test case:
|
334
|
-
# Test::Unit.at_start do
|
335
|
-
# # ...
|
336
|
-
# end
|
337
|
-
#
|
338
|
-
# class TestMyClass1 < Test::Unit::TestCase
|
339
|
-
# class << self
|
340
|
-
# def startup
|
341
|
-
# # ...
|
342
|
-
# end
|
343
|
-
# end
|
344
344
|
#
|
345
|
-
#
|
345
|
+
# Test::Unit.at_start do
|
346
346
|
# # ...
|
347
347
|
# end
|
348
348
|
#
|
349
|
-
#
|
350
|
-
#
|
351
|
-
#
|
349
|
+
# class TestMyClass1 < Test::Unit::TestCase
|
350
|
+
# class << self
|
351
|
+
# def startup
|
352
|
+
# # ...
|
353
|
+
# end
|
354
|
+
# end
|
352
355
|
#
|
353
|
-
#
|
354
|
-
#
|
355
|
-
#
|
356
|
-
# end
|
356
|
+
# def setup
|
357
|
+
# # ...
|
358
|
+
# end
|
357
359
|
#
|
358
|
-
#
|
359
|
-
# class << self
|
360
|
-
# def startup
|
360
|
+
# def test_my_class1
|
361
361
|
# # ...
|
362
362
|
# end
|
363
|
-
# end
|
364
363
|
#
|
365
|
-
#
|
366
|
-
#
|
364
|
+
# def test_my_class2
|
365
|
+
# # ...
|
366
|
+
# end
|
367
367
|
# end
|
368
368
|
#
|
369
|
-
#
|
370
|
-
#
|
371
|
-
#
|
369
|
+
# class TestMyClass2 < Test::Unit::TestCase
|
370
|
+
# class << self
|
371
|
+
# def startup
|
372
|
+
# # ...
|
373
|
+
# end
|
374
|
+
# end
|
372
375
|
#
|
373
|
-
#
|
374
|
-
#
|
376
|
+
# def setup
|
377
|
+
# # ...
|
378
|
+
# end
|
379
|
+
#
|
380
|
+
# def test_my_class1
|
381
|
+
# # ...
|
382
|
+
# end
|
383
|
+
#
|
384
|
+
# def test_my_class2
|
385
|
+
# # ...
|
386
|
+
# end
|
375
387
|
# end
|
376
|
-
# end
|
377
388
|
#
|
378
389
|
# Here is a call order:
|
390
|
+
#
|
379
391
|
# * at_start
|
380
392
|
# * TestMyClass1.startup
|
381
393
|
# * TestMyClass1#setup
|
@@ -415,51 +427,53 @@ module Test # :nodoc:
|
|
415
427
|
# To register multiple hooks, call this method multiple times.
|
416
428
|
#
|
417
429
|
# Here is an example test case:
|
418
|
-
# Test::Unit.at_exit do
|
419
|
-
# # ...
|
420
|
-
# end
|
421
|
-
#
|
422
|
-
# class TestMyClass1 < Test::Unit::TestCase
|
423
|
-
# class << self
|
424
|
-
# def shutdown
|
425
|
-
# # ...
|
426
|
-
# end
|
427
|
-
# end
|
428
430
|
#
|
429
|
-
#
|
431
|
+
# Test::Unit.at_exit do
|
430
432
|
# # ...
|
431
433
|
# end
|
432
434
|
#
|
433
|
-
#
|
434
|
-
#
|
435
|
-
#
|
435
|
+
# class TestMyClass1 < Test::Unit::TestCase
|
436
|
+
# class << self
|
437
|
+
# def shutdown
|
438
|
+
# # ...
|
439
|
+
# end
|
440
|
+
# end
|
436
441
|
#
|
437
|
-
#
|
438
|
-
#
|
439
|
-
#
|
440
|
-
# end
|
442
|
+
# def teardown
|
443
|
+
# # ...
|
444
|
+
# end
|
441
445
|
#
|
442
|
-
#
|
443
|
-
# class << self
|
444
|
-
# def shutdown
|
446
|
+
# def test_my_class1
|
445
447
|
# # ...
|
446
448
|
# end
|
447
|
-
# end
|
448
449
|
#
|
449
|
-
#
|
450
|
-
#
|
450
|
+
# def test_my_class2
|
451
|
+
# # ...
|
452
|
+
# end
|
451
453
|
# end
|
452
454
|
#
|
453
|
-
#
|
454
|
-
#
|
455
|
-
#
|
455
|
+
# class TestMyClass2 < Test::Unit::TestCase
|
456
|
+
# class << self
|
457
|
+
# def shutdown
|
458
|
+
# # ...
|
459
|
+
# end
|
460
|
+
# end
|
456
461
|
#
|
457
|
-
#
|
458
|
-
#
|
462
|
+
# def teardown
|
463
|
+
# # ...
|
464
|
+
# end
|
465
|
+
#
|
466
|
+
# def test_my_class1
|
467
|
+
# # ...
|
468
|
+
# end
|
469
|
+
#
|
470
|
+
# def test_my_class2
|
471
|
+
# # ...
|
472
|
+
# end
|
459
473
|
# end
|
460
|
-
# end
|
461
474
|
#
|
462
475
|
# Here is a call order:
|
476
|
+
#
|
463
477
|
# * TestMyClass1#test_my_class1
|
464
478
|
# * TestMyClass1#teardown
|
465
479
|
# * TestMyClass1#test_my_class2
|