activesambaldap 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. data/NEWS.en +6 -1
  2. data/NEWS.ja +6 -1
  3. data/README.en +3 -2
  4. data/README.ja +3 -2
  5. data/Rakefile +21 -2
  6. data/bin/asl-groupadd +0 -0
  7. data/bin/asl-groupadd.help +15 -0
  8. data/bin/asl-groupdel +0 -0
  9. data/bin/asl-groupdel.help +12 -0
  10. data/bin/asl-groupmod +0 -0
  11. data/bin/asl-groupmod.help +18 -0
  12. data/bin/asl-groupshow +0 -0
  13. data/bin/asl-groupshow.help +10 -0
  14. data/bin/asl-passwd +0 -0
  15. data/bin/asl-passwd.help +14 -0
  16. data/bin/asl-populate +0 -0
  17. data/bin/asl-populate.help +27 -0
  18. data/bin/asl-purge +0 -0
  19. data/bin/asl-purge.help +10 -0
  20. data/bin/asl-samba-computeradd +0 -0
  21. data/bin/asl-samba-computeradd.help +12 -0
  22. data/bin/asl-samba-groupadd +0 -0
  23. data/bin/asl-samba-groupadd.help +10 -0
  24. data/bin/asl-samba-groupdel +0 -0
  25. data/bin/asl-samba-groupdel.help +10 -0
  26. data/bin/asl-samba-groupmod +0 -0
  27. data/bin/asl-samba-groupmod.help +14 -0
  28. data/bin/asl-samba-useradd +0 -0
  29. data/bin/asl-samba-useradd.help +12 -0
  30. data/bin/asl-samba-userdel +0 -0
  31. data/bin/asl-samba-userdel.help +10 -0
  32. data/bin/asl-samba-usermod +0 -0
  33. data/bin/asl-samba-usermod.help +14 -0
  34. data/bin/asl-useradd +0 -0
  35. data/bin/asl-useradd.help +47 -0
  36. data/bin/asl-userdel +0 -0
  37. data/bin/asl-userdel.help +17 -0
  38. data/bin/asl-usermod +0 -0
  39. data/bin/asl-usermod.help +45 -0
  40. data/bin/asl-usershow +0 -0
  41. data/bin/asl-usershow.help +10 -0
  42. data/lib/active_samba_ldap.rb +9 -3
  43. data/lib/active_samba_ldap/account_entry.rb +1 -1
  44. data/lib/active_samba_ldap/group_entry.rb +3 -5
  45. data/lib/active_samba_ldap/reloadable.rb +2 -0
  46. data/lib/active_samba_ldap/samba_group_entry.rb +1 -1
  47. data/lib/active_samba_ldap/version.rb +1 -1
  48. data/misc/rd2html.rb +1 -1
  49. data/rails/plugin/active_samba_ldap/init.rb +15 -0
  50. data/test-unit/History.txt +32 -0
  51. data/test-unit/README.txt +32 -0
  52. data/test-unit/Rakefile +22 -0
  53. data/test-unit/bin/testrb +5 -0
  54. data/test-unit/lib/test/unit.rb +280 -0
  55. data/test-unit/lib/test/unit/assertionfailederror.rb +14 -0
  56. data/test-unit/lib/test/unit/assertions.rb +722 -0
  57. data/test-unit/lib/test/unit/attribute.rb +125 -0
  58. data/test-unit/lib/test/unit/autorunner.rb +250 -0
  59. data/test-unit/lib/test/unit/collector.rb +43 -0
  60. data/test-unit/lib/test/unit/collector/descendant.rb +23 -0
  61. data/test-unit/lib/test/unit/collector/dir.rb +108 -0
  62. data/test-unit/lib/test/unit/collector/load.rb +135 -0
  63. data/test-unit/lib/test/unit/collector/objectspace.rb +34 -0
  64. data/test-unit/lib/test/unit/color.rb +61 -0
  65. data/test-unit/lib/test/unit/diff.rb +524 -0
  66. data/test-unit/lib/test/unit/error.rb +124 -0
  67. data/test-unit/lib/test/unit/exceptionhandler.rb +39 -0
  68. data/test-unit/lib/test/unit/failure.rb +110 -0
  69. data/test-unit/lib/test/unit/fixture.rb +185 -0
  70. data/test-unit/lib/test/unit/notification.rb +116 -0
  71. data/test-unit/lib/test/unit/omission.rb +129 -0
  72. data/test-unit/lib/test/unit/pending.rb +130 -0
  73. data/test-unit/lib/test/unit/priority.rb +146 -0
  74. data/test-unit/lib/test/unit/runner/console.rb +46 -0
  75. data/test-unit/lib/test/unit/runner/emacs.rb +8 -0
  76. data/test-unit/lib/test/unit/testcase.rb +174 -0
  77. data/test-unit/lib/test/unit/testresult.rb +89 -0
  78. data/test-unit/lib/test/unit/testsuite.rb +110 -0
  79. data/test-unit/lib/test/unit/ui/console/outputlevel.rb +14 -0
  80. data/test-unit/lib/test/unit/ui/console/testrunner.rb +195 -0
  81. data/test-unit/lib/test/unit/ui/emacs/testrunner.rb +49 -0
  82. data/test-unit/lib/test/unit/ui/testrunner.rb +20 -0
  83. data/test-unit/lib/test/unit/ui/testrunnermediator.rb +77 -0
  84. data/test-unit/lib/test/unit/ui/testrunnerutilities.rb +41 -0
  85. data/test-unit/lib/test/unit/util/backtracefilter.rb +41 -0
  86. data/test-unit/lib/test/unit/util/observable.rb +90 -0
  87. data/test-unit/lib/test/unit/util/procwrapper.rb +48 -0
  88. data/test-unit/lib/test/unit/version.rb +7 -0
  89. data/test-unit/sample/adder.rb +13 -0
  90. data/test-unit/sample/subtracter.rb +12 -0
  91. data/test-unit/sample/tc_adder.rb +18 -0
  92. data/test-unit/sample/tc_subtracter.rb +18 -0
  93. data/test-unit/sample/ts_examples.rb +7 -0
  94. data/test-unit/test/collector/test_descendant.rb +135 -0
  95. data/test-unit/test/collector/test_dir.rb +406 -0
  96. data/test-unit/test/collector/test_load.rb +333 -0
  97. data/test-unit/test/collector/test_objectspace.rb +98 -0
  98. data/test-unit/test/run-test.rb +13 -0
  99. data/test-unit/test/test_assertions.rb +693 -0
  100. data/test-unit/test/test_attribute.rb +86 -0
  101. data/test-unit/test/test_color.rb +37 -0
  102. data/test-unit/test/test_diff.rb +477 -0
  103. data/test-unit/test/test_emacs_runner.rb +60 -0
  104. data/test-unit/test/test_error.rb +26 -0
  105. data/test-unit/test/test_failure.rb +33 -0
  106. data/test-unit/test/test_fixture.rb +275 -0
  107. data/test-unit/test/test_notification.rb +33 -0
  108. data/test-unit/test/test_omission.rb +81 -0
  109. data/test-unit/test/test_pending.rb +64 -0
  110. data/test-unit/test/test_priority.rb +89 -0
  111. data/test-unit/test/test_testcase.rb +411 -0
  112. data/test-unit/test/test_testresult.rb +113 -0
  113. data/test-unit/test/test_testsuite.rb +129 -0
  114. data/test-unit/test/testunit_test_util.rb +12 -0
  115. data/test-unit/test/ui/test_testrunmediator.rb +20 -0
  116. data/test-unit/test/util/test_backtracefilter.rb +41 -0
  117. data/test-unit/test/util/test_observable.rb +102 -0
  118. data/test-unit/test/util/test_procwrapper.rb +36 -0
  119. data/test/asl-test-utils.rb +0 -1
  120. data/test/run-test.rb +8 -12
  121. data/test/test_asl_groupmod.rb +3 -1
  122. data/test/test_asl_useradd.rb +3 -3
  123. data/test/test_samba_encrypt.rb +0 -1
  124. metadata +225 -88
  125. data/po/active-samba-ldap.pot +0 -459
  126. data/test/test-unit-ext.rb +0 -4
  127. data/test/test-unit-ext/always-show-result.rb +0 -28
  128. data/test/test-unit-ext/backtrace-filter.rb +0 -17
  129. data/test/test-unit-ext/long-display-for-emacs.rb +0 -25
  130. data/test/test-unit-ext/priority.rb +0 -186
@@ -0,0 +1,64 @@
1
+ require 'test/unit'
2
+ require 'testunit_test_util'
3
+
4
+ class TestUnitPending < Test::Unit::TestCase
5
+ include TestUnitTestUtil
6
+
7
+ class TestCase < Test::Unit::TestCase
8
+ class << self
9
+ def suite
10
+ Test::Unit::TestSuite.new(name)
11
+ end
12
+ end
13
+
14
+ def test_pend
15
+ pend("1st pend")
16
+ pend("2nd pend. Should not be reached here.")
17
+ assert(true, "Should not be reached here too.")
18
+ end
19
+
20
+ def test_pend_with_failure_in_block
21
+ pend("Wait a minute") do
22
+ raise "Not implemented yet"
23
+ end
24
+ assert(true, "Reached here.")
25
+ end
26
+
27
+ def test_pend_with_no_failure_in_block
28
+ pend("Wait a minute") do
29
+ "Nothing raised"
30
+ end
31
+ assert(true, "Not reached here.")
32
+ end
33
+ end
34
+
35
+ def test_pend
36
+ result = run_test("test_pend")
37
+ assert_equal("1 tests, 0 assertions, 0 failures, 0 errors, 1 pendings, " \
38
+ "0 omissions, 0 notifications",
39
+ result.to_s)
40
+ assert_fault_messages(["1st pend"], result.pendings)
41
+ end
42
+
43
+ def test_pend_with_failure_in_block
44
+ result = run_test("test_pend_with_failure_in_block")
45
+ assert_equal("1 tests, 1 assertions, 0 failures, 0 errors, 1 pendings, " \
46
+ "0 omissions, 0 notifications",
47
+ result.to_s)
48
+ assert_fault_messages(["Wait a minute"], result.pendings)
49
+ end
50
+
51
+ def test_pend_with_no_failure_in_block
52
+ result = run_test("test_pend_with_no_failure_in_block")
53
+ assert_equal("1 tests, 1 assertions, 1 failures, 0 errors, 0 pendings, " \
54
+ "0 omissions, 0 notifications",
55
+ result.to_s)
56
+ assert_fault_messages(["Pending block should not be passed: Wait a minute."],
57
+ result.failures)
58
+ end
59
+
60
+ private
61
+ def run_test(name)
62
+ super(TestCase, name)
63
+ end
64
+ end
@@ -0,0 +1,89 @@
1
+ require 'test/unit'
2
+
3
+ class TestUnitPriority < Test::Unit::TestCase
4
+ class TestCase < Test::Unit::TestCase
5
+ class << self
6
+ def suite
7
+ Test::Unit::TestSuite.new(name)
8
+ end
9
+ end
10
+
11
+ priority :must
12
+ def test_must
13
+ assert(true)
14
+ end
15
+
16
+ def test_must_inherited
17
+ assert(true)
18
+ end
19
+
20
+ priority :important
21
+ def test_important
22
+ assert(true)
23
+ end
24
+
25
+ def test_important_inherited
26
+ assert(true)
27
+ end
28
+
29
+ priority :high
30
+ def test_high
31
+ assert(true)
32
+ end
33
+
34
+ def test_high_inherited
35
+ assert(true)
36
+ end
37
+
38
+ priority :normal
39
+ def test_normal
40
+ assert(true)
41
+ end
42
+
43
+ def test_normal_inherited
44
+ assert(true)
45
+ end
46
+
47
+ priority :low
48
+ def test_low
49
+ assert(true)
50
+ end
51
+
52
+ def test_low_inherited
53
+ assert(true)
54
+ end
55
+
56
+ priority :never
57
+ def test_never
58
+ assert(true)
59
+ end
60
+
61
+ def test_never_inherited
62
+ assert(true)
63
+ end
64
+ end
65
+
66
+ def test_priority
67
+ assert_priority("must", 1.0, 0.0001)
68
+ assert_priority("important", 0.9, 0.09)
69
+ assert_priority("high", 0.70, 0.1)
70
+ assert_priority("normal", 0.5, 0.1)
71
+ assert_priority("low", 0.25, 0.1)
72
+ assert_priority("never", 0.0, 0.0001)
73
+ end
74
+
75
+ def assert_priority(priority, expected, delta)
76
+ assert_need_to_run("test_#{priority}", expected, delta)
77
+ assert_need_to_run("test_#{priority}_inherited", expected, delta)
78
+ end
79
+
80
+ def assert_need_to_run(test_name, expected, delta)
81
+ test = TestCase.new(test_name)
82
+ n = 1000
83
+ n_need_to_run = 0
84
+ n.times do |i|
85
+ n_need_to_run +=1 if Test::Unit::Priority::Checker.need_to_run?(test)
86
+ end
87
+ assert_in_delta(expected, n_need_to_run.to_f / n, delta)
88
+ end
89
+ end
@@ -0,0 +1,411 @@
1
+ # Author:: Nathaniel Talbott.
2
+ # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
3
+ # License:: Ruby license.
4
+
5
+ require 'test/unit'
6
+
7
+ module Test
8
+ module Unit
9
+ class TC_TestCase < TestCase
10
+ def test_creation
11
+ tc = Class.new(TestCase) do
12
+ def test_with_arguments(arg1, arg2)
13
+ end
14
+ end
15
+
16
+ caught = true
17
+ catch(:invalid_test) do
18
+ tc.new(:test_with_arguments)
19
+ caught = false
20
+ end
21
+ check("Should have caught an invalid test when there are arguments", caught)
22
+
23
+ caught = true
24
+ catch(:invalid_test) do
25
+ tc.new(:non_existent_test)
26
+ caught = false
27
+ end
28
+ check("Should have caught an invalid test when the method does not exist", caught)
29
+ end
30
+
31
+ def setup
32
+ @tc_failure_error = Class.new(TestCase) do
33
+ def test_failure
34
+ assert_block("failure") { false }
35
+ end
36
+ def test_error
37
+ 1 / 0
38
+ end
39
+ def test_nested_failure
40
+ nested
41
+ end
42
+ def nested
43
+ assert_block("nested"){false}
44
+ end
45
+ def return_passed?
46
+ return passed?
47
+ end
48
+ end
49
+
50
+ def @tc_failure_error.name
51
+ "TC_FailureError"
52
+ end
53
+ end
54
+
55
+ def test_add_failed_assertion
56
+ test_case = @tc_failure_error.new(:test_failure)
57
+ check("passed? should start out true", test_case.return_passed?)
58
+ result = TestResult.new
59
+ called = false
60
+ result.add_listener(TestResult::FAULT) {
61
+ | fault |
62
+ check("Should have a Failure", fault.instance_of?(Failure))
63
+ check("The Failure should have the correct message", "failure" == fault.message)
64
+ check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_failure(TC_FailureError)")
65
+ r = /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `test_failure'\Z/
66
+
67
+ location = fault.location
68
+ check("The location should be an array", location.kind_of?(Array))
69
+ check("The location should have two lines (was: <#{location.inspect}>)", location.size == 2)
70
+ check("The Failure should have the correct location (was <#{location[0].inspect}>, expected <#{r.inspect}>)", r =~ location[0])
71
+ called = true
72
+ }
73
+ progress = []
74
+ test_case.run(result) { |*arguments| progress << arguments }
75
+ check("The failure should have triggered the listener", called)
76
+ check("The failure should have set passed?", !test_case.return_passed?)
77
+ check("The progress block should have been updated correctly", [[TestCase::STARTED, test_case.name], [TestCase::FINISHED, test_case.name]] == progress)
78
+ end
79
+
80
+ def test_add_failure_nested
81
+ test_case = @tc_failure_error.new(:test_nested_failure)
82
+ check("passed? should start out true", test_case.return_passed?)
83
+
84
+ result = TestResult.new
85
+ called = false
86
+ result.add_listener(TestResult::FAULT) {
87
+ | fault |
88
+ check("Should have a Failure", fault.instance_of?(Failure))
89
+ check("The Failure should have the correct message", "nested" == fault.message)
90
+ check("The Failure should have the correct test_name (was <#{fault.test_name}>)", fault.test_name == "test_nested_failure(TC_FailureError)")
91
+ r =
92
+
93
+ location = fault.location
94
+ check("The location should be an array", location.kind_of?(Array))
95
+ check("The location should have the correct number of lines (was: <#{location.inspect}>)", location.size == 3)
96
+ check("The Failure should have the correct location (was <#{location[0].inspect}>)", /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `nested'\Z/ =~ location[0])
97
+ check("The Failure should have the correct location (was <#{location[1].inspect}>)", /\A.*#{Regexp.escape(File.basename(__FILE__))}:\d+:in `test_nested_failure'\Z/ =~ location[1])
98
+ called = true
99
+ }
100
+ test_case.run(result){}
101
+ check("The failure should have triggered the listener", called)
102
+ end
103
+
104
+ def test_add_error
105
+ test_case = @tc_failure_error.new(:test_error)
106
+ check("passed? should start out true", test_case.return_passed?)
107
+ result = TestResult.new
108
+ called = false
109
+ result.add_listener(TestResult::FAULT) {
110
+ | fault |
111
+ check("Should have a TestError", fault.instance_of?(Error))
112
+ check("The Error should have the correct message", "ZeroDivisionError: divided by 0" == fault.message)
113
+ check("The Error should have the correct test_name", "test_error(TC_FailureError)" == fault.test_name)
114
+ check("The Error should have the correct exception", fault.exception.instance_of?(ZeroDivisionError))
115
+ called = true
116
+ }
117
+ test_case.run(result) {}
118
+ check("The error should have triggered the listener", called)
119
+ check("The error should have set passed?", !test_case.return_passed?)
120
+ end
121
+
122
+ def test_no_tests
123
+ suite = TestCase.suite
124
+ check("Should have a test suite", suite.instance_of?(TestSuite))
125
+ check("Should have one test", suite.size == 1)
126
+ check("Should have the default test", suite.tests.first.name == "default_test(Test::Unit::TestCase)")
127
+
128
+ result = TestResult.new
129
+ suite.run(result) {}
130
+ check("Should have had one test run", result.run_count == 1)
131
+ check("Should have had one test failure", result.failure_count == 1)
132
+ check("Should have had no errors", result.error_count == 0)
133
+ end
134
+
135
+ def test_suite
136
+ tc = Class.new(TestCase) do
137
+ def test_succeed
138
+ assert_block {true}
139
+ end
140
+ def test_fail
141
+ assert_block {false}
142
+ end
143
+ def test_error
144
+ 1/0
145
+ end
146
+ def dont_run
147
+ assert_block {true}
148
+ end
149
+ def test_dont_run(argument)
150
+ assert_block {true}
151
+ end
152
+ def test
153
+ assert_block {true}
154
+ end
155
+ end
156
+
157
+ suite = tc.suite
158
+ check("Should have a test suite", suite.instance_of?(TestSuite))
159
+ check("Should have three tests", suite.size == 3)
160
+
161
+ result = TestResult.new
162
+ suite.run(result) {}
163
+ check("Should have had three test runs", result.run_count == 3)
164
+ check("Should have had one test failure", result.failure_count == 1)
165
+ check("Should have had one test error", result.error_count == 1)
166
+ end
167
+
168
+
169
+ def test_setup_teardown
170
+ tc = Class.new(TestCase) do
171
+ attr_reader(:setup_called, :teardown_called)
172
+ def initialize(test)
173
+ super(test)
174
+ @setup_called = false
175
+ @teardown_called = false
176
+ end
177
+ def setup
178
+ @setup_called = true
179
+ end
180
+ def teardown
181
+ @teardown_called = true
182
+ end
183
+ def test_succeed
184
+ assert_block {true}
185
+ end
186
+ def test_fail
187
+ assert_block {false}
188
+ end
189
+ def test_error
190
+ raise "Error!"
191
+ end
192
+ end
193
+ result = TestResult.new
194
+
195
+ test = tc.new(:test_succeed)
196
+ test.run(result) {}
197
+ check("Should have called setup the correct number of times", test.setup_called)
198
+ check("Should have called teardown the correct number of times", test.teardown_called)
199
+
200
+ test = tc.new(:test_fail)
201
+ test.run(result) {}
202
+ check("Should have called setup the correct number of times", test.setup_called)
203
+ check("Should have called teardown the correct number of times", test.teardown_called)
204
+
205
+ test = tc.new(:test_error)
206
+ test.run(result) {}
207
+ check("Should have called setup the correct number of times", test.setup_called)
208
+ check("Should have called teardown the correct number of times", test.teardown_called)
209
+
210
+ check("Should have had two test runs", result.run_count == 3)
211
+ check("Should have had a test failure", result.failure_count == 1)
212
+ check("Should have had a test error", result.error_count == 1)
213
+ end
214
+
215
+ def test_assertion_failed_not_called
216
+ tc = Class.new(TestCase) do
217
+ def test_thing
218
+ raise AssertionFailedError.new
219
+ end
220
+ end
221
+
222
+ suite = tc.suite
223
+ check("Should have one test", suite.size == 1)
224
+ result = TestResult.new
225
+ suite.run(result) {}
226
+ check("Should have had one test run", result.run_count == 1)
227
+ check("Should have had one assertion failure", result.failure_count == 1)
228
+ check("Should not have any assertion errors but had #{result.error_count}", result.error_count == 0)
229
+ end
230
+
231
+ def test_equality
232
+ tc1 = Class.new(TestCase) do
233
+ def test_1
234
+ end
235
+ def test_2
236
+ end
237
+ end
238
+
239
+ tc2 = Class.new(TestCase) do
240
+ def test_1
241
+ end
242
+ end
243
+
244
+ test1 = tc1.new('test_1')
245
+ test2 = tc1.new('test_1')
246
+ check("Should be equal", test1 == test2)
247
+ check("Should be equal", test2 == test1)
248
+
249
+ test1 = tc1.new('test_2')
250
+ check("Should not be equal", test1 != test2)
251
+ check("Should not be equal", test2 != test1)
252
+
253
+ test2 = tc1.new('test_2')
254
+ check("Should be equal", test1 == test2)
255
+ check("Should be equal", test2 == test1)
256
+
257
+ test1 = tc1.new('test_1')
258
+ test2 = tc2.new('test_1')
259
+ check("Should not be equal", test1 != test2)
260
+ check("Should not be equal", test2 != test1)
261
+
262
+
263
+ check("Should not be equal", test1 != Object.new)
264
+ check("Should not be equal", Object.new != test1)
265
+ end
266
+
267
+ def test_re_raise_exception
268
+ test_case = Class.new(TestCase) do
269
+ def test_raise_interrupt
270
+ raise Interrupt
271
+ end
272
+ end
273
+
274
+ test = test_case.new("test_raise_interrupt")
275
+ begin
276
+ test.run(TestResult.new) {}
277
+ check("Should not be reached", false)
278
+ rescue Exception
279
+ check("Interrupt exception should be re-raised", $!.class == Interrupt)
280
+ end
281
+ end
282
+
283
+ def test_startup_shutdown
284
+ called = []
285
+ test_case = Class.new(TestCase) do
286
+ @@called = called
287
+ class << self
288
+ def startup
289
+ @@called << :startup
290
+ end
291
+
292
+ def shutdown
293
+ @@called << :shutdown
294
+ end
295
+ end
296
+
297
+ def setup
298
+ @@called << :setup
299
+ end
300
+
301
+ def teardown
302
+ @@called << :teardown
303
+ end
304
+
305
+ def test1
306
+ end
307
+
308
+ def test2
309
+ end
310
+ end
311
+
312
+ test_suite = test_case.suite
313
+ test_suite.run(TestResult.new) {}
314
+ check("startup/shutdown should be called once per test case" +
315
+ ": #{called.inspect}",
316
+ called == [:startup,
317
+ :setup, :teardown,
318
+ :setup, :teardown,
319
+ :shutdown])
320
+ end
321
+
322
+ def test_error_on_startup
323
+ test_case = Class.new(TestCase) do
324
+ class << self
325
+ def startup
326
+ raise "from startup"
327
+ end
328
+ end
329
+
330
+ def test_nothing
331
+ end
332
+ end
333
+
334
+ test_suite = test_case.suite
335
+ result = TestResult.new
336
+ test_suite.run(result) {}
337
+ check("Should record an error on startup: #{result}",
338
+ result.error_count == 1)
339
+ end
340
+
341
+ def test_pass_through_error_on_startup
342
+ test_case = Class.new(TestCase) do
343
+ class << self
344
+ def startup
345
+ raise Interrupt
346
+ end
347
+ end
348
+
349
+ def test_nothing
350
+ end
351
+ end
352
+
353
+ test_suite = test_case.suite
354
+ begin
355
+ test_suite.run(TestResult.new) {}
356
+ check("Should not be reached", false)
357
+ rescue Exception
358
+ check("Interrupt should be passed through: #{$!}",
359
+ Interrupt === $!)
360
+ end
361
+ end
362
+
363
+ def test_error_on_shutdown
364
+ test_case = Class.new(TestCase) do
365
+ class << self
366
+ def shutdown
367
+ raise "from shutdown"
368
+ end
369
+ end
370
+
371
+ def test_nothing
372
+ end
373
+ end
374
+
375
+ test_suite = test_case.suite
376
+ result = TestResult.new
377
+ test_suite.run(result) {}
378
+ check("Should record an error on shutdown: #{result}",
379
+ result.error_count == 1)
380
+ end
381
+
382
+ def test_pass_through_error_on_shutdown
383
+ test_case = Class.new(TestCase) do
384
+ class << self
385
+ def shutdown
386
+ raise Interrupt
387
+ end
388
+ end
389
+
390
+ def test_nothing
391
+ end
392
+ end
393
+
394
+ test_suite = test_case.suite
395
+ begin
396
+ test_suite.run(TestResult.new) {}
397
+ check("Should not be reached", false)
398
+ rescue Exception
399
+ check("Interrupt should be passed through: #{$!}",
400
+ Interrupt === $!)
401
+ end
402
+ end
403
+
404
+ private
405
+ def check(message, passed)
406
+ add_assertion
407
+ raise AssertionFailedError.new(message) unless passed
408
+ end
409
+ end
410
+ end
411
+ end