test-unit 1.2.3 → 2.0.0

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.
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,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $VERBOSE = true
4
+
5
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
6
+ lib_dir = File.join(base_dir, "lib")
7
+ test_dir = File.join(base_dir, "test")
8
+
9
+ $LOAD_PATH.unshift(lib_dir)
10
+
11
+ require 'test/unit'
12
+
13
+ exit Test::Unit::AutoRunner.run(true, test_dir)
@@ -9,12 +9,11 @@ module Test
9
9
  class TC_Assertions < TestCase
10
10
  def check(value, message="")
11
11
  add_assertion
12
- if (!value)
13
- raise AssertionFailedError.new(message)
14
- end
12
+ raise AssertionFailedError.new(message) unless value
15
13
  end
16
14
 
17
- def check_assertions(expect_fail, expected_message="", return_value_expected=false)
15
+ def check_assertions(expect_fail, expected_message="",
16
+ return_value_expected=false)
18
17
  @actual_assertion_count = 0
19
18
  failed = true
20
19
  actual_message = nil
@@ -27,35 +26,65 @@ module Test
27
26
  actual_message = error.message
28
27
  end
29
28
  @catch_assertions = false
30
- check(expect_fail == failed, (expect_fail ? "Should have failed, but didn't" : "Should not have failed, but did with message\n<#{actual_message}>"))
31
- check(1 == @actual_assertion_count, "Should have made one assertion but made <#{@actual_assertion_count}>")
32
- if (expect_fail)
29
+
30
+ if expect_fail
31
+ message = "Should have failed, but didn't"
32
+ else
33
+ message = "Should not have failed, but did with message\n" +
34
+ "<#{actual_message}>"
35
+ end
36
+ check(expect_fail == failed, message)
37
+
38
+ message = "Should have made one assertion but made\n" +
39
+ "<#{@actual_assertion_count}>"
40
+ check(1 == @actual_assertion_count, message)
41
+
42
+ if expect_fail
33
43
  case expected_message
34
- when String
35
- check(actual_message == expected_message, "Should have the correct message.\n<#{expected_message.inspect}> expected but was\n<#{actual_message.inspect}>")
36
- when Regexp
37
- check(actual_message =~ expected_message, "The message should match correctly.\n</#{expected_message.source}/> expected to match\n<#{actual_message.inspect}>")
38
- else
39
- check(false, "Incorrect expected message type in assert_nothing_failed")
44
+ when String
45
+ check(actual_message == expected_message,
46
+ "Should have the correct message.\n" +
47
+ "<#{expected_message.inspect}> expected but was\n" +
48
+ "<#{actual_message.inspect}>")
49
+ when Regexp
50
+ check(actual_message =~ expected_message,
51
+ "The message should match correctly.\n" +
52
+ "</#{expected_message.source}/> expected to match\n" +
53
+ "<#{actual_message.inspect}>")
54
+ else
55
+ check(false,
56
+ "Incorrect expected message type in assert_nothing_failed")
40
57
  end
41
58
  else
42
- if (!return_value_expected)
43
- check(return_value.nil?, "Should not return a value but returned <#{return_value}>")
44
- else
59
+ if return_value_expected
45
60
  check(!return_value.nil?, "Should return a value")
61
+ else
62
+ check(return_value.nil?,
63
+ "Should not return a value but returned <#{return_value}>")
46
64
  end
47
65
  end
48
- return return_value
66
+
67
+ return_value
49
68
  end
50
-
69
+
51
70
  def check_nothing_fails(return_value_expected=false, &proc)
52
71
  check_assertions(false, "", return_value_expected, &proc)
53
72
  end
54
-
73
+
55
74
  def check_fails(expected_message="", &proc)
56
75
  check_assertions(true, expected_message, &proc)
57
76
  end
58
-
77
+
78
+ def inspect_tag(tag)
79
+ begin
80
+ throw tag
81
+ rescue NameError
82
+ tag.to_s.inspect
83
+ rescue ArgumentError
84
+ tag.inspect
85
+ end
86
+ end
87
+
59
88
  def test_assert_block
60
89
  check_nothing_fails {
61
90
  assert_block {true}
@@ -93,17 +122,87 @@ module Test
93
122
  check_nothing_fails {
94
123
  assert_equal("string1", "string1", "successful assert_equal")
95
124
  }
96
- check_fails(%Q{<"string1"> expected but was\n<"string2">.}) {
125
+
126
+ message = <<-EOM.chomp
127
+ <"string1"> expected but was
128
+ <"string2">.
129
+
130
+ diff:
131
+ - string1
132
+ ? ^
133
+ + string2
134
+ ? ^
135
+ EOM
136
+ check_fails(message) {
97
137
  assert_equal("string1", "string2")
98
138
  }
99
- check_fails(%Q{failed assert_equal.\n<"string1"> expected but was\n<"string2">.}) {
139
+
140
+ message = <<-EOM.chomp
141
+ failed assert_equal.
142
+ <"string1"> expected but was
143
+ <"string2">.
144
+
145
+ diff:
146
+ - string1
147
+ ? ^
148
+ + string2
149
+ ? ^
150
+ EOM
151
+ check_fails(message) {
100
152
  assert_equal("string1", "string2", "failed assert_equal")
101
153
  }
102
- check_fails(%Q{<"1"> expected but was\n<1>.}) do
103
- assert_equal("1", 1)
154
+
155
+ message = <<-EOM.chomp
156
+ <"111111"> expected but was
157
+ <111111>.
158
+
159
+ diff:
160
+ - "111111"
161
+ ? - -
162
+ + 111111
163
+ EOM
164
+ check_fails(message) do
165
+ assert_equal("111111", 111111)
104
166
  end
105
167
  end
106
-
168
+
169
+ def test_assert_equal_for_too_small_difference
170
+ message = <<-EOM.chomp
171
+ <1> expected but was
172
+ <2>.
173
+ EOM
174
+ check_fails(message) do
175
+ assert_equal(1, 2)
176
+ end
177
+ end
178
+
179
+ def test_assert_equal_for_same_inspected_objects
180
+ now = Time.now
181
+ now_without_usec = Time.at(now.to_i)
182
+ message = <<-EOM.chomp
183
+ <#{now.inspect}> expected but was
184
+ <#{now.inspect}>.
185
+ EOM
186
+ check_fails(message) do
187
+ assert_equal(now, now_without_usec)
188
+ end
189
+ end
190
+
191
+ def test_assert_equal_with_multi_lines_result
192
+ message = <<-EOM.chomp
193
+ <#{"a\nb".inspect}> expected but was
194
+ <#{"x".inspect}>.
195
+
196
+ diff:
197
+ + x
198
+ - a
199
+ - b
200
+ EOM
201
+ check_fails(message) do
202
+ assert_equal("a\nb", "x")
203
+ end
204
+ end
205
+
107
206
  def test_assert_raise
108
207
  return_value = nil
109
208
  check_nothing_fails(true) {
@@ -211,10 +310,10 @@ Message: <"Error">
211
310
  check_nothing_fails {
212
311
  assert_nil(nil, "successful assert_nil")
213
312
  }
214
- check_fails(%Q{<nil> expected but was\n<"string">.}) {
313
+ check_fails(%Q{<"string"> expected to be nil.}) {
215
314
  assert_nil("string")
216
315
  }
217
- check_fails(%Q{failed assert_nil.\n<nil> expected but was\n<"string">.}) {
316
+ check_fails(%Q{failed assert_nil.\n<"string"> expected to be nil.}) {
218
317
  assert_nil("string", "failed assert_nil")
219
318
  }
220
319
  end
@@ -398,34 +497,43 @@ Message: <"Error">
398
497
  end
399
498
 
400
499
  def test_assert_throws
401
- check_nothing_fails {
402
- assert_throws(:thing, "message") {
500
+ check_nothing_fails do
501
+ assert_throws(:thing, "message") do
403
502
  throw :thing
404
- }
405
- }
406
- check_fails("message.\n<:thing> expected to be thrown but\n<:thing2> was thrown.") {
407
- assert_throws(:thing, "message") {
503
+ end
504
+ end
505
+
506
+ tag = :thing2
507
+ check_fails("message.\n" +
508
+ "<:thing> expected to be thrown but\n" +
509
+ "<#{inspect_tag(tag)}> was thrown.") do
510
+ assert_throws(:thing, "message") do
408
511
  throw :thing2
409
- }
410
- }
411
- check_fails("message.\n<:thing> should have been thrown.") {
412
- assert_throws(:thing, "message") {
512
+ end
513
+ end
514
+ check_fails("message.\n" +
515
+ "<:thing> should have been thrown.") do
516
+ assert_throws(:thing, "message") do
413
517
  1 + 1
414
- }
415
- }
518
+ end
519
+ end
416
520
  end
417
521
 
418
522
  def test_assert_nothing_thrown
419
- check_nothing_fails {
420
- assert_nothing_thrown("message") {
523
+ check_nothing_fails do
524
+ assert_nothing_thrown("message") do
421
525
  1 + 1
422
- }
423
- }
424
- check_fails("message.\n<:thing> was thrown when nothing was expected.") {
425
- assert_nothing_thrown("message") {
426
- throw :thing
427
- }
428
- }
526
+ end
527
+ end
528
+
529
+ tag = :thing
530
+ inspected = inspect_tag(tag)
531
+ check_fails("message.\n" +
532
+ "<#{inspected}> was thrown when nothing was expected.") do
533
+ assert_nothing_thrown("message") do
534
+ throw tag
535
+ end
536
+ end
429
537
  end
430
538
 
431
539
  def test_assert_operator
@@ -505,22 +613,79 @@ Message: <"Error">
505
613
  @changed ||= false
506
614
  return (!@changed)
507
615
  end
508
- check_nothing_fails {
616
+ check_nothing_fails do
509
617
  assert_equal(object, object, "message")
510
- }
618
+ end
619
+ end
620
+
621
+ def test_assert_boolean
622
+ check_nothing_fails do
623
+ assert_boolean(true)
624
+ end
625
+ check_nothing_fails do
626
+ assert_boolean(false)
627
+ end
628
+
629
+ check_fails("<true> or <false> expected but was\n<1>") do
630
+ assert_boolean(1)
631
+ end
632
+
633
+ check_fails("<true> or <false> expected but was\n<nil>") do
634
+ assert_boolean(nil)
635
+ end
636
+
637
+ check_fails("message.\n<true> or <false> expected but was\n<\"XXX\">") do
638
+ assert_boolean("XXX", "message")
639
+ end
511
640
  end
512
-
641
+
642
+ def test_assert_true
643
+ check_nothing_fails do
644
+ assert_true(true)
645
+ end
646
+
647
+ check_fails("<true> expected but was\n<false>") do
648
+ assert_true(false)
649
+ end
650
+
651
+ check_fails("<true> expected but was\n<1>") do
652
+ assert_true(1)
653
+ end
654
+
655
+ check_fails("message.\n<true> expected but was\n<nil>") do
656
+ assert_true(nil, "message")
657
+ end
658
+ end
659
+
660
+ def test_assert_false
661
+ check_nothing_fails do
662
+ assert_false(false)
663
+ end
664
+
665
+ check_fails("<false> expected but was\n<true>") do
666
+ assert_false(true)
667
+ end
668
+
669
+ check_fails("<false> expected but was\n<nil>") do
670
+ assert_false(nil)
671
+ end
672
+
673
+ check_fails("message.\n<false> expected but was\n<:false>") do
674
+ assert_false(:false, "message")
675
+ end
676
+ end
677
+
513
678
  def add_failure(message, location=caller)
514
- if (!@catch_assertions)
679
+ unless @catch_assertions
515
680
  super
516
681
  end
517
682
  end
518
-
683
+
519
684
  def add_assertion
520
- if (!@catch_assertions)
521
- super
522
- else
685
+ if @catch_assertions
523
686
  @actual_assertion_count += 1
687
+ else
688
+ super
524
689
  end
525
690
  end
526
691
  end
@@ -0,0 +1,86 @@
1
+ class TestUnitAttribute < Test::Unit::TestCase
2
+ class TestStack < Test::Unit::TestCase
3
+ class << self
4
+ def suite
5
+ Test::Unit::TestSuite.new(name)
6
+ end
7
+ end
8
+
9
+ class Stack
10
+ def initialize
11
+ @data = []
12
+ end
13
+
14
+ def push(data)
15
+ @data.push(data)
16
+ end
17
+
18
+ def peek
19
+ @data[-2]
20
+ end
21
+
22
+ def empty?
23
+ @data.empty?
24
+ end
25
+
26
+ def size
27
+ @data.size + 11
28
+ end
29
+ end
30
+
31
+ def setup
32
+ @stack = Stack.new
33
+ end
34
+
35
+ attribute :category, :accessor
36
+ def test_peek
37
+ @stack.push(1)
38
+ @stack.push(2)
39
+ assert_equal(2, @stack.peek)
40
+ end
41
+
42
+ attribute :bug, 1234
43
+ def test_bug_1234
44
+ assert_equal(0, @stack.size)
45
+ end
46
+
47
+ def test_no_attributes
48
+ assert(@stack.empty?)
49
+ @stack.push(1)
50
+ assert(!@stack.empty?)
51
+ assert_equal(1, @stack.size)
52
+ end
53
+ end
54
+
55
+ def test_set_attributes
56
+ test_for_accessor_category = TestStack.new("test_peek")
57
+ assert_equal({"category" => :accessor},
58
+ test_for_accessor_category.attributes)
59
+
60
+ test_for_bug_1234 = TestStack.new("test_bug_1234")
61
+ assert_equal({"bug" => 1234}, test_for_bug_1234.attributes)
62
+
63
+ test_no_attributes = TestStack.new("test_no_attributes")
64
+ assert_equal({}, test_no_attributes.attributes)
65
+ end
66
+
67
+ def test_callback
68
+ changed_attributes = []
69
+ observer = Proc.new do |test_case, key, old_value, value, method_name|
70
+ changed_attributes << [test_case, key, old_value, value, method_name]
71
+ end
72
+
73
+ test_case = Class.new(TestStack) do
74
+ register_attribute_observer(:bug, &observer)
75
+ attribute("bug", 9876, "test_bug_1234")
76
+ attribute(:description, "Test for peek", "test_peek")
77
+ attribute(:bug, 29, "test_peek")
78
+ end
79
+
80
+ assert_equal([
81
+ [test_case, "bug", 1234, 9876, "test_bug_1234"],
82
+ [test_case, "bug", nil, 29, "test_peek"],
83
+ ],
84
+ changed_attributes)
85
+ end
86
+ end