test-unit 3.2.9 → 3.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/BSDL +24 -0
  3. data/COPYING +41 -44
  4. data/README.md +18 -11
  5. data/Rakefile +0 -23
  6. data/doc/text/getting-started.md +2 -2
  7. data/doc/text/news.md +329 -1
  8. data/lib/test/unit/assertion-failed-error.rb +35 -0
  9. data/lib/test/unit/assertions.rb +453 -161
  10. data/lib/test/unit/attribute.rb +3 -1
  11. data/lib/test/unit/autorunner.rb +78 -30
  12. data/lib/test/unit/code-snippet-fetcher.rb +7 -7
  13. data/lib/test/unit/collector/descendant.rb +1 -0
  14. data/lib/test/unit/collector/dir.rb +4 -2
  15. data/lib/test/unit/collector/load.rb +3 -3
  16. data/lib/test/unit/collector/objectspace.rb +1 -0
  17. data/lib/test/unit/collector.rb +31 -0
  18. data/lib/test/unit/color-scheme.rb +20 -2
  19. data/lib/test/unit/data-sets.rb +26 -15
  20. data/lib/test/unit/data.rb +5 -5
  21. data/lib/test/unit/diff.rb +2 -3
  22. data/lib/test/unit/fixture.rb +6 -0
  23. data/lib/test/unit/notification.rb +9 -7
  24. data/lib/test/unit/omission.rb +34 -31
  25. data/lib/test/unit/pending.rb +12 -11
  26. data/lib/test/unit/priority.rb +7 -5
  27. data/lib/test/unit/runner/console.rb +0 -17
  28. data/lib/test/unit/testcase.rb +222 -146
  29. data/lib/test/unit/testsuite.rb +1 -1
  30. data/lib/test/unit/ui/console/testrunner.rb +58 -49
  31. data/lib/test/unit/util/memory-usage.rb +47 -0
  32. data/lib/test/unit/util/observable.rb +2 -2
  33. data/lib/test/unit/util/output.rb +5 -4
  34. data/lib/test/unit/version.rb +1 -1
  35. data/lib/test/unit/warning.rb +3 -0
  36. data/lib/test/unit.rb +177 -161
  37. data/lib/test-unit.rb +2 -17
  38. metadata +14 -91
  39. data/GPL +0 -339
  40. data/LGPL +0 -502
  41. data/test/collector/test-descendant.rb +0 -182
  42. data/test/collector/test-load.rb +0 -442
  43. data/test/collector/test_dir.rb +0 -407
  44. data/test/collector/test_objectspace.rb +0 -102
  45. data/test/fixtures/header-label.csv +0 -3
  46. data/test/fixtures/header-label.tsv +0 -3
  47. data/test/fixtures/header.csv +0 -3
  48. data/test/fixtures/header.tsv +0 -3
  49. data/test/fixtures/no-header.csv +0 -2
  50. data/test/fixtures/no-header.tsv +0 -2
  51. data/test/fixtures/plus.csv +0 -3
  52. data/test/run-test.rb +0 -22
  53. data/test/test-assertions.rb +0 -2180
  54. data/test/test-attribute-matcher.rb +0 -38
  55. data/test/test-attribute.rb +0 -123
  56. data/test/test-code-snippet.rb +0 -37
  57. data/test/test-color-scheme.rb +0 -82
  58. data/test/test-color.rb +0 -47
  59. data/test/test-data.rb +0 -419
  60. data/test/test-diff.rb +0 -518
  61. data/test/test-emacs-runner.rb +0 -60
  62. data/test/test-error.rb +0 -26
  63. data/test/test-failure.rb +0 -33
  64. data/test/test-fault-location-detector.rb +0 -163
  65. data/test/test-fixture.rb +0 -713
  66. data/test/test-notification.rb +0 -33
  67. data/test/test-omission.rb +0 -81
  68. data/test/test-pending.rb +0 -70
  69. data/test/test-priority.rb +0 -173
  70. data/test/test-test-case.rb +0 -1279
  71. data/test/test-test-result.rb +0 -113
  72. data/test/test-test-suite-creator.rb +0 -97
  73. data/test/test-test-suite.rb +0 -151
  74. data/test/testunit-test-util.rb +0 -31
  75. data/test/ui/test_testrunmediator.rb +0 -20
  76. data/test/util/test-method-owner-finder.rb +0 -38
  77. data/test/util/test-output.rb +0 -11
  78. data/test/util/test_backtracefilter.rb +0 -52
  79. data/test/util/test_observable.rb +0 -102
  80. data/test/util/test_procwrapper.rb +0 -36
@@ -1,1279 +0,0 @@
1
- # Author:: Nathaniel Talbott.
2
- # Copyright:: Copyright (c) 2008-2014 Kouhei Sutou <kou@clear-code.com>
3
- # Copyright:: Copyright (c) 2011 Haruka Yoshihara <yoshihara@clear-code.com>
4
- # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott
5
- # License:: Ruby license.
6
-
7
- require 'test/unit'
8
-
9
- module Test
10
- module Unit
11
- class TestTestCase < TestCase
12
- self.test_order = :random
13
- def test_creation
14
- test_case = Class.new(TestCase) do
15
- def test_with_arguments(arg1, arg2)
16
- end
17
- end
18
-
19
- test = test_case.new(:test_with_arguments)
20
- check("Should have caught an invalid test when there are arguments",
21
- !test.valid?)
22
-
23
- test = test_case.new(:non_existent_test)
24
- check("Should have caught an invalid test when the method does not exist",
25
- !test.valid?)
26
- end
27
-
28
- def setup
29
- @tc_failure_error = Class.new(TestCase) do
30
- def test_failure
31
- assert_block("failure") do
32
- false
33
- end
34
- end
35
- def test_error
36
- 1 / 0
37
- end
38
- def test_nested_failure
39
- nested
40
- end
41
- def nested
42
- assert_block("nested") do
43
- false
44
- end
45
- end
46
- def return_passed?
47
- return passed?
48
- end
49
- end
50
-
51
- def @tc_failure_error.name
52
- "TC_FailureError"
53
- end
54
- end
55
-
56
- def jruby_backtrace_entry?(entry)
57
- entry.start_with?("org/jruby/")
58
- end
59
-
60
- def rubinius_backtrace_entry?(entry)
61
- entry.start_with?("kernel/")
62
- end
63
-
64
- def normalize_location(location)
65
- filtered_location = location.reject do |entry|
66
- jruby_backtrace_entry?(entry) or
67
- rubinius_backtrace_entry?(entry)
68
- end
69
- filtered_location.collect do |entry|
70
- entry.sub(/:\d+:/, ":0:")
71
- end
72
- end
73
-
74
- def test_add_failed_assertion
75
- test_case = @tc_failure_error.new(:test_failure)
76
- assert do
77
- test_case.passed?
78
- end
79
-
80
- result = TestResult.new
81
- faults = []
82
- result.add_listener(TestResult::FAULT) do |fault|
83
- faults << fault
84
- end
85
- progress = []
86
- test_case.run(result) do |*arguments|
87
- progress << arguments
88
- end
89
- fault_details = faults.collect do |fault|
90
- {
91
- :class => fault.class,
92
- :message => fault.message,
93
- :test_name => fault.test_name,
94
- :location => normalize_location(fault.location),
95
- }
96
- end
97
- assert_equal([
98
- {
99
- :class => Failure,
100
- :message => "failure",
101
- :test_name => "test_failure(TC_FailureError)",
102
- :location => [
103
- "#{__FILE__}:0:in `test_failure'",
104
- "#{__FILE__}:0:in `#{__method__}'",
105
- ],
106
- },
107
- ],
108
- fault_details)
109
-
110
- assert do
111
- not test_case.passed?
112
- end
113
- assert_equal([
114
- [TestCase::STARTED, test_case.name],
115
- [TestCase::STARTED_OBJECT, test_case],
116
- [TestCase::FINISHED, test_case.name],
117
- [TestCase::FINISHED_OBJECT, test_case],
118
- ],
119
- progress)
120
- end
121
-
122
- def test_add_failure_nested
123
- test_case = @tc_failure_error.new(:test_nested_failure)
124
- assert do
125
- test_case.passed?
126
- end
127
-
128
- result = TestResult.new
129
- faults = []
130
- result.add_listener(TestResult::FAULT) do |fault|
131
- faults << fault
132
- end
133
- test_case.run(result) do
134
- end
135
- fault_details = faults.collect do |fault|
136
- {
137
- :class => fault.class,
138
- :message => fault.message,
139
- :test_name => fault.test_name,
140
- :location => normalize_location(fault.location),
141
- }
142
- end
143
- assert_equal([
144
- {
145
- :class => Failure,
146
- :message => "nested",
147
- :test_name => "test_nested_failure(TC_FailureError)",
148
- :location => [
149
- "#{__FILE__}:0:in `nested'",
150
- "#{__FILE__}:0:in `test_nested_failure'",
151
- "#{__FILE__}:0:in `#{__method__}'",
152
- ],
153
- },
154
- ],
155
- fault_details)
156
-
157
- assert do
158
- not test_case.passed?
159
- end
160
- end
161
-
162
- def jruby?
163
- defined?(JRUBY_VERSION)
164
- end
165
-
166
- def rubinius?
167
- false # TODO
168
- end
169
-
170
- def cruby?
171
- (not jruby?) and (not rubinius?)
172
- end
173
-
174
- def test_add_error
175
- test_case = @tc_failure_error.new(:test_error)
176
- assert do
177
- test_case.passed?
178
- end
179
-
180
- result = TestResult.new
181
- faults = []
182
- result.add_listener(TestResult::FAULT) do |fault|
183
- faults << fault
184
- end
185
- test_case.run(result) do
186
- end
187
- fault_details = faults.collect do |fault|
188
- {
189
- :class => fault.class,
190
- :message => fault.message,
191
- :test_name => fault.test_name,
192
- :location => normalize_location(fault.location),
193
- }
194
- end
195
- location = []
196
- location << "#{__FILE__}:0:in `/'" if cruby?
197
- location << "#{__FILE__}:0:in `test_error'"
198
- location << "#{__FILE__}:0:in `#{__method__}'"
199
- assert_equal([
200
- {
201
- :class => Error,
202
- :message => "ZeroDivisionError: divided by 0",
203
- :test_name => "test_error(TC_FailureError)",
204
- :location => location,
205
- },
206
- ],
207
- fault_details)
208
-
209
- assert do
210
- not test_case.passed?
211
- end
212
- end
213
-
214
- def test_no_tests
215
- suite = TestCase.suite
216
- check("Should have a test suite", suite.instance_of?(TestSuite))
217
- check("Should have one test", suite.size == 1)
218
- check("Should have the default test", suite.tests.first.name == "default_test(Test::Unit::TestCase)")
219
-
220
- result = TestResult.new
221
- suite.run(result) {}
222
- check("Should have had one test run", result.run_count == 1)
223
- check("Should have had one test failure", result.failure_count == 1)
224
- check("Should have had no errors", result.error_count == 0)
225
- end
226
-
227
- def test_suite
228
- tc = Class.new(TestCase) do
229
- def test_succeed
230
- assert_block {true}
231
- end
232
- def test_fail
233
- assert_block {false}
234
- end
235
- def test_error
236
- 1/0
237
- end
238
- def dont_run
239
- assert_block {true}
240
- end
241
- def test_dont_run(argument)
242
- assert_block {true}
243
- end
244
- def test
245
- assert_block {true}
246
- end
247
- end
248
-
249
- suite = tc.suite
250
- check("Should have a test suite", suite.instance_of?(TestSuite))
251
- check("Should have three tests", suite.size == 3)
252
-
253
- result = TestResult.new
254
- suite.run(result) {}
255
- check("Should have had three test runs", result.run_count == 3)
256
- check("Should have had one test failure", result.failure_count == 1)
257
- check("Should have had one test error", result.error_count == 1)
258
- end
259
-
260
- def test_setup_teardown
261
- tc = Class.new(TestCase) do
262
- attr_reader(:setup_called, :teardown_called)
263
- def initialize(test)
264
- super(test)
265
- @setup_called = false
266
- @teardown_called = false
267
- end
268
- def setup
269
- @setup_called = true
270
- end
271
- def teardown
272
- @teardown_called = true
273
- end
274
- def test_succeed
275
- assert_block {true}
276
- end
277
- def test_fail
278
- assert_block {false}
279
- end
280
- def test_error
281
- raise "Error!"
282
- end
283
- end
284
- result = TestResult.new
285
-
286
- test = tc.new(:test_succeed)
287
- test.run(result) {}
288
- check("Should have called setup the correct number of times", test.setup_called)
289
- check("Should have called teardown the correct number of times", test.teardown_called)
290
-
291
- test = tc.new(:test_fail)
292
- test.run(result) {}
293
- check("Should have called setup the correct number of times", test.setup_called)
294
- check("Should have called teardown the correct number of times", test.teardown_called)
295
-
296
- test = tc.new(:test_error)
297
- test.run(result) {}
298
- check("Should have called setup the correct number of times", test.setup_called)
299
- check("Should have called teardown the correct number of times", test.teardown_called)
300
-
301
- check("Should have had two test runs", result.run_count == 3)
302
- check("Should have had a test failure", result.failure_count == 1)
303
- check("Should have had a test error", result.error_count == 1)
304
- end
305
-
306
- def test_assertion_failed_not_called
307
- tc = Class.new(TestCase) do
308
- def test_thing
309
- raise AssertionFailedError.new
310
- end
311
- end
312
-
313
- suite = tc.suite
314
- check("Should have one test", suite.size == 1)
315
- result = TestResult.new
316
- suite.run(result) {}
317
- check("Should have had one test run", result.run_count == 1)
318
- check("Should have had one assertion failure", result.failure_count == 1)
319
- check("Should not have any assertion errors but had #{result.error_count}", result.error_count == 0)
320
- end
321
-
322
- def test_equality
323
- tc1 = Class.new(TestCase) do
324
- def test_1
325
- end
326
- def test_2
327
- end
328
- end
329
-
330
- tc2 = Class.new(TestCase) do
331
- def test_1
332
- end
333
- end
334
-
335
- test1 = tc1.new('test_1')
336
- test2 = tc1.new('test_1')
337
- check("Should be equal", test1 == test2)
338
- check("Should be equal", test2 == test1)
339
-
340
- test1 = tc1.new('test_2')
341
- check("Should not be equal", test1 != test2)
342
- check("Should not be equal", test2 != test1)
343
-
344
- test2 = tc1.new('test_2')
345
- check("Should be equal", test1 == test2)
346
- check("Should be equal", test2 == test1)
347
-
348
- test1 = tc1.new('test_1')
349
- test2 = tc2.new('test_1')
350
- check("Should not be equal", test1 != test2)
351
- check("Should not be equal", test2 != test1)
352
-
353
- check("Should not be equal", test1 != Object.new)
354
- check("Should not be equal", Object.new != test1)
355
- end
356
-
357
- def test_re_raise_exception
358
- test_case = Class.new(TestCase) do
359
- def test_raise_interrupt
360
- raise Interrupt, "from test"
361
- end
362
- end
363
-
364
- test = test_case.new("test_raise_interrupt")
365
- begin
366
- test.run(TestResult.new) {}
367
- check("Should not be reached", false)
368
- rescue Exception
369
- check("Interrupt exception should be re-raised", $!.class == Interrupt)
370
- end
371
- end
372
-
373
- def test_timeout_error
374
- test_case = Class.new(TestCase) do
375
- def test_raise_timeout_error
376
- require "timeout"
377
- raise Timeout::Error
378
- end
379
- end
380
-
381
- test_suite = test_case.suite
382
- result = TestResult.new
383
- begin
384
- test_suite.run(result) {}
385
- check("Timeout::Error should be handled as error",
386
- result.error_count == 1)
387
- rescue Exception
388
- check("Timeout::Error should not be passed through: #{$!}", false)
389
- end
390
- end
391
-
392
- def test_interrupted
393
- test_case = Class.new(TestCase) do
394
- def test_fail
395
- flunk
396
- end
397
-
398
- def test_nothing
399
- end
400
- end
401
-
402
- failed_test = test_case.new(:test_fail)
403
- failed_test.run(TestResult.new) {}
404
- check("Should be interrupted", failed_test.interrupted?)
405
-
406
- success_test = test_case.new(:test_nothing)
407
- success_test.run(TestResult.new) {}
408
- check("Should not be interrupted", !success_test.interrupted?)
409
- end
410
-
411
- def test_inherited_test_should_be_ignored
412
- test_case = Class.new(TestCase) do
413
- def test_nothing
414
- end
415
- end
416
-
417
- sub_test_case = Class.new(test_case) do
418
- def test_fail
419
- flunk
420
- end
421
- end
422
-
423
- test = test_case.new("test_nothing")
424
- assert_predicate(test, :valid?)
425
-
426
- test = sub_test_case.new("test_fail")
427
- assert_predicate(test, :valid?)
428
-
429
- test = sub_test_case.new("test_nothing")
430
- assert_not_predicate(test, :valid?)
431
- end
432
-
433
- def test_mixin_test_should_not_be_ignored
434
- test_module = Module.new do
435
- def test_nothing
436
- end
437
- end
438
-
439
- test_case = Class.new(Test::Unit::TestCase) do
440
- include test_module
441
-
442
- def test_fail
443
- flunk
444
- end
445
- end
446
-
447
- assert_nothing_thrown do
448
- test_case.new("test_nothing")
449
- end
450
-
451
- assert_nothing_thrown do
452
- test_case.new("test_fail")
453
- end
454
- end
455
-
456
- def test_defined_order
457
- test_case = Class.new(Test::Unit::TestCase) do
458
- def test_z
459
- end
460
-
461
- def test_1
462
- end
463
-
464
- def test_a
465
- end
466
- end
467
-
468
- test_case.test_order = :defined
469
- assert_equal(["test_z", "test_1", "test_a"],
470
- test_case.suite.tests.collect {|test| test.method_name})
471
- end
472
-
473
- def test_declarative_style
474
- test_case = Class.new(Test::Unit::TestCase) do
475
- test "declarative style test definition" do
476
- end
477
-
478
- test "include parenthesis" do
479
- end
480
-
481
- test "1 + 2 = 3" do
482
- end
483
- end
484
-
485
- test_case.test_order = :defined
486
-
487
- assert_equal(["test: declarative style test definition",
488
- "test: include parenthesis",
489
- "test: 1 + 2 = 3"],
490
- test_case.suite.tests.collect {|test| test.method_name})
491
-
492
- assert_equal(["declarative style test definition",
493
- "include parenthesis",
494
- "1 + 2 = 3"],
495
- test_case.suite.tests.collect {|test| test.description})
496
- end
497
-
498
- def test_test_mark
499
- test_case = Class.new(Test::Unit::TestCase) do
500
- test
501
- def my_test_method
502
- end
503
- end
504
-
505
- test_case.test_order = :defined
506
-
507
- assert_equal(["my_test_method"],
508
- test_case.suite.tests.collect {|test| test.method_name})
509
- end
510
-
511
- def test_redefine_method
512
- test_case = Class.new(Test::Unit::TestCase) do
513
- self.test_order = :alphabetic
514
-
515
- def test_name
516
- end
517
- alias_method :test_name2, :test_name
518
-
519
- def test_name
520
- end
521
- end
522
-
523
- suite = test_case.suite
524
- assert_equal(["test_name", "test_name2"],
525
- suite.tests.collect {|test| test.method_name})
526
- result = TestResult.new
527
- suite.run(result) {}
528
- assert_equal("2 tests, 0 assertions, 0 failures, " +
529
- "0 errors, 0 pendings, 0 omissions, 1 notifications",
530
- result.summary)
531
- end
532
-
533
- def test_data_driven_test
534
- test_case = Class.new(TestCase) do
535
- def test_with_data(data)
536
- end
537
- end
538
-
539
- test = test_case.new("test_with_data")
540
- assert_not_predicate(test, :valid?)
541
- test.assign_test_data("label1", :test_data1)
542
- assert_predicate(test, :valid?)
543
- end
544
-
545
- def test_data_driven_test_without_parameter
546
- test_case = Class.new(TestCase) do
547
- data("label" => "value")
548
- def test_without_parameter
549
- assert_equal("value", data)
550
- end
551
- end
552
-
553
- suite = test_case.suite
554
- assert_equal(["test_without_parameter"],
555
- suite.tests.collect {|test| test.method_name})
556
- result = TestResult.new
557
- suite.run(result) {}
558
- assert_equal("1 tests, 1 assertions, 0 failures, " +
559
- "0 errors, 0 pendings, 0 omissions, 0 notifications",
560
- result.summary)
561
- end
562
-
563
- private
564
- def check(message, passed)
565
- add_assertion
566
- raise AssertionFailedError.new(message) unless passed
567
- end
568
-
569
- class TestTestDefined < self
570
- class TestNoQuery < self
571
- def test_no_test
572
- test_case = Class.new(TestCase) do
573
- end
574
- assert_false(test_case.test_defined?({}))
575
- end
576
-
577
- def test_have_def_style_test
578
- test_case = Class.new(TestCase) do
579
- def test_nothing
580
- end
581
- end
582
- assert_true(test_case.test_defined?({}))
583
- end
584
-
585
- def test_have_method_style_test
586
- test_case = Class.new(TestCase) do
587
- test "nothing" do
588
- end
589
- end
590
- assert_true(test_case.test_defined?({}))
591
- end
592
- end
593
-
594
- class TestPath < self
595
- class TestDefStyle < self
596
- def test_base_name
597
- test_case = Class.new(TestCase) do
598
- def test_nothing
599
- end
600
- end
601
- base_name = File.basename(__FILE__)
602
- assert_true(test_case.test_defined?(:path => base_name))
603
- end
604
-
605
- def test_absolute_path
606
- test_case = Class.new(TestCase) do
607
- def test_nothing
608
- end
609
- end
610
- assert_true(test_case.test_defined?(:path => __FILE__))
611
- end
612
-
613
- def test_not_match
614
- test_case = Class.new(TestCase) do
615
- def test_nothing
616
- end
617
- end
618
- assert_false(test_case.test_defined?(:path => "nonexistent.rb"))
619
- end
620
- end
621
-
622
- class TestMethodStyle < self
623
- def test_base_name
624
- test_case = Class.new(TestCase) do
625
- test "nothing" do
626
- end
627
- end
628
- base_name = File.basename(__FILE__)
629
- assert_true(test_case.test_defined?(:path => base_name))
630
- end
631
-
632
- def test_absolute_path
633
- test_case = Class.new(TestCase) do
634
- test "nothing" do
635
- end
636
- end
637
- assert_true(test_case.test_defined?(:path => __FILE__))
638
- end
639
-
640
- def test_not_match
641
- test_case = Class.new(TestCase) do
642
- test "nothing" do
643
- end
644
- end
645
- assert_false(test_case.test_defined?(:path => "nonexistent.rb"))
646
- end
647
- end
648
- end
649
-
650
- class TestLine < self
651
- class TestDefStyle < self
652
- def test_before
653
- line_before = nil
654
- test_case = Class.new(TestCase) do
655
- line_before = __LINE__
656
- def test_nothing
657
- end
658
- end
659
- assert_false(test_case.test_defined?(:line => line_before))
660
- end
661
-
662
- def test_def
663
- line_def = nil
664
- test_case = Class.new(TestCase) do
665
- line_def = __LINE__; def test_nothing
666
- end
667
- end
668
- assert_true(test_case.test_defined?(:line => line_def))
669
- end
670
-
671
- def test_after
672
- line_after = nil
673
- test_case = Class.new(TestCase) do
674
- def test_nothing
675
- end
676
- line_after = __LINE__
677
- end
678
- assert_true(test_case.test_defined?(:line => line_after))
679
- end
680
-
681
- def test_child
682
- child_test_case = nil
683
- line_child = nil
684
- parent_test_case = Class.new(TestCase) do
685
- test "parent" do
686
- end
687
-
688
- child_test_case = Class.new(self) do
689
- line_child = __LINE__; test "child" do
690
- end
691
- end
692
- end
693
- assert_equal([
694
- false,
695
- true,
696
- ],
697
- [
698
- parent_test_case.test_defined?(:line => line_child),
699
- child_test_case.test_defined?(:line => line_child),
700
- ])
701
- end
702
- end
703
-
704
- class TestMethodStyle < self
705
- def test_before
706
- line_before = nil
707
- test_case = Class.new(TestCase) do
708
- line_before = __LINE__
709
- test "nothing" do
710
- end
711
- end
712
- assert_false(test_case.test_defined?(:line => line_before))
713
- end
714
-
715
- def test_method
716
- line_method = nil
717
- test_case = Class.new(TestCase) do
718
- line_method = __LINE__; test "nothing" do
719
- end
720
- end
721
- assert_true(test_case.test_defined?(:line => line_method))
722
- end
723
-
724
- def test_after
725
- line_after = nil
726
- test_case = Class.new(TestCase) do
727
- test "nothing" do
728
- end
729
- line_after = __LINE__
730
- end
731
- assert_true(test_case.test_defined?(:line => line_after))
732
- end
733
-
734
- def test_child
735
- child_test_case = nil
736
- line_child = nil
737
- parent_test_case = Class.new(TestCase) do
738
- test "parent" do
739
- end
740
-
741
- child_test_case = Class.new(self) do
742
- line_child = __LINE__; test "child" do
743
- end
744
- end
745
- end
746
- assert_equal([
747
- false,
748
- true,
749
- ],
750
- [
751
- parent_test_case.test_defined?(:line => line_child),
752
- child_test_case.test_defined?(:line => line_child),
753
- ])
754
- end
755
-
756
- def test_with_setup
757
- line = nil
758
- test_case = Class.new(TestCase) do
759
- setup do
760
- end
761
-
762
- line = __LINE__; test "with setup" do
763
- end
764
- end
765
- assert do
766
- test_case.test_defined?(:line => line,
767
- :method_name => "test: with setup")
768
- end
769
- end
770
- end
771
- end
772
-
773
- class TestMethodName < self
774
- class TestDefStyle < self
775
- def test_match
776
- test_case = Class.new(TestCase) do
777
- def test_nothing
778
- end
779
- end
780
- query = {:method_name => "test_nothing"}
781
- assert_true(test_case.test_defined?(query))
782
- end
783
-
784
- def test_not_match
785
- test_case = Class.new(TestCase) do
786
- def test_nothing
787
- end
788
- end
789
- query = {:method_name => "test_nonexistent"}
790
- assert_false(test_case.test_defined?(query))
791
- end
792
- end
793
-
794
- class TestMethodStyle < self
795
- def test_match
796
- test_case = Class.new(TestCase) do
797
- test "nothing" do
798
- end
799
- end
800
- query = {:method_name => "test: nothing"}
801
- assert_true(test_case.test_defined?(query))
802
- end
803
-
804
- def test_not_match
805
- test_case = Class.new(TestCase) do
806
- test "nothing" do
807
- end
808
- end
809
- query = {:method_name => "test: nonexistent"}
810
- assert_false(test_case.test_defined?(query))
811
- end
812
- end
813
- end
814
-
815
- class TestCombine < self
816
- class TestDefStyle < self
817
- def test_line_middle
818
- line_middle = nil
819
- test_case = Class.new(TestCase) do
820
- def test_before
821
- end
822
- line_middle = __LINE__
823
- def test_after
824
- end
825
- end
826
- query = {
827
- :path => __FILE__,
828
- :line => line_middle,
829
- :method_name => "test_before",
830
- }
831
- assert_true(test_case.test_defined?(query))
832
- end
833
-
834
- def test_line_after_def
835
- line_after_def = nil
836
- test_case = Class.new(TestCase) do
837
- def test_before
838
- end
839
-
840
- line_after_def = __LINE__; def test_after
841
- end
842
- end
843
- query = {
844
- :path => __FILE__,
845
- :line => line_after_def,
846
- :method_name => "test_before",
847
- }
848
- assert_false(test_case.test_defined?(query))
849
- end
850
- end
851
-
852
- class TestMethodStyle < self
853
- def test_line_middle
854
- line_middle = nil
855
- test_case = Class.new(TestCase) do
856
- test "before" do
857
- end
858
- line_middle = __LINE__
859
- test "after" do
860
- end
861
- end
862
- query = {
863
- :path => __FILE__,
864
- :line => line_middle,
865
- :method_name => "test: before",
866
- }
867
- assert_true(test_case.test_defined?(query))
868
- end
869
-
870
- def test_line_after_method
871
- line_after_method = nil
872
- test_case = Class.new(TestCase) do
873
- test "before" do
874
- end
875
-
876
- line_after_method = __LINE__; test "after" do
877
- end
878
- end
879
- query = {
880
- :path => __FILE__,
881
- :line => line_after_method,
882
- :method_name => "test: before",
883
- }
884
- assert_false(test_case.test_defined?(query))
885
- end
886
- end
887
- end
888
- end
889
-
890
- class TestSubTestCase < self
891
- class TestName < self
892
- def test_anonymous
893
- test_case = Class.new(TestCase)
894
- sub_test_case = test_case.sub_test_case("sub test case") do
895
- end
896
- assert_equal("sub test case", sub_test_case.name)
897
- end
898
-
899
- def test_named
900
- test_case = Class.new(TestCase)
901
- def test_case.name
902
- "ParentTestCase"
903
- end
904
- sub_test_case = test_case.sub_test_case("sub test case") do
905
- end
906
- assert_equal("ParentTestCase::sub test case", sub_test_case.name)
907
- end
908
- end
909
-
910
- def test_suite
911
- test_case = Class.new(TestCase)
912
- sub_test_case = test_case.sub_test_case("sub test case") do
913
- def test_nothing
914
- end
915
- end
916
- test_method_names = sub_test_case.suite.tests.collect do |test|
917
- test.method_name
918
- end
919
- assert_equal(["test_nothing"], test_method_names)
920
- end
921
-
922
- def test_duplicated_name
923
- test_case = Class.new(TestCase) do
924
- def test_nothing
925
- end
926
- end
927
- sub_test_case = test_case.sub_test_case("sub test case") do
928
- def test_nothing
929
- end
930
- end
931
-
932
- test_method_names = test_case.suite.tests.collect do |test|
933
- test.method_name
934
- end
935
- sub_test_method_names = sub_test_case.suite.tests.collect do |test|
936
- test.method_name
937
- end
938
-
939
- assert_equal([
940
- ["test_nothing"],
941
- ["test_nothing"],
942
- ],
943
- [
944
- test_method_names,
945
- sub_test_method_names,
946
- ])
947
- end
948
- end
949
-
950
- class TestStartupShutdown < self
951
- class TestOrder < self
952
- module CallLogger
953
- def called
954
- @@called ||= []
955
- end
956
- end
957
-
958
- def call_order(test_case)
959
- test_case.called.clear
960
- test_suite = test_case.suite
961
- test_suite.run(TestResult.new) {}
962
- test_case.called
963
- end
964
-
965
- class TestNoInheritance < self
966
- def setup
967
- @test_case = Class.new(TestCase) do
968
- extend CallLogger
969
-
970
- class << self
971
- def startup
972
- called << :startup
973
- end
974
-
975
- def shutdown
976
- called << :shutdown
977
- end
978
- end
979
-
980
- def setup
981
- self.class.called << :setup
982
- end
983
-
984
- def teardown
985
- self.class.called << :teardown
986
- end
987
-
988
- def test1
989
- end
990
-
991
- def test2
992
- end
993
- end
994
- end
995
-
996
- def test_call_order
997
- assert_equal([
998
- :startup,
999
- :setup, :teardown,
1000
- :setup, :teardown,
1001
- :shutdown,
1002
- ],
1003
- call_order(@test_case))
1004
- end
1005
- end
1006
-
1007
- class TestInheritance < self
1008
- def setup
1009
- @original_descendants = TestCase::DESCENDANTS.dup
1010
- TestCase::DESCENDANTS.clear
1011
-
1012
- @parent_test_case = Class.new(TestCase) do
1013
- extend CallLogger
1014
-
1015
- self.test_order = :alphabetic
1016
-
1017
- class << self
1018
- def startup
1019
- called << :startup_parent
1020
- end
1021
-
1022
- def shutdown
1023
- called << :shutdown_parent
1024
- end
1025
- end
1026
-
1027
- def setup
1028
- self.class.called << :setup_parent
1029
- end
1030
-
1031
- def teardown
1032
- self.class.called << :teardown_parent
1033
- end
1034
-
1035
- def test1_parent
1036
- self.class.called << :test1_parent
1037
- end
1038
-
1039
- def test2_parent
1040
- self.class.called << :test2_parent
1041
- end
1042
- end
1043
-
1044
- @child_test_case = Class.new(@parent_test_case) do
1045
- class << self
1046
- def startup
1047
- called << :startup_child
1048
- end
1049
-
1050
- def shutdown
1051
- called << :shutdown_child
1052
- end
1053
- end
1054
-
1055
- def setup
1056
- self.class.called << :setup_child
1057
- end
1058
-
1059
- def teardown
1060
- self.class.called << :teardown_child
1061
- end
1062
-
1063
- def test1_child
1064
- self.class.called << :test1_child
1065
- end
1066
-
1067
- def test2_child
1068
- self.class.called << :test2_child
1069
- end
1070
- end
1071
- end
1072
-
1073
- def teardown
1074
- TestCase::DESCENDANTS.replace(@original_descendants)
1075
- end
1076
-
1077
- def test_call_order
1078
- collector = Collector::Descendant.new
1079
- test_suite = collector.collect
1080
- test_suite.run(TestResult.new) {}
1081
- called = @parent_test_case.called
1082
- assert_equal([
1083
- :startup_parent,
1084
- :setup_parent, :test1_parent, :teardown_parent,
1085
- :setup_parent, :test2_parent, :teardown_parent,
1086
- :startup_child,
1087
- :setup_child, :test1_child, :teardown_child,
1088
- :setup_child, :test2_child, :teardown_child,
1089
- :shutdown_child,
1090
- :shutdown_parent,
1091
- ],
1092
- called)
1093
- end
1094
- end
1095
- end
1096
-
1097
- class TestError < self
1098
- def run_test_case(test_case)
1099
- test_suite = test_case.suite
1100
- result = TestResult.new
1101
- test_suite.run(result) {}
1102
- result
1103
- end
1104
-
1105
- def error_count(test_case)
1106
- run_test_case(test_case).error_count
1107
- end
1108
-
1109
- def test_on_startup
1110
- test_case = Class.new(TestCase) do
1111
- class << self
1112
- def startup
1113
- raise "from startup"
1114
- end
1115
- end
1116
-
1117
- def test_nothing
1118
- end
1119
- end
1120
-
1121
- assert_equal(1, error_count(test_case))
1122
- end
1123
-
1124
- def test_pass_through_on_startup
1125
- test_case = Class.new(TestCase) do
1126
- class << self
1127
- def startup
1128
- raise Interrupt, "from startup"
1129
- end
1130
- end
1131
-
1132
- def test_nothing
1133
- end
1134
- end
1135
-
1136
- assert_raise(Interrupt) do
1137
- run_test_case(test_case)
1138
- end
1139
- end
1140
-
1141
- def test_on_shutdown
1142
- test_case = Class.new(TestCase) do
1143
- class << self
1144
- def shutdown
1145
- raise "from shutdown"
1146
- end
1147
- end
1148
-
1149
- def test_nothing
1150
- end
1151
- end
1152
-
1153
- assert_equal(1, error_count(test_case))
1154
- end
1155
-
1156
- def test_pass_through_on_shutdown
1157
- test_case = Class.new(TestCase) do
1158
- class << self
1159
- def shutdown
1160
- raise Interrupt, "from shutdown"
1161
- end
1162
- end
1163
-
1164
- def test_nothing
1165
- end
1166
- end
1167
-
1168
- assert_raise(Interrupt) do
1169
- run_test_case(test_case)
1170
- end
1171
- end
1172
-
1173
- def test_pass_through_in_test
1174
- test_case = Class.new(TestCase) do
1175
- @called = []
1176
- class << self
1177
- def called
1178
- @called
1179
- end
1180
-
1181
- def startup
1182
- @called << :startup
1183
- end
1184
-
1185
- def shutdown
1186
- @called << :shutdown
1187
- end
1188
- end
1189
-
1190
- def test_error
1191
- raise Interrupt, "from test"
1192
- end
1193
- end
1194
-
1195
- assert_raise(Interrupt) do
1196
- run_test_case(test_case)
1197
- end
1198
- assert_equal([:startup, :shutdown],
1199
- test_case.called)
1200
- end
1201
-
1202
- class TestName < self
1203
- def test_no_data
1204
- test_case = Class.new(TestCase) do
1205
- class << self
1206
- def name
1207
- "TestCase"
1208
- end
1209
- end
1210
-
1211
- def test_nothing
1212
- end
1213
- end
1214
-
1215
- test = test_case.new("test_nothing")
1216
- assert_equal("test_nothing(TestCase)",
1217
- test.name)
1218
- end
1219
-
1220
- def test_data
1221
- test_case = Class.new(TestCase) do
1222
- class << self
1223
- def name
1224
- "TestCase"
1225
- end
1226
- end
1227
-
1228
- def test_nothing
1229
- end
1230
- end
1231
-
1232
- test = test_case.new("test_nothing")
1233
- test.assign_test_data("(nil)", nil)
1234
- assert_equal("test_nothing[(nil)](TestCase)",
1235
- test.name)
1236
- end
1237
- end
1238
-
1239
- class TestLocalName < self
1240
- def test_no_data
1241
- test_case = Class.new(TestCase) do
1242
- class << self
1243
- def name
1244
- "TestCase"
1245
- end
1246
- end
1247
-
1248
- def test_nothing
1249
- end
1250
- end
1251
-
1252
- test = test_case.new("test_nothing")
1253
- assert_equal("test_nothing",
1254
- test.local_name)
1255
- end
1256
-
1257
- def test_data
1258
- test_case = Class.new(TestCase) do
1259
- class << self
1260
- def name
1261
- "TestCase"
1262
- end
1263
- end
1264
-
1265
- def test_nothing
1266
- end
1267
- end
1268
-
1269
- test = test_case.new("test_nothing")
1270
- test.assign_test_data("(nil)", nil)
1271
- assert_equal("test_nothing[(nil)]",
1272
- test.local_name)
1273
- end
1274
- end
1275
- end
1276
- end
1277
- end
1278
- end
1279
- end